From 1b94784c7f447d5c6678232b48bb04d4f4c1dc95 Mon Sep 17 00:00:00 2001 From: didier amyot Date: Sat, 1 Apr 2023 11:05:56 -0400 Subject: [PATCH] Added favicons and shit like this. --- .../migrations/sql/create_tables_001.sql | 2 +- .../favicons/android-chrome-192x192.png | Bin 0 -> 15493 bytes .../favicons/android-chrome-512x512.png | Bin 0 -> 52945 bytes .../static/favicons/apple-touch-icon.png | Bin 0 -> 14014 bytes resources/static/favicons/favicon-16x16.png | Bin 0 -> 748 bytes resources/static/favicons/favicon-32x32.png | Bin 0 -> 1873 bytes resources/static/favicons/favicon.ico | Bin 0 -> 15406 bytes resources/static/favicons/site.webmanifest | 19 +++++ resources/templates/base.html | 6 ++ .../templates/partials/index/failure.html | 16 ++++ resources/templates/partials/index/form.html | 4 +- .../templates/partials/index/success.html | 2 +- src/db/_users.rs | 80 ++++++++++++++++-- src/db/mod.rs | 2 +- src/services/_authentication.rs | 11 +++ src/services/_users.rs | 13 ++- src/webui/index_views.rs | 21 ++++- src/webui/services.rs | 9 +- 18 files changed, 163 insertions(+), 22 deletions(-) create mode 100644 resources/static/favicons/android-chrome-192x192.png create mode 100644 resources/static/favicons/android-chrome-512x512.png create mode 100644 resources/static/favicons/apple-touch-icon.png create mode 100644 resources/static/favicons/favicon-16x16.png create mode 100644 resources/static/favicons/favicon-32x32.png create mode 100644 resources/static/favicons/favicon.ico create mode 100644 resources/static/favicons/site.webmanifest create mode 100644 resources/templates/partials/index/failure.html diff --git a/resources/migrations/sql/create_tables_001.sql b/resources/migrations/sql/create_tables_001.sql index 1069eb3..0be5d6c 100644 --- a/resources/migrations/sql/create_tables_001.sql +++ b/resources/migrations/sql/create_tables_001.sql @@ -14,7 +14,7 @@ VALUES ('aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkk'); CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, + name TEXT NOT NULL UNIQUE, public_key TEXT NOT NULL, creation_time DATETIME DEFAULT CURRENT_TIMESTAMP ); diff --git a/resources/static/favicons/android-chrome-192x192.png b/resources/static/favicons/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..7a32768a5b50efadca7187d1f2a9a5221880a97e GIT binary patch literal 15493 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 literal 0 HcmV?d00001 diff --git a/resources/static/favicons/apple-touch-icon.png b/resources/static/favicons/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5f174563a6b43186560868c353b8bcc02d121c8b GIT binary patch literal 14014 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 E02{=UfdBvi literal 0 HcmV?d00001 diff --git a/resources/static/favicons/favicon-16x16.png b/resources/static/favicons/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..e46cf3a00b5ca9b243f00dedb81fbde76d7e7892 GIT binary patch literal 748 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z_iTM z#WBRfKQ#Ehw@9Ff-Scy0v76lwMwGv^+TAUb$F**WNTY3wqa(kfW7vgcj|atHr6&5j z-jGj_o^i=JP{iehv%rra&RH{?Hyhu+k)(LC$#}DI@#AyrOXS|&seZTfdCmRubB+uQ zEDU;PzrQ^#+F4uu`+G5i-nwHYvG*-sNX`=o+@a91|AXkgq|*|+nH$#1Sg5y{nD|yV zG$`0Gg>P)w;KF~z-a#R;d1?CpBJ>-eNq3QBE<)INEvyb`s`w6^r`?_bwj zm>2|(-6-N-x}87pm);fCRUSS@3C9j@n;Uq0+dJv4^J@?6?C)Ci<@Y}O!K|OHz~nXrw>*}$Ls>U?02n;zG9LaWAoz8nOR$-bcIh( zsb6ZaIrCif^fii!!6HkWJj`s?S4wTZ`9^B#ms#&WpIo)9SGzLx=B71qogVYEx88bi zQCxec{ek)abmR6+%6nC8@nX)KS3z3Sa&3J)SEg&6{-mRLVxmC2LW0rh>UrN!mfn3> zwRfMU(Y-z2bAO!NQ_h^`=R5IVtm*XEt19MsGdLUyT6yJShKbzIJJWks*{N-@GBhbE z%glUP8nTeZ7#J8l MUHx3vIVCg!01NnHcK`qY literal 0 HcmV?d00001 diff --git a/resources/static/favicons/favicon-32x32.png b/resources/static/favicons/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..47545b01f3da183e71c4c7ed0fe25665e0bbdb08 GIT binary patch literal 1873 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>VCVL9 zaSVxYpBrB76C5sK|NP#!ZABcNpV%v;S2w|P&$Ro=e0 z=-of&?|0tU+y|lGwaW!;&M`AGXzW?IWJ${0yLt8PKjRk$$h>*^GSk2G=&cDK4ELS; zGyR+A4Y}&Z1zWaMG@mW|Z^6LOpTpO2^ik>d{QECE6nknq*g78gb($(SY$$!DdBuN~ zZ)3s(&6z&G3>gG=#;n`R;&?|&Mn-3*Ykm6biXmJ)=#ZJ@%+Xh2Mz|V+bx@A?j4@^;mVRMlUa4Ao(G=~ z)395bDdpqiSEDAvF;i&DrnSn3H{Si{XAff3iQBW|SlVV&r4}WXmXNe%Yd$?Y8?7VM z=Kp6ykCDRT%*3OQZk^k9_4U{67(H=jrqtBby_c?EzkX0H_sf^S=_d;pz3;!k`cUYo z$I(wqLbQAZoHDjXeZBL>|4sR_e&D5MVea8fruF1>- z3^Dfg|H|f{4}bnSFl!cHk(QEEhy1G~j=wP{j~U2tupHUoq4MjYTm1d$91O<-pLC|% zJe!l4S6j>c@$<#SXD@?8ZDCjLUNt?nMQr~0>-;=CcjgC5-#n3g$1^p~(ea?L zi0fS!j)RjPP1+N@cKI@4kBI1K?Ok<$f3?%$u}5`Xc| zPAvm7vuB=<0&R?#ByRfcn|ScNMRwIalS6H*uD)C~$1mNxr1$vat<$DX-OKW|>hEd3 z_Qx#&8gCwd{<&9g`s>n3D%#e)$IQ$amIhg#dj7fd;lqb-O485fpN+S-u)Sf`ZNB_`C z)8=BmTRGo-oEkq!oH>2k+MoTU>$Sqwb5u^2A7(I_>h}1lS(~3Lx7eRoW&XO0HR9zC z*Ec#CGznPcZ{*4E?%Q}rxc;@Q$+e@06A!bu_OieJ%P!I}Zx55<$MOv&N#?}@&5eu( zSNIgyY>ryX9_n?~-h$u!;GaK#HjB81hJ;KxzpH9%dbAUp0)y4scatu^G*MZ>;I#bx z-M!n*v{n{JpOHScCuDO=yXh`-kzBXEmii3`?p|gP-g;oU?Ny)Gn;4%wc_Op%W=>h7 zLjkLph{&6-KK}2|%+jqt{kG_{=BfGym8%mo31^3f7 zmmWX%-hpsGKV)jbTEim5x81g-&iJrw{)qO<*COXI|ccK+RjMyMwPCXy1}IG z$aamd`q}#Q)9VgyunA$3Ieyl}cQOM*)Y2f)_9+`ytjJh>_@RZvm{UGfhA8YKN^kAul7dM_GWQZaWX}+Rihxwg^psH}AmK#w!_C8uRl_ zS6&p6(vO$x=nOej)5!27`_uV~z4x9k33_?%-@kuKu>e z98HRxTP9&Bucf6W*4Ni3l{sq~N9!TEg#kar=O6dqakRj%`Gi4Ih4A0E!W=A($6srH ztE%-j;PG1-vg+yGyW#6LuRr+F@w`=RVc|!v_QM~!T>~p)#J5gyQHgDwykD5baNg9Z zU$gS_-?u(_d8$%5$!|y2Rjq}mU)Ef-HC-y!=^}ZOSwl{xHr7V&{FVqEIYAB<-MO)I y<<|YKk7D>3eQL3&-OqA|q}>HEF-mOz8NdDz)yWJsxX!@9z~JfX=d#Wzp$PzUtB+U! literal 0 HcmV?d00001 diff --git a/resources/static/favicons/favicon.ico b/resources/static/favicons/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4b5a43691568c2d70a29cac266dfddd50846a939 GIT binary patch literal 15406 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 pHnJKJTTf4q+uYpTRaI5B22`e+o142?TU+yj + + + + + + ledger diff --git a/resources/templates/partials/index/failure.html b/resources/templates/partials/index/failure.html new file mode 100644 index 0000000..58058c3 --- /dev/null +++ b/resources/templates/partials/index/failure.html @@ -0,0 +1,16 @@ +
+

+ Sorry mate, that was plainly wrong. +

+
+ + +
+ +
+ +
+
diff --git a/resources/templates/partials/index/form.html b/resources/templates/partials/index/form.html index 31c2e32..d064ce9 100644 --- a/resources/templates/partials/index/form.html +++ b/resources/templates/partials/index/form.html @@ -4,8 +4,8 @@ hx-target="#home-page-main-block">
diff --git a/resources/templates/partials/index/success.html b/resources/templates/partials/index/success.html index 6ec4fa7..c8d9768 100644 --- a/resources/templates/partials/index/success.html +++ b/resources/templates/partials/index/success.html @@ -1,7 +1,7 @@

- You are logged in as {{ name }}. + Congrat! You are now logged in as {{ user.name }}.

diff --git a/src/db/_users.rs b/src/db/_users.rs index 1131f91..74af1bc 100644 --- a/src/db/_users.rs +++ b/src/db/_users.rs @@ -1,4 +1,4 @@ -use rusqlite::{params, Connection, Result, Row, Transaction}; +use rusqlite::{params, Connection, Result, Row, Transaction, OptionalExtension}; use serde::Serialize; use crate::db::_external_id::{Id, UserId}; @@ -22,12 +22,12 @@ impl User { } pub fn create_user(tx: &Transaction, name: &String, public_key: &String) -> CustomResult { - tx.execute( - "INSERT INTO users (name, public_key) VALUES (?1, ?2)", + tx.query_row( + "INSERT INTO users (name, public_key) VALUES (?1, ?2) RETURNING *", (name, public_key), + _user_from_row ) - .map_err(Error::SqlError)?; - return get_user_by_id(tx, tx.last_insert_rowid() as i32); + .map_err(Error::SqlError) } fn _user_from_row(row: &Row) -> Result { @@ -38,11 +38,21 @@ fn _user_from_row(row: &Row) -> Result { }) } -fn get_user_by_id(tx: &Transaction, id: i32) -> CustomResult { +fn get_user_by_id(tx: &Transaction, id: & UserId) -> CustomResult> { let q = "SELECT id, name, public_key FROM users WHERE id = ?1"; tx.query_row(q, params![id], _user_from_row) + .optional() + .map_err(Error::SqlError) +} + +pub fn get_user_by_name(tx: &Connection, name: &String) -> CustomResult>{ + let q = "SELECT id, name, public_key + FROM users + WHERE name = ?1"; + tx.query_row(q, params![name], _user_from_row) + .optional() .map_err(Error::SqlError) } @@ -58,3 +68,61 @@ pub fn list_users(conn: &Connection) -> CustomResult> { .collect(); return Ok(ret); } + +#[cfg(test)] +mod test_users { + use crate::migration; + use super::*; + + fn setup() -> Connection{ + let mut conn = Connection::open_in_memory().unwrap(); + migration::apply_migrations(&mut conn).unwrap(); + conn + } + + fn setup_with_one_user() -> (Connection, User){ + let mut conn = setup(); + let tx = conn.transaction().unwrap(); + let u = create_user(& tx, & "bob".to_string(), & "123".to_string()).unwrap(); + tx.commit().unwrap(); + (conn, u) + } + + #[test] + fn test_happy_path() -> CustomResult<()>{ + let mut conn = setup(); + let tx = conn.transaction().unwrap(); + let u = create_user(& tx, & "alice".to_string(), & "123".to_string())?; + tx.commit().unwrap(); + + let tx = conn.transaction().unwrap(); + assert_eq!( list_users(& tx)?.len(), 1); + + assert!( get_user_by_name(&tx, & u.name)?.is_some()); + Ok(()) + } + + #[test] + fn test_get_user() -> CustomResult<()>{ + let (mut conn, user) = setup_with_one_user(); + let tx = conn.transaction().unwrap(); + + assert!( get_user_by_name(&tx, & user.name)?.is_some()); + assert!( get_user_by_name(&tx, & "404-not-found".to_string())?.is_none()); + Ok(()) + } + + #[test] + fn test_get_user_by_id() -> CustomResult<()> { + let (mut conn, user) = setup_with_one_user(); + let tx = conn.transaction().unwrap(); + + assert!( get_user_by_id(&tx, & user.id())?.is_some()); + + let random_id = UserId::from_id(8734289723902734); + + assert!( get_user_by_id(&tx, & random_id)?.is_none()); + Ok(()) + } + +} diff --git a/src/db/mod.rs b/src/db/mod.rs index c46f675..63f6a21 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -22,7 +22,7 @@ pub mod securities { } pub mod users { - pub use super::_users::{create_user, list_users, User}; + pub use super::_users::{create_user, list_users, get_user_by_name, User}; } pub mod accounts { diff --git a/src/services/_authentication.rs b/src/services/_authentication.rs index c5d94ab..e6993fb 100644 --- a/src/services/_authentication.rs +++ b/src/services/_authentication.rs @@ -11,6 +11,13 @@ pub struct SessionService { } impl SessionService { + + pub fn get_key(conn: &mut Connection) -> CustomResult { + let tx = conn.transaction().map_err(Error::SqlError)?; + let secret = LedgerInternal::new().get_cookie_secret(&tx)?; + Ok(Key::derive_from(&secret)) + } + pub fn from_conn(conn: &mut Connection) -> CustomResult { let tx = conn.transaction().map_err(Error::SqlError)?; let secret = LedgerInternal::new().get_cookie_secret(&tx)?; @@ -20,6 +27,10 @@ impl SessionService { Ok(ret) } + pub fn from_key(key: Key) -> SessionService{ + SessionService{key} + } + pub fn create_login_cookie(&self, user_id: &String) -> Cookie { let mut jar = CookieJar::new(); jar.private_mut(&self.key) diff --git a/src/services/_users.rs b/src/services/_users.rs index a2acab6..ea81b43 100644 --- a/src/services/_users.rs +++ b/src/services/_users.rs @@ -2,7 +2,7 @@ use rusqlite::Connection; use serde::Deserialize; use serde::Serialize; -use crate::db::users::{list_users, User}; +use crate::db::users::{get_user_by_name, list_users, User}; use crate::util::CustomResult; #[derive(Serialize, Debug)] @@ -28,10 +28,10 @@ where } } -#[derive(Deserialize, Serialize, Debug)] +#[derive(Deserialize, Serialize, Debug, Clone)] pub struct UserDTO { - name: String, - id: String, // todo: should be of type UserId + pub name: String, + pub id: String, // todo: should be of type UserId } impl UserDTO { @@ -52,6 +52,11 @@ impl UserService<'_> { UserService { conn } } + pub fn get_user_for_authentication(&self, username: &String, _credentials: &String) -> CustomResult> { + let ret = get_user_by_name(self.conn, username)?; + Ok(ret.as_ref().map(UserDTO::from_entity)) + } + pub fn list_users(self) -> CustomResult> { let users = list_users(self.conn)? .iter() diff --git a/src/webui/index_views.rs b/src/webui/index_views.rs index b8bb2b7..65c51f5 100644 --- a/src/webui/index_views.rs +++ b/src/webui/index_views.rs @@ -11,16 +11,27 @@ pub struct LoginPayload { password: String, } +fn logout_req(){ + +} + #[actix_web::post("/login")] pub async fn login( tmpl_env: MiniJinjaRenderer, web::Json(form): web::Json, service_factory: web::Data, ) -> actix_web::Result { + let conn = service_factory.get_connection()?; + let user_service = service_factory.get_user_service(&conn)?; + let maybeUser = user_service.get_user_for_authentication(&form.username, &form.password).unwrap(); + if maybeUser.is_none() { + return Ok(tmpl_env.render("partials/index/failure.html", context!{})?.customize()); + } + let user = maybeUser.unwrap(); let authentication_service = service_factory.get_authentication_service()?; - let cookie = authentication_service.create_login_cookie(&form.username); + let cookie = authentication_service.create_login_cookie(&user.id); let ctx = context! { - name => form.username, + user => & user, }; let ret = tmpl_env .render("partials/index/success.html", ctx)? @@ -46,12 +57,16 @@ pub async fn index( service_factory: web::Data, tmpl_env: MiniJinjaRenderer, ) -> actix_web::Result { + let conn = service_factory.get_connection()?; let authentication_service = service_factory.get_authentication_service()?; + let user_service = service_factory.get_user_service(&conn)?; + let userid = authentication_service.get_login(&req); + let username = userid.clone().unwrap_or("".to_string()); let ctx = context! { is_logged_in => userid.is_some(), - name => username, + // user => user_service.get_user_for_authentication(userid.unwrap(), }; tmpl_env.render("index.html", ctx) } diff --git a/src/webui/services.rs b/src/webui/services.rs index c3d04b4..c41c111 100644 --- a/src/webui/services.rs +++ b/src/webui/services.rs @@ -5,6 +5,7 @@ use r2d2::PooledConnection; use r2d2_sqlite::SqliteConnectionManager; use std::path::PathBuf; +use cookie::Key; pub type DbPool = r2d2::Pool; @@ -15,7 +16,7 @@ pub fn creat_db_pool(path: &PathBuf) -> DbPool { #[derive(Clone)] struct ServicesCache { - session_service: SessionService, + session_service_key: Key, } #[derive(Clone)] @@ -27,8 +28,8 @@ pub struct ServicesFactory { impl ServicesFactory { pub fn new(pool: DbPool) -> ServicesFactory { let mut conn = pool.get().unwrap(); - let session_service = SessionService::from_conn(&mut conn).unwrap(); - let cache = ServicesCache { session_service }; + let session_service_key = SessionService::get_key(&mut conn).unwrap(); + let cache = ServicesCache { session_service_key }; ServicesFactory { pool, cache } } @@ -39,7 +40,7 @@ impl ServicesFactory { } pub fn get_authentication_service(&self) -> Result { - Ok(self.cache.session_service.clone()) + Ok(SessionService::from_key(self.cache.session_service_key.clone())) } pub fn get_user_service<'a>(