Skip to content

Commit 05c51de

Browse files
authored
fix(admin-ui): Use typescript generated client for Services plugin (#2564)
* fix(admin-ui): Use typescript generated client for Services plugin #2563 * fix(admin-ui): Use typescript generated client for Services plugin #2563 * fix(admin-ui): Use typescript generated client for Services plugin #2563 * fix(admin-ui): Apply code review #2563 * fix(admin-ui): Apply code review #2563 * fix(admin-ui): Apply code review #2563 * fix(admin-ui): Apply code review #2563 * fix(admin-ui): Apply code review #2563 * fix(admin-ui): Apply code review #2563
1 parent 38fba6b commit 05c51de

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+2378
-3008
lines changed

admin-ui/app/locales/en/translation.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -837,6 +837,9 @@
837837
"view_script_details": "View custom script details",
838838
"add_new_user": "Add User",
839839
"error_in_saving": "Error in saving.",
840+
"partial_update_failure": "Some configurations failed to update. Please review and try again.",
841+
"min_characters": "Minimum {{count}} characters",
842+
"field_required": "This field is required",
840843
"default_policy_store_is_used": "Admin UI is already using default policy-store for access control.",
841844
"insufficient_token_read_permission": "Access to token data is not granted.",
842845
"try_again_later": "Please try again later",
@@ -887,6 +890,8 @@
887890
"user_updated_successfully": "User updated successfully",
888891
"user_deleted_successfully": "User deleted successfully",
889892
"password_changed_successfully": "Password changed successfully",
893+
"persistence_config_load_failed": "Failed to load persistence configuration",
894+
"persistence_config_load_failed_detail": "Could not load persistence configuration. LDAP-specific settings may not be applied correctly.",
890895
"revokeUserSession": "The user's session will be revoked as one or more of the following fields have been modified: Password, Status, Admin Role.",
891896
"device_deleted_successfully": "Device deleted successfully",
892897
"service_status_up": "Service is running normally.",

admin-ui/app/locales/es/translation.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -839,6 +839,9 @@
839839
"view_script_details": "Ver detalles del script personalizado",
840840
"add_new_user": "Agregar Usuario",
841841
"error_in_saving": "Error al guardar.",
842+
"partial_update_failure": "Algunas configuraciones no se pudieron actualizar. Por favor, revise e intente de nuevo.",
843+
"min_characters": "Mínimo {{count}} caracteres",
844+
"field_required": "Este campo es obligatorio",
842845
"try_again_later": "Por favor intente de nuevo más tarde",
843846
"loading_attributes": "Cargando atributos",
844847
"error_processiong_request": "Error al procesar la solicitud.",

admin-ui/app/locales/fr/translation.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,9 @@
686686
"add_asset": "Add Jans Asset",
687687
"asset_document_error": "Document is mandatory.",
688688
"add_configuration": "Ajouter une configuration",
689+
"partial_update_failure": "Certaines configurations n'ont pas pu être mises à jour. Veuillez vérifier et réessayer.",
690+
"min_characters": "Minimum {{count}} caractères",
691+
"field_required": "Ce champ est obligatoire",
689692
"credentials": "Credentials",
690693
"view_configuration": "Afficher la configuration",
691694
"new_role": "Nouveau rôle",

admin-ui/app/locales/pt/translation.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,9 @@
681681
"add_asset": "Add Jans Asset",
682682
"asset_document_error": "Document is mandatory.",
683683
"add_configuration": "Adicionar configuração",
684+
"partial_update_failure": "Algumas configurações não puderam ser atualizadas. Por favor, revise e tente novamente.",
685+
"min_characters": "Mínimo {{count}} caracteres",
686+
"field_required": "Este campo é obrigatório",
684687
"credentials": "Credenciais",
685688
"view_configuration": "Ver Configuração",
686689
"add_idp": "Adicionar IDP SAML",

admin-ui/plugins/auth-server/components/AuthN/AuthNListPage.tsx

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import React, {
88
} from 'react'
99
import MaterialTable, { type Action, type Column } from '@material-table/core'
1010
import { Paper } from '@mui/material'
11-
import { useSelector, useDispatch } from 'react-redux'
1211
import { useSetAtom } from 'jotai'
1312
import { useAppNavigation, ROUTES } from '@/helpers/navigation'
1413
import { useCedarling } from '@/cedarling'
@@ -22,12 +21,11 @@ import SetTitle from 'Utils/SetTitle'
2221
import { ThemeContext } from 'Context/theme/themeContext'
2322
import getThemeColor from 'Context/theme/config'
2423
import AuthNDetailPage from './AuthNDetailPage'
25-
import { getLdapConfig } from 'Plugins/services/redux/features/ldapSlice'
2624
import { useCustomScriptsByType } from 'Plugins/admin/components/CustomScripts/hooks'
2725
import { DEFAULT_SCRIPT_TYPE } from 'Plugins/admin/components/CustomScripts/constants'
2826
import { currentAuthNItemAtom, type AuthNItem } from './atoms'
2927
import { BUILT_IN_ACRS } from './constants'
30-
import { useGetAcrs } from 'JansConfigApi'
28+
import { useGetAcrs, useGetConfigDatabaseLdap, type GluuLdapConfiguration } from 'JansConfigApi'
3129

3230
const PAGE_SIZE = 10
3331

@@ -40,17 +38,9 @@ interface ListState {
4038
scripts: AuthNItem[]
4139
}
4240

43-
interface RootState {
44-
ldapReducer: {
45-
ldap: AuthNItem[]
46-
loading: boolean
47-
}
48-
}
49-
5041
function AuthNListPage({ isBuiltIn = false }: AuthNListPageProps): ReactElement {
5142
const { hasCedarReadPermission, hasCedarWritePermission, authorizeHelper } = useCedarling()
5243
const { t } = useTranslation()
53-
const dispatch = useDispatch()
5444
const setCurrentItem = useSetAtom(currentAuthNItemAtom)
5545
const [myActions, setMyActions] = useState<
5646
Array<Action<AuthNItem> | ((rowData: AuthNItem) => Action<AuthNItem>)>
@@ -66,8 +56,9 @@ function AuthNListPage({ isBuiltIn = false }: AuthNListPageProps): ReactElement
6656
scripts: [],
6757
})
6858

69-
const ldap = useSelector((state: RootState) => state.ldapReducer.ldap)
70-
const loading = useSelector((state: RootState) => state.ldapReducer.loading)
59+
const { data: ldapConfigurations = [], isLoading: ldapLoading } = useGetConfigDatabaseLdap({
60+
query: { staleTime: 30000 },
61+
})
7162

7263
// Fetch ACR config using Orval hook
7364
const { data: acrs, isLoading: acrsLoading } = useGetAcrs({
@@ -105,8 +96,7 @@ function AuthNListPage({ isBuiltIn = false }: AuthNListPageProps): ReactElement
10596

10697
useEffect(() => {
10798
authorizeHelper(authNScopes)
108-
dispatch(getLdapConfig())
109-
}, [authorizeHelper, authNScopes, dispatch])
99+
}, [authorizeHelper, authNScopes])
110100

111101
// Actions as state that will rebuild when permissions change
112102
useEffect(() => {
@@ -131,21 +121,36 @@ function AuthNListPage({ isBuiltIn = false }: AuthNListPageProps): ReactElement
131121
setMyActions(newActions)
132122
}, [canWriteAuthN, t, handleGoToAuthNEditPage])
133123

124+
const mapLdapToAuthNItem = useCallback(
125+
(config: GluuLdapConfiguration): AuthNItem => ({
126+
configId: config.configId,
127+
bindDN: config.bindDN,
128+
bindPassword: config.bindPassword,
129+
servers: config.servers,
130+
maxConnections: config.maxConnections,
131+
useSSL: config.useSSL,
132+
baseDNs: config.baseDNs,
133+
primaryKey: config.primaryKey,
134+
localPrimaryKey: config.localPrimaryKey,
135+
enabled: config.enabled,
136+
level: config.level,
137+
name: 'default_ldap_password',
138+
acrName: config.configId,
139+
}),
140+
[],
141+
)
142+
134143
useEffect(() => {
135144
setList((prevList) => ({ ...prevList, ldap: [] }))
136145

137-
if (ldap.length > 0 && !loading) {
138-
const enabledLdap = ldap.filter((item) => item.enabled === true)
146+
if (ldapConfigurations.length > 0 && !ldapLoading) {
147+
const enabledLdap = ldapConfigurations.filter((item) => item.enabled === true)
139148
if (enabledLdap.length > 0) {
140-
const updateLDAPItems = enabledLdap.map((item) => ({
141-
...item,
142-
name: 'default_ldap_password',
143-
acrName: item.configId,
144-
}))
149+
const updateLDAPItems = enabledLdap.map(mapLdapToAuthNItem)
145150
setList((prevList) => ({ ...prevList, ldap: updateLDAPItems }))
146151
}
147152
}
148-
}, [ldap, loading])
153+
}, [ldapConfigurations, ldapLoading, mapLdapToAuthNItem])
149154

150155
useEffect(() => {
151156
setList((prevList) => ({ ...prevList, scripts: [] }))

admin-ui/plugins/services/Components/Configuration/CacheInMemory.js renamed to admin-ui/plugins/services/Components/Configuration/CacheInMemory.tsx

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import React from 'react'
1+
import React, { ReactElement } from 'react'
22
import { FormGroup, Card, Col, CardBody } from 'Components'
33
import GluuInputRow from 'Routes/Apps/Gluu/GluuInputRow'
44
import { CACHE } from 'Utils/ApiResources'
55
import { useTranslation } from 'react-i18next'
6-
import PropTypes from 'prop-types'
6+
import type { CacheInMemoryProps } from './types'
77

8-
function CacheInMemory({ formik }) {
8+
function CacheInMemory({ formik }: CacheInMemoryProps): ReactElement {
99
const { t } = useTranslation()
1010
return (
1111
<Card>
@@ -31,6 +31,3 @@ function CacheInMemory({ formik }) {
3131
}
3232

3333
export default CacheInMemory
34-
CacheInMemory.propTypes = {
35-
formik: PropTypes.object,
36-
}

admin-ui/plugins/services/Components/Configuration/CacheMemcached.js renamed to admin-ui/plugins/services/Components/Configuration/CacheMemcached.tsx

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
import React, { useContext } from 'react'
1+
import React, { useContext, ReactElement } from 'react'
22
import { Badge, FormGroup, Card, Col, CardBody, CustomInput } from 'Components'
33
import GluuLabel from 'Routes/Apps/Gluu/GluuLabel'
44
import { CACHE } from 'Utils/ApiResources'
55
import GluuTooltip from 'Routes/Apps/Gluu/GluuTooltip'
66
import GluuInputRow from 'Routes/Apps/Gluu/GluuInputRow'
77
import { useTranslation } from 'react-i18next'
88
import { ThemeContext } from 'Context/theme/themeContext'
9-
import PropTypes from 'prop-types'
9+
import type { CacheMemcachedProps } from './types'
1010

11-
function CacheMemcached({ config, formik }) {
11+
function CacheMemcached({ config, formik }: CacheMemcachedProps): ReactElement {
1212
const { t } = useTranslation()
1313
const theme = useContext(ThemeContext)
14-
const selectedTheme = theme.state.theme
14+
const selectedTheme = theme?.state?.theme || 'darkBlue'
1515

1616
return (
1717
<Card>
@@ -77,7 +77,3 @@ function CacheMemcached({ config, formik }) {
7777
}
7878

7979
export default CacheMemcached
80-
CacheMemcached.propTypes = {
81-
formik: PropTypes.object,
82-
config: PropTypes.any,
83-
}

admin-ui/plugins/services/Components/Configuration/CacheNative.js renamed to admin-ui/plugins/services/Components/Configuration/CacheNative.tsx

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import React from 'react'
1+
import React, { ReactElement } from 'react'
22
import { FormGroup, Card, Col, CardBody } from 'Components'
33
import GluuInputRow from 'Routes/Apps/Gluu/GluuInputRow'
44
import GluuToogleRow from 'Routes/Apps/Gluu/GluuToogleRow'
55
import { CACHE } from 'Utils/ApiResources'
66
import { useTranslation } from 'react-i18next'
7-
import PropTypes from 'prop-types'
7+
import type { CacheNativeProps } from './types'
88

9-
function CacheNative({ formik }) {
9+
function CacheNative({ formik }: CacheNativeProps): ReactElement {
1010
const { t } = useTranslation()
1111
return (
1212
<Card>
@@ -51,6 +51,3 @@ function CacheNative({ formik }) {
5151
}
5252

5353
export default CacheNative
54-
CacheNative.propTypes = {
55-
formik: PropTypes.object,
56-
}

0 commit comments

Comments
 (0)