diff options
author | Galen Guyer <galen@galenguyer.com> | 2022-05-22 18:10:42 -0400 |
---|---|---|
committer | Galen Guyer <galen@galenguyer.com> | 2022-05-22 18:10:42 -0400 |
commit | 35baab0ec5aaadcc37e3d0cd8cd9ec98f1cf5df9 (patch) | |
tree | bcc7bac6c1be9a998c9ec428be1f7e6bc392eb16 | |
parent | 962670391865b9a58a50e36453cdf923494de44a (diff) |
issue jwt on login
-rw-r--r-- | src/db/mod.rs | 2 | ||||
-rw-r--r-- | src/routes/v1/users.rs | 12 |
2 files changed, 10 insertions, 4 deletions
diff --git a/src/db/mod.rs b/src/db/mod.rs index 1cc94cd..c88440f 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -2,5 +2,5 @@ pub mod records; pub mod users; pub mod zones; -mod models; +pub mod models; mod strings; diff --git a/src/routes/v1/users.rs b/src/routes/v1/users.rs index 236e581..00a8b84 100644 --- a/src/routes/v1/users.rs +++ b/src/routes/v1/users.rs @@ -1,4 +1,5 @@ use crate::db; +use crate::db::models::User; use crate::extractors::{Json, Jwt}; use crate::routes::v1::requests; use axum::extract::Query; @@ -33,7 +34,7 @@ pub async fn create_user( let user = db::users::create_user(&pool, &signup.email, &signup.password, &signup.display_name).await; match user { - Ok(user) => (StatusCode::OK, Json(json!(user))), + Ok(user) => (StatusCode::OK, Json(json!({ "token": issue_jwt(user) }))), Err(err) => match err { Error::Database(e) if e.code().unwrap_or(std::borrow::Cow::Borrowed("")) == "23505" => { ( @@ -129,6 +130,11 @@ pub async fn login( ); } + let token = issue_jwt(user); + (StatusCode::OK, Json(json!({ "token": token }))) +} + +fn issue_jwt(user: User) -> String { let key: Hmac<Sha256> = Hmac::new_from_slice((*JWT_SECRET).as_bytes()).unwrap(); let mut claims = BTreeMap::new(); @@ -136,7 +142,7 @@ pub async fn login( let exp = (chrono::Utc::now() + chrono::Duration::hours(24)) .timestamp() .to_string(); - let dn = user.display_name.unwrap_or_else(|| "".to_string()); + let dn = user.display_name.unwrap_or_else(|| user.email.clone()); let admin = user.admin.to_string(); let sub = user.id.to_string(); @@ -150,5 +156,5 @@ pub async fn login( claims.insert("admin", &admin); let token = claims.sign_with_key(&key).unwrap(); - (StatusCode::OK, Json(json!({ "token": token }))) + token } |