diff --git a/src/actors/openid_sessions_actor.rs b/src/actors/openid_sessions_actor.rs index e611a15..577868c 100644 --- a/src/actors/openid_sessions_actor.rs +++ b/src/actors/openid_sessions_actor.rs @@ -46,7 +46,7 @@ impl Session { jwt_signer: &JWTSigner) -> Res { let access_token = AccessToken { issuer: app_config.website_origin.to_string(), - subject_identifier: self.user.clone(), + subject_identifier: self.user.clone().0, issued_at: time(), exp_time: time() + OPEN_ID_ACCESS_TOKEN_TIMEOUT, rand_val: rand_str(OPEN_ID_ACCESS_TOKEN_LEN), diff --git a/src/controllers/admin_api.rs b/src/controllers/admin_api.rs index cacbc52..039ba62 100644 --- a/src/controllers/admin_api.rs +++ b/src/controllers/admin_api.rs @@ -18,7 +18,7 @@ struct FindUserResult { pub async fn find_username(req: web::Form, users: web::Data>) -> impl Responder { let res = users.send(FindUserByUsername(req.0.username)).await.unwrap(); HttpResponse::Ok().json(FindUserResult { - user_id: res.0.map(|r| r.uid) + user_id: res.0.map(|r| r.uid.0) }) } diff --git a/src/controllers/openid_controller.rs b/src/controllers/openid_controller.rs index 1ea6fc2..625884d 100644 --- a/src/controllers/openid_controller.rs +++ b/src/controllers/openid_controller.rs @@ -341,7 +341,7 @@ pub async fn token(req: HttpRequest, // Generate id token let id_token = IdToken { issuer: app_config.website_origin.to_string(), - subject_identifier: session.user, + subject_identifier: session.user.0, audience: session.client.0.to_string(), expiration_time: session.access_token_expire_at, issued_at: time(), @@ -499,7 +499,7 @@ async fn user_info(req: HttpRequest, token: Option, HttpResponse::Ok() .json(OpenIDUserInfo { name: user.full_name(), - sub: user.uid, + sub: user.uid.0, given_name: user.first_name, family_name: user.last_name, preferred_username: user.username, diff --git a/src/data/session_identity.rs b/src/data/session_identity.rs index 1286041..28312ca 100644 --- a/src/data/session_identity.rs +++ b/src/data/session_identity.rs @@ -20,7 +20,7 @@ impl Default for SessionStatus { #[derive(Debug, Serialize, Deserialize, Default)] pub struct SessionIdentityData { - pub id: UserID, + pub id: Option, pub is_admin: bool, pub auth_time: u64, pub status: SessionStatus, @@ -48,7 +48,7 @@ impl<'a> SessionIdentity<'a> { // Check if session is valid if let Some(sess) = &res { - if sess.id.is_empty() { + if sess.id.is_none() { return None; } } @@ -64,7 +64,7 @@ impl<'a> SessionIdentity<'a> { pub fn set_user(&self, user: &User) { self.set_session_data(&SessionIdentityData { - id: user.uid.clone(), + id: Some(user.uid.clone()), is_admin: user.admin, auth_time: time(), status: SessionStatus::SignedIn, @@ -101,6 +101,7 @@ impl<'a> SessionIdentity<'a> { pub fn user_id(&self) -> UserID { self.get_session_data().unwrap_or_default().id + .expect("UserID should never be null here!") } pub fn auth_time(&self) -> u64 { diff --git a/src/data/user.rs b/src/data/user.rs index d3196b5..2ee9ecc 100644 --- a/src/data/user.rs +++ b/src/data/user.rs @@ -4,7 +4,8 @@ use crate::data::login_redirect::LoginRedirect; use crate::data::totp_key::TotpKey; use crate::utils::err::Res; -pub type UserID = String; +#[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct UserID(pub String); #[derive(Clone, Debug, Eq, PartialEq, serde::Serialize, serde::Deserialize)] pub struct FactorID(pub String); @@ -101,7 +102,7 @@ impl Eq for User {} impl Default for User { fn default() -> Self { Self { - uid: uuid::Uuid::new_v4().to_string(), + uid: UserID(uuid::Uuid::new_v4().to_string()), first_name: "".to_string(), last_name: "".to_string(), username: "".to_string(), diff --git a/templates/settings/account_details.html b/templates/settings/account_details.html index b60b3ab..f6bb246 100644 --- a/templates/settings/account_details.html +++ b/templates/settings/account_details.html @@ -5,7 +5,7 @@ User ID - {{ u.uid }} + {{ u.uid.0 }} First name diff --git a/templates/settings/edit_user.html b/templates/settings/edit_user.html index 9f0ee09..094916b 100644 --- a/templates/settings/edit_user.html +++ b/templates/settings/edit_user.html @@ -6,7 +6,7 @@
+ name="uid" value="{{ u.uid.0 }}"/>
@@ -145,7 +145,7 @@ return; const userID = await find_username(usernameEl.value); - usernameEl.classList.add((userID === null || userID === "{{ u.uid }}") ? "is-valid" : "is-invalid"); + usernameEl.classList.add((userID === null || userID === "{{ u.uid.0 }}") ? "is-valid" : "is-invalid"); } catch(e) { console.error(e); diff --git a/templates/settings/users_list.html b/templates/settings/users_list.html index f91aa45..aae775f 100644 --- a/templates/settings/users_list.html +++ b/templates/settings/users_list.html @@ -19,7 +19,7 @@ {% for u in users %} - + {{ u.username }} {{ u.first_name }} {{ u.last_name }} @@ -27,8 +27,8 @@ {% if u.admin %}Admin{% else %}Regular user{% endif %} {% if u.enabled %}Enabled{% else %}Disabled{% endif %} - Edit - Delete + Edit + Delete {% endfor %}