Bugfix and UX improvement

This commit is contained in:
grimsi
2024-09-17 16:45:48 +02:00
parent 4b48bc785f
commit 6575e102f4
4 changed files with 25 additions and 3 deletions
@@ -42,7 +42,8 @@ function SsoMangementLayout({getConfig, formik}: any) {
<ConfigFormField configElement={getConfig("sso.oidc.auto-register-new-users")}
isDisabled={!formik.values.sso.oidc.enabled}/>
<ConfigFormField configElement={getConfig("sso.oidc.match-existing-users-by")}
isDisabled={!formik.values.sso.oidc.enabled}/>
isDisabled={!formik.values.sso.oidc.enabled ||
!formik.values.sso.oidc["auto-register-new-users"]}/>
</div>
<Section title="SSO provider configuration"/>
@@ -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<UserInfoDto[]>([]);
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) {
</div>
<Section title="Users"/>
{!autoRegisterNewUsers &&
<SmallInfoField className="mb-4 text-warning" icon={Info}
message="Automatic user registration for SSO users is disabled"/>
}
<div className="grid grid-cols-300px gap-4">
{users.map((user) => <UserManagementCard user={user} key={user.username}/>)}
</div>
@@ -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)
}
@@ -4,5 +4,5 @@ data class UserInfoDto(
val username: String,
val managedBySso: Boolean,
val email: String,
val roles: List<String>
var roles: List<String>
)