mirror of
https://github.com/BrenBroZAYT/gameyfin.git
synced 2026-06-17 16:20:03 +00:00
Bugfix and UX improvement
This commit is contained in:
@@ -42,7 +42,8 @@ function SsoMangementLayout({getConfig, formik}: any) {
|
|||||||
<ConfigFormField configElement={getConfig("sso.oidc.auto-register-new-users")}
|
<ConfigFormField configElement={getConfig("sso.oidc.auto-register-new-users")}
|
||||||
isDisabled={!formik.values.sso.oidc.enabled}/>
|
isDisabled={!formik.values.sso.oidc.enabled}/>
|
||||||
<ConfigFormField configElement={getConfig("sso.oidc.match-existing-users-by")}
|
<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>
|
</div>
|
||||||
|
|
||||||
<Section title="SSO provider configuration"/>
|
<Section title="SSO provider configuration"/>
|
||||||
|
|||||||
@@ -2,17 +2,24 @@ import React, {useEffect, useState} from "react";
|
|||||||
import ConfigFormField from "Frontend/components/administration/ConfigFormField";
|
import ConfigFormField from "Frontend/components/administration/ConfigFormField";
|
||||||
import withConfigPage from "Frontend/components/administration/withConfigPage";
|
import withConfigPage from "Frontend/components/administration/withConfigPage";
|
||||||
import Section from "Frontend/components/general/Section";
|
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 UserInfoDto from "Frontend/generated/de/grimsi/gameyfin/users/dto/UserInfoDto";
|
||||||
import {UserManagementCard} from "Frontend/components/general/UserManagementCard";
|
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) {
|
function UserManagementLayout({getConfig, formik}: any) {
|
||||||
const [users, setUsers] = useState<UserInfoDto[]>([]);
|
const [users, setUsers] = useState<UserInfoDto[]>([]);
|
||||||
|
const [autoRegisterNewUsers, setAutoRegisterNewUsers] = useState(true);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
UserEndpoint.getAllUsers().then(
|
UserEndpoint.getAllUsers().then(
|
||||||
(response) => setUsers(response as UserInfoDto[])
|
(response) => setUsers(response as UserInfoDto[])
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ConfigController.getConfig("sso.oidc.auto-register-new-users").then(
|
||||||
|
(response) => setAutoRegisterNewUsers(response === "true")
|
||||||
|
);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -26,6 +33,10 @@ function UserManagementLayout({getConfig, formik}: any) {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Section title="Users"/>
|
<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">
|
<div className="grid grid-cols-300px gap-4">
|
||||||
{users.map((user) => <UserManagementCard user={user} key={user.username}/>)}
|
{users.map((user) => <UserManagementCard user={user} key={user.username}/>)}
|
||||||
</div>
|
</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.UserDetailsService
|
||||||
import org.springframework.security.core.userdetails.UsernameNotFoundException
|
import org.springframework.security.core.userdetails.UsernameNotFoundException
|
||||||
import org.springframework.security.crypto.password.PasswordEncoder
|
import org.springframework.security.crypto.password.PasswordEncoder
|
||||||
|
import org.springframework.security.oauth2.core.oidc.user.OidcUser
|
||||||
import org.springframework.stereotype.Service
|
import org.springframework.stereotype.Service
|
||||||
import org.springframework.web.multipart.MultipartFile
|
import org.springframework.web.multipart.MultipartFile
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
@@ -62,6 +63,15 @@ class UserService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun getUserInfo(auth: Authentication): UserInfoDto {
|
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)
|
val user = userByUsername(auth.name)
|
||||||
return toUserInfo(user)
|
return toUserInfo(user)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,5 +4,5 @@ data class UserInfoDto(
|
|||||||
val username: String,
|
val username: String,
|
||||||
val managedBySso: Boolean,
|
val managedBySso: Boolean,
|
||||||
val email: String,
|
val email: String,
|
||||||
val roles: List<String>
|
var roles: List<String>
|
||||||
)
|
)
|
||||||
Reference in New Issue
Block a user