From 6575e102f4d3d61232743779d605d074d4c4d6ba Mon Sep 17 00:00:00 2001 From: grimsi <9295182+grimsi@users.noreply.github.com> Date: Tue, 17 Sep 2024 16:45:48 +0200 Subject: [PATCH] Bugfix and UX improvement --- .../components/administration/SsoManagement.tsx | 3 ++- .../components/administration/UserManagement.tsx | 13 ++++++++++++- .../kotlin/de/grimsi/gameyfin/users/UserService.kt | 10 ++++++++++ .../de/grimsi/gameyfin/users/dto/UserInfoDto.kt | 2 +- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/main/frontend/components/administration/SsoManagement.tsx b/src/main/frontend/components/administration/SsoManagement.tsx index 38c63e4..92a5316 100644 --- a/src/main/frontend/components/administration/SsoManagement.tsx +++ b/src/main/frontend/components/administration/SsoManagement.tsx @@ -42,7 +42,8 @@ function SsoMangementLayout({getConfig, formik}: any) { + isDisabled={!formik.values.sso.oidc.enabled || + !formik.values.sso.oidc["auto-register-new-users"]}/>
diff --git a/src/main/frontend/components/administration/UserManagement.tsx b/src/main/frontend/components/administration/UserManagement.tsx index ac7f3e6..6230c3d 100644 --- a/src/main/frontend/components/administration/UserManagement.tsx +++ b/src/main/frontend/components/administration/UserManagement.tsx @@ -2,17 +2,24 @@ import React, {useEffect, useState} from "react"; import ConfigFormField from "Frontend/components/administration/ConfigFormField"; import withConfigPage from "Frontend/components/administration/withConfigPage"; import Section from "Frontend/components/general/Section"; -import {UserEndpoint} from "Frontend/generated/endpoints"; +import {ConfigController, UserEndpoint} from "Frontend/generated/endpoints"; import UserInfoDto from "Frontend/generated/de/grimsi/gameyfin/users/dto/UserInfoDto"; import {UserManagementCard} from "Frontend/components/general/UserManagementCard"; +import {SmallInfoField} from "Frontend/components/general/SmallInfoField"; +import {Info} from "@phosphor-icons/react"; function UserManagementLayout({getConfig, formik}: any) { const [users, setUsers] = useState([]); + const [autoRegisterNewUsers, setAutoRegisterNewUsers] = useState(true); useEffect(() => { UserEndpoint.getAllUsers().then( (response) => setUsers(response as UserInfoDto[]) ); + + ConfigController.getConfig("sso.oidc.auto-register-new-users").then( + (response) => setAutoRegisterNewUsers(response === "true") + ); }, []); return ( @@ -26,6 +33,10 @@ function UserManagementLayout({getConfig, formik}: any) {
+ {!autoRegisterNewUsers && + + }
{users.map((user) => )}
diff --git a/src/main/kotlin/de/grimsi/gameyfin/users/UserService.kt b/src/main/kotlin/de/grimsi/gameyfin/users/UserService.kt index fc4a4b5..9064ed9 100644 --- a/src/main/kotlin/de/grimsi/gameyfin/users/UserService.kt +++ b/src/main/kotlin/de/grimsi/gameyfin/users/UserService.kt @@ -16,6 +16,7 @@ import org.springframework.security.core.userdetails.UserDetails import org.springframework.security.core.userdetails.UserDetailsService import org.springframework.security.core.userdetails.UsernameNotFoundException import org.springframework.security.crypto.password.PasswordEncoder +import org.springframework.security.oauth2.core.oidc.user.OidcUser import org.springframework.stereotype.Service import org.springframework.web.multipart.MultipartFile import java.io.InputStream @@ -62,6 +63,15 @@ class UserService( } fun getUserInfo(auth: Authentication): UserInfoDto { + val principal = auth.principal + + if (principal is OidcUser) { + val oidcUser = User(principal) + val userInfoDto = toUserInfo(oidcUser) + userInfoDto.roles = roleService.extractGrantedAuthorities(principal.authorities).map { it.authority } + return userInfoDto + } + val user = userByUsername(auth.name) return toUserInfo(user) } diff --git a/src/main/kotlin/de/grimsi/gameyfin/users/dto/UserInfoDto.kt b/src/main/kotlin/de/grimsi/gameyfin/users/dto/UserInfoDto.kt index 982373f..2dd167e 100644 --- a/src/main/kotlin/de/grimsi/gameyfin/users/dto/UserInfoDto.kt +++ b/src/main/kotlin/de/grimsi/gameyfin/users/dto/UserInfoDto.kt @@ -4,5 +4,5 @@ data class UserInfoDto( val username: String, val managedBySso: Boolean, val email: String, - val roles: List + var roles: List ) \ No newline at end of file