From 271026ebc214dfb0b16c249fe942441a31d7fff5 Mon Sep 17 00:00:00 2001 From: faisalsiddique4400 Date: Wed, 21 May 2025 14:22:30 +0500 Subject: [PATCH 1/2] feat(admin-ui): rename schema and update user-claims visuals - add new locale text for English, French, and Portuguese - update sidebar name to use new locale key - change SVG icon to non-fill to prevent blending with background on selection Signed-off-by: faisalsiddique4400 --- .../SVG/menu/{Schema.js => UserClaims.js} | 8 +- admin-ui/app/locales/en/translation.json | 1 + admin-ui/app/locales/fr/translation.json | 1 + admin-ui/app/locales/pt/translation.json | 21 ++--- .../app/routes/Apps/Gluu/GluuAppSidebar.js | 90 ++++++++++++------- admin-ui/plugins/schema/plugin-metadata.js | 27 +++--- 6 files changed, 86 insertions(+), 62 deletions(-) rename admin-ui/app/components/SVG/menu/{Schema.js => UserClaims.js} (91%) diff --git a/admin-ui/app/components/SVG/menu/Schema.js b/admin-ui/app/components/SVG/menu/UserClaims.js similarity index 91% rename from admin-ui/app/components/SVG/menu/Schema.js rename to admin-ui/app/components/SVG/menu/UserClaims.js index c2129e0873..83028bb510 100644 --- a/admin-ui/app/components/SVG/menu/Schema.js +++ b/admin-ui/app/components/SVG/menu/UserClaims.js @@ -1,9 +1,9 @@ -import React from "react" +import React from 'react' -const Schema = ({ fill, className }) => { +const UserClaims = ({ className }) => { return (
- + @@ -12,4 +12,4 @@ const Schema = ({ fill, className }) => { ) } -export default Schema +export default UserClaims diff --git a/admin-ui/app/locales/en/translation.json b/admin-ui/app/locales/en/translation.json index bcba4589c4..0069a02552 100644 --- a/admin-ui/app/locales/en/translation.json +++ b/admin-ui/app/locales/en/translation.json @@ -641,6 +641,7 @@ "roles": "Roles", "fido": "FIDO", "schema": "Schema", + "user_claims": "User Claims", "scopes": "Scopes", "scripts": "Scripts", "services": "Services", diff --git a/admin-ui/app/locales/fr/translation.json b/admin-ui/app/locales/fr/translation.json index 812a1ddb4b..b3e30e9dd2 100644 --- a/admin-ui/app/locales/fr/translation.json +++ b/admin-ui/app/locales/fr/translation.json @@ -92,6 +92,7 @@ "reports": "Rapports", "roles": "Les rôles", "schema": "Schéma", + "user_claims": "Réclamations des utilisateurs", "scopes": "Portées", "scripts": "Scénarios", "services": "Prestations de service", diff --git a/admin-ui/app/locales/pt/translation.json b/admin-ui/app/locales/pt/translation.json index 5c4b70627c..b2e2176f0d 100644 --- a/admin-ui/app/locales/pt/translation.json +++ b/admin-ui/app/locales/pt/translation.json @@ -32,9 +32,9 @@ "key_cloak": "Keycloak", "jans_lock": "Jans Lock", "jans_link": "Link Jans", - "access_denied":"Acesso negado", - "access_denied_message":"Entre em contato com o administrador para obter ajuda", - "access_contact_admin":"Se você acha que isso é um erro, entre em contato com o administrador", + "access_denied": "Acesso negado", + "access_denied_message": "Entre em contato com o administrador para obter ajuda", + "access_contact_admin": "Se você acha que isso é um erro, entre em contato com o administrador", "mau_users": "Máx. MAU para LTM (Bloqueio)", "mau_clients": "Janeiro bloquear clientes" }, @@ -54,7 +54,7 @@ "default_acr": "ACR padrão", "acrs": "ACRs", "aliases": "Aliases", - "builtIn" : "Integrado", + "builtIn": "Integrado", "api": { "roles": "Papéis de acesso", "permissions": "Permissões", @@ -91,6 +91,7 @@ "reports": "Relatórios", "roles": "Funções", "schema": "Esquema", + "user_claims": "Reivindicações do usuário", "scopes": "Escopos", "scripts": "Roteiros", "services": "Serviços", @@ -181,10 +182,10 @@ "jans_assertion_consumer_service_post_url": "URL POST do Serviço de Consumo de Asserção Jans", "jans_id": "ID Jans", "jans_state": "Estado Jans", - "jans_sess_state":"Estado da sessão Jans", + "jans_sess_state": "Estado da sessão Jans", "jans_user_dn": "DN do usuário Jans", "permission_granted_map": "Mapa de permissões concedidas", - "jans_sess_attr": "Atributos da sessão Jans", + "jans_sess_attr": "Atributos da sessão Jans", "download_summary": "Baixar Resumo", "customAttributes": "atributos personalizados", "sessionTimeoutInMins": "Tempo limite da sessão da interface de administração (em minutos)", @@ -604,7 +605,7 @@ "add_asset": "Add Jans Asset", "asset_document_error": "Document is mandatory.", "add_configuration": "Adicionar configuração", - "credentials":"Credenciais", + "credentials": "Credenciais", "view_configuration": "Ver Configuração", "add_idp": "Adicionar IDP SAML", "view_trust_relationshi_details": "Visualizar Detalhes da Relação de Confiança", @@ -811,7 +812,7 @@ "change_backend_bind_password": "Alterar senha de ligação de back-end", "add_agama_project": "Adicionar projeto Agama", "jans_kc_link": "Link KC Jans", - "export_csv":"Exportar CSV" + "export_csv": "Exportar CSV" }, "links": { "support": "https://support.gluu.org/" @@ -1520,8 +1521,8 @@ "type": "Tipo", "domain": "Domínio" }, - "sessions":{ - "expirationDate" : "Data de expiração", + "sessions": { + "expirationDate": "Data de expiração", "jansId": "ID Jans", "jansState": "Estado Jans", "jansSessState": "Estado da sessão Jans", diff --git a/admin-ui/app/routes/Apps/Gluu/GluuAppSidebar.js b/admin-ui/app/routes/Apps/Gluu/GluuAppSidebar.js index b84dc1cb2c..6f662b5ed5 100644 --- a/admin-ui/app/routes/Apps/Gluu/GluuAppSidebar.js +++ b/admin-ui/app/routes/Apps/Gluu/GluuAppSidebar.js @@ -6,29 +6,31 @@ import { ErrorBoundary } from 'react-error-boundary' import GluuErrorFallBack from './GluuErrorFallBack' import { processMenus } from 'Plugins/PluginMenuResolver' import { useTranslation } from 'react-i18next' -import HomeIcon from "Components/SVG/menu/Home" -import AdministratorIcon from "Components/SVG/menu/Administrator" -import OAuthIcon from "Components/SVG/menu/OAuth" -import SchemaIcon from "Components/SVG/menu/Schema" -import ServicesIcon from "Components/SVG/menu/Services" -import UsersIcon from "Components/SVG/menu/Users" -import StmpIcon from "Components/SVG/menu/Smtp" -import FidoIcon from "Components/SVG/menu/Fido" -import ScimIcon from "Components/SVG/menu/Scim" +import HomeIcon from 'Components/SVG/menu/Home' +import AdministratorIcon from 'Components/SVG/menu/Administrator' +import OAuthIcon from 'Components/SVG/menu/OAuth' +import UserClaimsIcon from 'Components/SVG/menu/UserClaims' +import ServicesIcon from 'Components/SVG/menu/Services' +import UsersIcon from 'Components/SVG/menu/Users' +import StmpIcon from 'Components/SVG/menu/Smtp' +import FidoIcon from 'Components/SVG/menu/Fido' +import ScimIcon from 'Components/SVG/menu/Scim' import SamlIcon from 'Components/SVG/menu/Saml' import JansKcLinkIcon from 'Components/SVG/menu/JansKcLinkIcon' -import {useNavigate } from "react-router-dom"; +import { useNavigate } from 'react-router-dom' import { ThemeContext } from 'Context/theme/themeContext' import Wave from 'Components/SVG/SidebarWave' import getThemeColor from 'Context/theme/config' -import CachedIcon from '@mui/icons-material/Cached'; -import LockIcon from '@mui/icons-material/Lock'; +import CachedIcon from '@mui/icons-material/Cached' +import LockIcon from '@mui/icons-material/Lock' import styles from './styles/GluuAppSidebar.style' import { auditLogoutLogs } from '../../../../plugins/user-management/redux/features/userSlice' function GluuAppSidebar() { - const scopes = useSelector(({ authReducer }) => authReducer.token? authReducer.token.scopes : authReducer.permissions) - const { isUserLogout } = useSelector((state) => state.userReducer); + const scopes = useSelector(({ authReducer }) => + authReducer.token ? authReducer.token.scopes : authReducer.permissions + ) + const { isUserLogout } = useSelector(state => state.userReducer) const [pluginMenus, setPluginMenus] = useState([]) const { t } = useTranslation() const theme = useContext(ThemeContext) @@ -37,7 +39,7 @@ function GluuAppSidebar() { const { classes } = styles() const themeColors = getThemeColor(selectedTheme) const dispatch = useDispatch() - const navigate = useNavigate(); + const navigate = useNavigate() useEffect(() => { setPluginMenus(processMenus()) @@ -45,7 +47,7 @@ function GluuAppSidebar() { useEffect(() => { if (isUserLogout) { - navigate("/logout"); + navigate('/logout') } }, [isUserLogout]) @@ -60,8 +62,8 @@ function GluuAppSidebar() { case 'services': return - case 'schema': - return + case 'user_claims': + return case 'usersmanagement': return @@ -74,17 +76,36 @@ function GluuAppSidebar() { case 'scim': return case 'jans_link': - return + return ( + + ) case 'jans_lock': - return + return ( + + ) case 'jans_kc_link': - return + return ( + + ) case 'saml': - return + return ( + + ) default: return null } - } function getMenuPath(menu) { @@ -98,8 +119,8 @@ function GluuAppSidebar() { } const handleLogout = () => { - dispatch(auditLogoutLogs({ message: "User logged out mannually" })); - }; + dispatch(auditLogoutLogs({ message: 'User logged out mannually' })) + } return ( @@ -163,7 +184,7 @@ function GluuAppSidebar() { to={getMenuPath(sub)} isEmptyNode={!hasPermission(scopes, sub.permission)} icon={getMenuIcon(sub.icon)} - textStyle={{ fontSize: '15px'}} + textStyle={{ fontSize: '15px' }} exact > ))} @@ -175,20 +196,25 @@ function GluuAppSidebar() { {/* -------- Plugins ---------*/} } + icon={ + + } title={t('menus.signout')} - handleClick={() => {handleLogout()}} + handleClick={() => { + handleLogout() + }} textStyle={{ fontSize: '18px' }} />
-
- Powered by Gluu -
+
Powered by Gluu
) } -export default GluuAppSidebar \ No newline at end of file +export default GluuAppSidebar diff --git a/admin-ui/plugins/schema/plugin-metadata.js b/admin-ui/plugins/schema/plugin-metadata.js index 771275b9c7..9c78c9d9eb 100644 --- a/admin-ui/plugins/schema/plugin-metadata.js +++ b/admin-ui/plugins/schema/plugin-metadata.js @@ -9,41 +9,36 @@ import { ATTRIBUTE_READ, ATTRIBUTE_WRITE } from 'Utils//PermChecker' const pluginMetadata = { menus: [ { - title: 'menus.schema', - icon: 'schema', - children: [ - { - title: 'menus.person', - path: '/attributes', - permission: ATTRIBUTE_READ, - }, - ], - }, + title: 'menus.user_claims', + icon: 'user_claims', + path: '/attributes', + permission: ATTRIBUTE_READ + } ], routes: [ { component: AttributeEditPage, path: '/attribute/edit/:gid', - permission: ATTRIBUTE_WRITE, + permission: ATTRIBUTE_WRITE }, { component: AttributeViewPage, path: '/attribute/view/:gid', - permission: ATTRIBUTE_READ, + permission: ATTRIBUTE_READ }, { component: AttributeAddPage, path: '/attribute/new', - permission: ATTRIBUTE_WRITE, + permission: ATTRIBUTE_WRITE }, { component: AttributeListPage, path: '/attributes', - permission: ATTRIBUTE_READ, - }, + permission: ATTRIBUTE_READ + } ], reducers: [{ name: 'attributeReducer', reducer: attributeReducer }], - sagas: [attributeSaga()], + sagas: [attributeSaga()] } export default pluginMetadata From 332b80146b102ea1e0e91106e9734e92c5ab8e7d Mon Sep 17 00:00:00 2001 From: faisalsiddique4400 Date: Wed, 21 May 2025 16:21:13 +0500 Subject: [PATCH 2/2] refactor(admin-ui): remove protection mode field from SCIM form --- .../scim/components/ScimConfiguration.js | 119 ++++++++---------- 1 file changed, 50 insertions(+), 69 deletions(-) diff --git a/admin-ui/plugins/scim/components/ScimConfiguration.js b/admin-ui/plugins/scim/components/ScimConfiguration.js index 4d52186bf0..50025f0d8c 100644 --- a/admin-ui/plugins/scim/components/ScimConfiguration.js +++ b/admin-ui/plugins/scim/components/ScimConfiguration.js @@ -11,7 +11,7 @@ import PropTypes from 'prop-types' import { adminUiFeatures } from 'Plugins/admin/helper/utils' const ScimConfiguration = ({ handleSubmit }) => { - const scimConfigs = useSelector((state) => state.scimReducer.scim) + const scimConfigs = useSelector(state => state.scimReducer.scim) const [modal, setModal] = useState(false) const toggle = () => { setModal(!modal) @@ -21,10 +21,10 @@ const ScimConfiguration = ({ handleSubmit }) => { initialValues: scimConfigs, onSubmit: () => { toggle() - }, + } }) - const submitForm = (userMessage) => { + const submitForm = userMessage => { const differences = [] delete formik.values?.action_message @@ -34,14 +34,14 @@ const ScimConfiguration = ({ handleSubmit }) => { differences.push({ op: 'replace', path: `/${key}`, - value: formik.values[key], + value: formik.values[key] }) } } else if (formik.values[key]) { differences.push({ op: 'add', path: `/${key}`, - value: formik.values[key], + value: formik.values[key] }) } } @@ -53,17 +53,17 @@ const ScimConfiguration = ({ handleSubmit }) => { return (
{ + onSubmit={e => { e.preventDefault() formik.handleSubmit() }} - className='mt-4' + className="mt-4" > { { { { { errorMessage={formik.errors.oxAuthIssuer} /> - - - { { { { { { { { { { + label="fields.metric_reporter_enabled" + name="metricReporterEnabled" + handler={e => { formik.setFieldValue('metricReporterEnabled', e.target.checked) }} lsize={3} @@ -295,9 +276,9 @@ const ScimConfiguration = ({ handleSubmit }) => { { + label="fields.disable_jdk_logger" + name="disableJdkLogger" + handler={e => { formik.setFieldValue('disableJdkLogger', e.target.checked) }} lsize={3} @@ -307,9 +288,9 @@ const ScimConfiguration = ({ handleSubmit }) => { { + label="fields.use_local_cache" + name="useLocalCache" + handler={e => { formik.setFieldValue('useLocalCache', e.target.checked) }} lsize={3} @@ -324,7 +305,7 @@ const ScimConfiguration = ({ handleSubmit }) => {