Skip to content

Commit bf29783

Browse files
update group for user_id
1 parent 1e0f70c commit bf29783

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

src/handlers/http/oidc.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,10 +170,13 @@ pub async fn reply_login(
170170
.or_else(|| user_info.email.clone())
171171
.or_else(|| user_info.sub.clone())
172172
.expect("OIDC provider did not return a usable identifier (name, email or sub)");
173-
let user_id = user_info
174-
.sub
175-
.clone()
176-
.expect("OIDC provider did not return a usable identifier (sub)");
173+
let user_id = match user_info.sub.clone() {
174+
Some(id) => id,
175+
None => {
176+
tracing::error!("OIDC provider did not return a sub");
177+
return Err(OIDCError::Unauthorized);
178+
}
179+
};
177180
let user_info: user::UserInfo = user_info.into();
178181
let group: HashSet<String> = claims
179182
.other
@@ -424,6 +427,12 @@ pub async fn update_user_if_changed(
424427
.find(|x| x.username() == old_username)
425428
{
426429
entry.clone_from(&user);
430+
// migrate user references inside user groups
431+
for group in metadata.user_groups.iter_mut() {
432+
if group.users.remove(&old_username) {
433+
group.users.insert(user.username().to_string());
434+
}
435+
}
427436
put_metadata(&metadata).await?;
428437
}
429438
Users.delete_user(&old_username);

0 commit comments

Comments
 (0)