rename some templates, lean in to big-endian IDs
This commit is contained in:
parent
4211ead59e
commit
84d70336d3
5 changed files with 19 additions and 19 deletions
12
src/db_id.rs
12
src/db_id.rs
|
@ -16,10 +16,10 @@ pub struct DbId(pub Ulid);
|
||||||
|
|
||||||
impl DbId {
|
impl DbId {
|
||||||
pub fn bytes(&self) -> [u8; 16] {
|
pub fn bytes(&self) -> [u8; 16] {
|
||||||
self.as_be_bytes()
|
self.to_be_bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn as_be_bytes(&self) -> [u8; 16] {
|
pub fn to_be_bytes(self) -> [u8; 16] {
|
||||||
self.0 .0.to_be_bytes()
|
self.0 .0.to_be_bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ impl<'r> Decode<'r, Sqlite> for DbId {
|
||||||
fn decode(value: SqliteValueRef<'r>) -> Result<Self, sqlx::error::BoxDynError> {
|
fn decode(value: SqliteValueRef<'r>) -> Result<Self, sqlx::error::BoxDynError> {
|
||||||
let bytes = <&[u8] as Decode<Sqlite>>::decode(value)?;
|
let bytes = <&[u8] as Decode<Sqlite>>::decode(value)?;
|
||||||
let bytes: [u8; 16] = bytes.try_into().unwrap_or_default();
|
let bytes: [u8; 16] = bytes.try_into().unwrap_or_default();
|
||||||
Ok(u128::from_ne_bytes(bytes).into())
|
Ok(u128::from_be_bytes(bytes).into())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,21 +192,21 @@ impl<'de> Visitor<'de> for DbIdVisitor {
|
||||||
where
|
where
|
||||||
A: serde::de::SeqAccess<'de>,
|
A: serde::de::SeqAccess<'de>,
|
||||||
{
|
{
|
||||||
let mut bytes = [0u8; 16];
|
let mut raw_bytes_from_db = [0u8; 16];
|
||||||
let size = seq.size_hint().unwrap_or(0);
|
let size = seq.size_hint().unwrap_or(0);
|
||||||
let mut count = 0;
|
let mut count = 0;
|
||||||
while let Some(val) = seq.next_element()? {
|
while let Some(val) = seq.next_element()? {
|
||||||
if count > 15 {
|
if count > 15 {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
bytes[count] = val;
|
raw_bytes_from_db[count] = val;
|
||||||
count += 1;
|
count += 1;
|
||||||
}
|
}
|
||||||
if count != 16 || size > 16 {
|
if count != 16 || size > 16 {
|
||||||
let sz = if count < 16 { count } else { size };
|
let sz = if count < 16 { count } else { size };
|
||||||
Err(serde::de::Error::invalid_length(sz, &self))
|
Err(serde::de::Error::invalid_length(sz, &self))
|
||||||
} else {
|
} else {
|
||||||
Ok(u128::from_ne_bytes(bytes).into())
|
Ok(u128::from_be_bytes(raw_bytes_from_db).into())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,7 +74,7 @@ pub async fn app(db_pool: sqlx::SqlitePool, session_secret: &[u8]) -> axum::Rout
|
||||||
//-************************************************************************
|
//-************************************************************************
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::{CreateUserSuccess, MainPage, OptionalOptionalUser, User};
|
use super::{MainPage, OptionalOptionalUser, SignupSuccessPage, User};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn main_page_has_optional_user() {
|
fn main_page_has_optional_user() {
|
||||||
|
@ -83,7 +83,7 @@ mod test {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn signup_success_has_no_optional_user() {
|
fn signup_success_has_no_optional_user() {
|
||||||
assert!(!CreateUserSuccess::default().has_optional_user());
|
assert!(!SignupSuccessPage::default().has_optional_user());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
10
src/login.rs
10
src/login.rs
|
@ -11,7 +11,7 @@ use axum::{
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use sqlx::SqlitePool;
|
use sqlx::SqlitePool;
|
||||||
|
|
||||||
use crate::{AuthContext, LoginPage, LogoutPage, LogoutSuccess, User};
|
use crate::{AuthContext, LoginPage, LogoutPage, LogoutSuccessPage, User};
|
||||||
|
|
||||||
//-************************************************************************
|
//-************************************************************************
|
||||||
// Constants
|
// Constants
|
||||||
|
@ -101,13 +101,13 @@ pub async fn post_logout(mut auth: AuthContext) -> impl IntoResponse {
|
||||||
if auth.current_user.is_some() {
|
if auth.current_user.is_some() {
|
||||||
auth.logout().await;
|
auth.logout().await;
|
||||||
}
|
}
|
||||||
LogoutSuccess
|
LogoutSuccessPage
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use crate::{
|
use crate::{
|
||||||
templates::{LoginPage, LogoutPage, LogoutSuccess, MainPage},
|
templates::{LoginPage, LogoutPage, LogoutSuccessPage, MainPage},
|
||||||
test_utils::{get_test_user, massage, server, FORM_CONTENT_TYPE},
|
test_utils::{get_test_user, massage, server, FORM_CONTENT_TYPE},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ mod test {
|
||||||
let resp = s.post("/logout").await;
|
let resp = s.post("/logout").await;
|
||||||
resp.assert_status_ok();
|
resp.assert_status_ok();
|
||||||
let body = std::str::from_utf8(resp.bytes()).unwrap();
|
let body = std::str::from_utf8(resp.bytes()).unwrap();
|
||||||
let default = LogoutSuccess.to_string();
|
let default = LogoutSuccessPage.to_string();
|
||||||
assert_eq!(body, &default);
|
assert_eq!(body, &default);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -213,7 +213,7 @@ mod test {
|
||||||
|
|
||||||
let resp = s.post("/logout").await;
|
let resp = s.post("/logout").await;
|
||||||
let body = std::str::from_utf8(resp.bytes()).unwrap();
|
let body = std::str::from_utf8(resp.bytes()).unwrap();
|
||||||
let default = LogoutSuccess.to_string();
|
let default = LogoutSuccessPage.to_string();
|
||||||
assert_eq!(body, &default);
|
assert_eq!(body, &default);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ use serde::Deserialize;
|
||||||
use sqlx::{query_as, SqlitePool};
|
use sqlx::{query_as, SqlitePool};
|
||||||
use unicode_segmentation::UnicodeSegmentation;
|
use unicode_segmentation::UnicodeSegmentation;
|
||||||
|
|
||||||
use crate::{util::empty_string_as_none, CreateUserSuccess, DbId, SignupPage, User};
|
use crate::{util::empty_string_as_none, DbId, SignupPage, SignupSuccessPage, User};
|
||||||
|
|
||||||
pub(crate) const CREATE_QUERY: &str =
|
pub(crate) const CREATE_QUERY: &str =
|
||||||
"insert into witches (id, username, displayname, email, pwhash) values ($1, $2, $3, $4, $5)";
|
"insert into witches (id, username, displayname, email, pwhash) values ($1, $2, $3, $4, $5)";
|
||||||
|
@ -134,7 +134,7 @@ pub async fn get_signup_success(
|
||||||
.unwrap_or_default()
|
.unwrap_or_default()
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut resp = CreateUserSuccess(user.clone()).into_response();
|
let mut resp = SignupSuccessPage(user.clone()).into_response();
|
||||||
|
|
||||||
if user.username.is_empty() || id.is_nil() {
|
if user.username.is_empty() || id.is_nil() {
|
||||||
// redirect to front page if we got here without a valid witch ID
|
// redirect to front page if we got here without a valid witch ID
|
||||||
|
@ -213,7 +213,7 @@ mod test {
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
db::get_db_pool,
|
db::get_db_pool,
|
||||||
templates::{CreateUserSuccess, SignupPage},
|
templates::{SignupPage, SignupSuccessPage},
|
||||||
test_utils::{get_test_user, insert_user, massage, server_with_pool, FORM_CONTENT_TYPE},
|
test_utils::{get_test_user, insert_user, massage, server_with_pool, FORM_CONTENT_TYPE},
|
||||||
User,
|
User,
|
||||||
};
|
};
|
||||||
|
@ -264,7 +264,7 @@ mod test {
|
||||||
|
|
||||||
let resp = server.get(&path).expect_success().await;
|
let resp = server.get(&path).expect_success().await;
|
||||||
let body = std::str::from_utf8(resp.bytes()).unwrap();
|
let body = std::str::from_utf8(resp.bytes()).unwrap();
|
||||||
let expected = CreateUserSuccess(user).to_string();
|
let expected = SignupSuccessPage(user).to_string();
|
||||||
assert_eq!(&expected, body);
|
assert_eq!(&expected, body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ pub struct SignupPage {
|
||||||
Debug, Clone, Template, Default, Deserialize, Serialize, PartialEq, Eq, OptionalOptionalUser,
|
Debug, Clone, Template, Default, Deserialize, Serialize, PartialEq, Eq, OptionalOptionalUser,
|
||||||
)]
|
)]
|
||||||
#[template(path = "signup_success.html")]
|
#[template(path = "signup_success.html")]
|
||||||
pub struct CreateUserSuccess(pub User);
|
pub struct SignupSuccessPage(pub User);
|
||||||
|
|
||||||
#[derive(Debug, Default, Template, Deserialize, Serialize, PartialEq, Eq, OptionalOptionalUser)]
|
#[derive(Debug, Default, Template, Deserialize, Serialize, PartialEq, Eq, OptionalOptionalUser)]
|
||||||
#[template(path = "login_page.html")]
|
#[template(path = "login_page.html")]
|
||||||
|
@ -32,7 +32,7 @@ pub struct LogoutPage;
|
||||||
|
|
||||||
#[derive(Debug, Default, Template, Deserialize, Serialize, PartialEq, Eq, OptionalOptionalUser)]
|
#[derive(Debug, Default, Template, Deserialize, Serialize, PartialEq, Eq, OptionalOptionalUser)]
|
||||||
#[template(path = "logout_success.html")]
|
#[template(path = "logout_success.html")]
|
||||||
pub struct LogoutSuccess;
|
pub struct LogoutSuccessPage;
|
||||||
|
|
||||||
#[derive(Debug, Default, Template, Deserialize, Serialize, PartialEq, Eq, OptionalOptionalUser)]
|
#[derive(Debug, Default, Template, Deserialize, Serialize, PartialEq, Eq, OptionalOptionalUser)]
|
||||||
#[template(path = "index.html")]
|
#[template(path = "index.html")]
|
||||||
|
|
Loading…
Reference in a new issue