Skip to content

Commit 008fc9c

Browse files
committed
feat(admin-ui): config api tag column #1444 #1447
Signed-off-by: Jeet Viramgama <[email protected]>
1 parent 4c33de0 commit 008fc9c

File tree

6 files changed

+124
-50
lines changed

6 files changed

+124
-50
lines changed

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

+4-1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
},
7676
"fields": {
7777
"access_token_signing_alg": "JWS alg for signing",
78+
"default_permission_in_token": "Default permission in token",
7879
"tag": "Tag",
7980
"activate": "Activate",
8081
"use_search_limit": "Load Source Data withLimited Search",
@@ -748,7 +749,9 @@
748749
},
749750
"permissions": {
750751
"name": "Permission Name",
751-
"description": "Permission Description"
752+
"description": "Permission Description",
753+
"tag": "Tag-name to identify permission to be included in the API access token.",
754+
"default_permission_in_token": "If set to true the permission will be available by default in the authorization token to access API (before authentication)."
752755
},
753756
"json_properties": {
754757
"parEndpoint": "URL for Pushed Authorisation Request (PAR) Endpoint",

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

+4-1
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@
120120
"fields": {
121121
"tag": "Étiqueter",
122122
"issuer": "Émetteur",
123+
"default_permission_in_token": "Permission par défaut dans le jeton",
123124
"base_endpoint": "Point d'Accès de Base",
124125
"use_search_limit": "Charger les données sources avec une recherche limitée",
125126
"clean_service_interval": "Intervalle de Nettoyage du Service",
@@ -1099,7 +1100,9 @@
10991100
},
11001101
"permissions": {
11011102
"name": "Nom de la permission",
1102-
"description": "Description de la permission"
1103+
"description": "Description de la permission",
1104+
"tag": "Nom-de-la-balise pour identifier l'autorisation à inclure dans le jeton d'accès à l'API.",
1105+
"default_permission_in_token": "Si défini sur vrai, l'autorisation sera disponible par défaut dans le jeton d'autorisation pour accéder à l'API (avant l'authentification)."
11031106
}
11041107
},
11051108
"script": {

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

+4-1
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@
118118
},
119119
"fields": {
120120
"tag": "Marcação",
121+
"default_permission_in_token": "Permissão padrão no token",
121122
"issuer": "Emissor",
122123
"base_endpoint": "Endpoint Base",
123124
"clean_service_interval": "Intervalo de Limpeza do Serviço",
@@ -719,7 +720,9 @@
719720
},
720721
"permissions": {
721722
"name": "Nome da permissão",
722-
"description": "Descrição da permissão"
723+
"description": "Descrição da permissão",
724+
"tag": "Nome-da-etiqueta para identificar a permissão a ser incluída no token de acesso à API.",
725+
"default_permission_in_token": "Se definido como verdadeiro, a permissão estará disponível por padrão no token de autorização para acessar a API (antes da autenticação)."
723726
},
724727
"sql": {
725728
"config_name": "Digite o nome da configuração SQL.",

admin-ui/plugins/admin/components/Permissions/PermissionAddDialogForm.js

+77-45
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState, useContext, useEffect } from 'react'
1+
import React, { useState, useContext } from 'react'
22
import {
33
FormGroup,
44
Col,
@@ -12,95 +12,127 @@ import {
1212
import { useTranslation } from 'react-i18next'
1313
import applicationStyle from 'Routes/Apps/Gluu/styles/applicationstyle'
1414
import { ThemeContext } from 'Context/theme/themeContext'
15+
import GluuLabel from 'Routes/Apps/Gluu/GluuLabel'
16+
import { InputGroup, CustomInput } from 'Components'
1517

1618
const PermissionAddDialogForm = ({ handler, modal, onAccept }) => {
17-
const [active, setActive] = useState(false)
18-
const [permission, setPermission] = useState('')
19+
const [permission, setPermission] = useState('')
1920
const [description, setDescription] = useState('')
21+
const [defaultPermissionInToken, setDefaultPermissionInToken] = useState()
2022
const [tag, setTag] = useState('')
2123
const { t } = useTranslation()
2224
const theme = useContext(ThemeContext)
25+
const [errorMessages, setErrorMessages] = useState('')
2326
const selectedTheme = theme.state.theme
2427

25-
useEffect(() => {
26-
if (typeof window !== "undefined") {
27-
if (permission?.length >= 5 && tag.length > 0) {
28-
setActive(true)
29-
} else {
30-
setActive(false)
31-
}
28+
function handleAccept() {
29+
if (permission?.length <= 5) {
30+
setErrorMessages('Permission name length should be atleast 5.')
31+
return
32+
}
33+
34+
const roleData = {
35+
permission,
36+
tag,
37+
description,
38+
...(defaultPermissionInToken !== undefined &&
39+
defaultPermissionInToken !== '' && {
40+
defaultPermissionInToken:
41+
defaultPermissionInToken === 'true' ? true : false,
42+
}),
3243
}
33-
}, [tag, permission])
3444

35-
function handleAccept() {
36-
const roleData = {}
37-
roleData['permission'] = permission
38-
roleData['tag'] = tag
39-
roleData['description'] = description
4045
onAccept(roleData)
46+
setErrorMessages('')
4147
}
48+
4249
return (
4350
<>
44-
<Modal isOpen={modal} toggle={handler} className="modal-outline-primary">
51+
<Modal
52+
style={{ minWidth: '50vw' }}
53+
isOpen={modal}
54+
toggle={handler}
55+
className='modal-outline-primary'
56+
>
4557
<ModalHeader toggle={handler}>
4658
<i
4759
style={{ color: 'green' }}
48-
className="fa fa-2x fa-info fa-fw modal-icon mb-3"
60+
className='fa fa-2x fa-info fa-fw modal-icon mb-3'
4961
></i>
5062
New Permission
5163
</ModalHeader>
5264
<ModalBody>Adding new api permission</ModalBody>
5365
<ModalBody>
5466
<FormGroup row>
55-
<Col sm={12}>
67+
<GluuLabel required label='fields.name' size={4} />
68+
<Col sm={8}>
5669
<Input
57-
id="api_permission"
58-
type="text"
59-
name="api_permission"
60-
defaultValue=""
61-
placeholder={`${t('fields.name')}*`}
70+
id='api_permission'
71+
type='text'
72+
name='api_permission'
6273
onChange={(event) => setPermission(event.target.value)}
6374
value={permission}
6475
/>
6576
</Col>
6677
</FormGroup>
6778
<FormGroup row>
68-
<Col sm={12}>
79+
<GluuLabel label='fields.tag' size={4} />
80+
<Col sm={8}>
6981
<Input
70-
id="tag"
71-
type="text"
72-
name="tag"
73-
defaultValue=""
74-
placeholder={`${t('fields.tag')}*`}
82+
id='tag'
83+
type='text'
84+
name='tag'
7585
onChange={(event) => setTag(event.target.value)}
7686
value={tag}
7787
/>
7888
</Col>
7989
</FormGroup>
8090
<FormGroup row>
81-
<Col sm={12}>
91+
<GluuLabel label='fields.description' size={4} />
92+
<Col sm={8}>
8293
<Input
83-
id="permission_description"
84-
type="textarea"
85-
name="permission_description"
86-
defaultValue=""
87-
placeholder={`${t('fields.description')}`}
94+
id='permission_description'
95+
type='textarea'
96+
name='permission_description'
8897
onChange={(event) => setDescription(event.target.value)}
8998
value={description}
9099
/>
91100
</Col>
92101
</FormGroup>
102+
<FormGroup row>
103+
<GluuLabel label='fields.default_permission_in_token' size={4} />
104+
<Col sm={8}>
105+
<InputGroup>
106+
<CustomInput
107+
type='select'
108+
id='defaultPermissionInToken'
109+
name='defaultPermissionInToken'
110+
value={defaultPermissionInToken}
111+
onChange={(event) =>
112+
setDefaultPermissionInToken(event.target.value)
113+
}
114+
disabled={false}
115+
>
116+
<option value=''>{t('actions.choose')}...</option>
117+
<option value='true'>true</option>
118+
<option value='false'>false</option>
119+
</CustomInput>
120+
</InputGroup>
121+
</Col>
122+
</FormGroup>
123+
124+
{errorMessages ? (
125+
<span style={{ color: '#e74c3c' }}>{errorMessages}</span>
126+
) : null}
93127
</ModalBody>
94128
<ModalFooter>
95-
{active && (
96-
<Button
97-
color={`primary-${selectedTheme}`}
98-
style={applicationStyle.buttonStyle}
99-
onClick={handleAccept}
100-
>
101-
{t('actions.yes')}
102-
</Button>
103-
)}{' '}
129+
<Button
130+
color={`primary-${selectedTheme}`}
131+
style={applicationStyle.buttonStyle}
132+
onClick={handleAccept}
133+
>
134+
{t('actions.yes')}
135+
</Button>
104136
<Button
105137
color={`primary-${selectedTheme}`}
106138
style={applicationStyle.buttonStyle}

admin-ui/plugins/admin/components/Permissions/UiPermDetailPage.js

+30-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ function UiPermDetailPage({ row }) {
1111
<Row>
1212
<Col sm={6}>
1313
<GluuFormDetailRow
14-
label="fields.name"
14+
label='fields.name'
1515
value={rowData.permission}
1616
isBadge={true}
1717
lsize={3}
@@ -20,10 +20,38 @@ function UiPermDetailPage({ row }) {
2020
doc_entry='name'
2121
/>
2222
</Col>
23+
{rowData.tag && (
24+
<Col sm={6}>
25+
<GluuFormDetailRow
26+
label='fields.tag'
27+
value={rowData.tag}
28+
lsize={3}
29+
rsize={9}
30+
doc_category={PERMISSIONS}
31+
doc_entry='tag'
32+
/>
33+
</Col>
34+
)}
35+
{rowData.defaultPermissionInToken !== undefined ? (
36+
<Col sm={6}>
37+
<GluuFormDetailRow
38+
label='fields.default_permission_in_token'
39+
value={
40+
rowData.defaultPermissionInToken !== undefined
41+
? JSON.stringify(rowData.defaultPermissionInToken)
42+
: null
43+
}
44+
lsize={8}
45+
rsize={4}
46+
doc_category={PERMISSIONS}
47+
doc_entry='default_permission_in_token'
48+
/>
49+
</Col>
50+
) : null}
2351
{rowData.description && (
2452
<Col sm={6}>
2553
<GluuFormDetailRow
26-
label="fields.description"
54+
label='fields.description'
2755
value={rowData.description}
2856
lsize={3}
2957
rsize={9}

admin-ui/plugins/admin/components/Permissions/UiPermListPage.js

+5
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,11 @@ function UiPermListPage() {
107107
field: 'tag',
108108
editable: false,
109109
},
110+
{
111+
title: `${t('fields.default_permission_in_token')}`,
112+
field: 'defaultPermissionInToken',
113+
editable: false,
114+
},
110115
{ title: `${t('fields.description')}`, field: 'description' },
111116
]}
112117
data={apiPerms}

0 commit comments

Comments
 (0)