Skip to content

Commit ba5c3f8

Browse files
committed
Encode URI for user/group name
1 parent 440cc3a commit ba5c3f8

File tree

14 files changed

+50
-22
lines changed

14 files changed

+50
-22
lines changed

src/components/group/GroupRow.jsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@ import IconButton from '@material-ui/core/IconButton';
22
import Check from '@material-ui/icons/Check';
33
import DeleteForever from '@material-ui/icons/DeleteForever';
44

5+
import routes from '../../const/routes';
56
import TableCell from '../ui/TableCell';
67
import TableRow from '../ui/TableRow';
78
import UnstyledLink from '../ui/UnstyledLink';
89

910
export default function GroupRow({ groupDocument = {}, onRemove }) {
11+
const to = routes.group({ groupName: groupDocument.groupName });
1012
return (
11-
<TableRow to={`/group/${groupDocument.groupName}/`} hover>
13+
<TableRow to={to} hover>
1214
<TableCell>
13-
<UnstyledLink to={`/group/${groupDocument.groupName}/`}>
14-
{groupDocument.groupName}
15-
</UnstyledLink>
15+
<UnstyledLink to={to}>{groupDocument.groupName}</UnstyledLink>
1616
</TableCell>
1717
<TableCell>{groupDocument.role && <Check />}</TableCell>
1818
<TableCell disableOnClick>

src/components/group/GroupTitle.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export default function GroupTitle({
1313
return (
1414
<TitleHeader
1515
helpTo="/ref/group.html"
16-
title={groupName}
16+
title={decodeURI(groupName)}
1717
parentTitle="Group"
1818
parentTo="/group/"
1919
{...props}

src/components/importaccess/ImportAccessRow.jsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ import TableCell from '@material-ui/core/TableCell';
22
import TableRow from '@material-ui/core/TableRow';
33
import Typography from '@material-ui/core/Typography';
44

5+
import routes from '../../const/routes';
56
import Menu, { MenuItem } from '../ui/Menu';
67
import UnstyledLink from '../ui/UnstyledLink';
78

89
export default function ImportAccessRow({ group, openRemove, openEdit }) {
910
return (
1011
<TableRow hover>
1112
<TableCell>
12-
<UnstyledLink to={`/group/${group.name}`}>{group.name}</UnstyledLink>
13+
<UnstyledLink to={routes.group({ groupName: group.name })}>{group.name}</UnstyledLink>
1314
</TableCell>
1415
<TableCell>{group.permission}</TableCell>
1516
<TableCell numeric onClick={(e) => e.stopPropagation()}>

src/components/importaccess/ImportAccessTitle.jsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import routes from '../../const/routes';
12
import TitleHeader from '../ui/TitleHeader';
23

34
export default function ImportAccessTitle({ openCode, openCreate, onRefresh, userName }) {
@@ -6,8 +7,8 @@ export default function ImportAccessTitle({ openCode, openCreate, onRefresh, use
67
title="Import Access"
78
grandParentTitle="User"
89
grandParentTo="/user/"
9-
parentTitle={userName}
10-
parentTo={`/user/${userName}/`}
10+
parentTitle={decodeURI(userName)}
11+
parentTo={routes.user({ userName })}
1112
onRefresh={onRefresh}
1213
openCode={openCode}
1314
openAction={openCreate}

src/components/ui/NavSelect.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,13 @@ const goToOptions = [
3737
siteId: true,
3838
},
3939
{
40-
value: (entityId) => `/user/${entityId}`,
40+
value: (entityId) => routes.user({ userName: entityId }),
4141
label: 'User',
4242
synonyms: ['user'],
4343
siteId: false,
4444
},
4545
{
46-
value: (entityId) => `/group/${entityId}`,
46+
value: (entityId) => routes.group({ groupName: entityId }),
4747
label: 'Group',
4848
synonyms: ['group'],
4949
siteId: false,

src/components/ui/TextGridValue.jsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import Typography from '@material-ui/core/Typography';
88
import clsx from 'clsx';
99
import moment from 'moment';
1010

11+
import routes from '../../const/routes';
1112
import { capitalizeString, bytesToSize, fromNow } from '../../utils';
1213
import { bitRateToSize, freqToSize } from '../../utils/bitsToSize';
1314

@@ -242,14 +243,14 @@ const TextGridValue = forwardRef(
242243
case 'username':
243244
valueComponent = (
244245
<StyledTypography {...props} ref={ref} className={className}>
245-
<UnstyledLink to={`/user/${value}/`}>{value}</UnstyledLink>
246+
<UnstyledLink to={routes.user({ userName: value })}>{value}</UnstyledLink>
246247
</StyledTypography>
247248
);
248249
break;
249250
case 'group':
250251
valueComponent = (
251252
<StyledTypography {...props} ref={ref} className={className}>
252-
<UnstyledLink to={`/group/${value}/`}>{value}</UnstyledLink>
253+
<UnstyledLink to={routes.group({ groupName: value })}>{value}</UnstyledLink>
253254
</StyledTypography>
254255
);
255256
break;

src/components/user/UserRow.jsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ import IconButton from '@material-ui/core/IconButton';
22
import Check from '@material-ui/icons/Check';
33
import DeleteForever from '@material-ui/icons/DeleteForever';
44

5+
import routes from '../../const/routes';
56
import TableCell from '../ui/TableCell';
67
import TableRow from '../ui/TableRowLink';
78

89
export default function UserRow({ userDocument = {}, onRemove }) {
10+
const to = routes.user({ userName: userDocument.userName });
911
return (
10-
<TableRow to={`/user/${userDocument.userName}/`} hover>
12+
<TableRow to={to} hover>
1113
<TableCell>{userDocument.userName}</TableCell>
1214
<TableCell>{userDocument.realName}</TableCell>
1315
<TableCell>{userDocument.disabled && <Check />}</TableCell>

src/components/user/UserTitle.jsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import Tooltip from '@material-ui/core/Tooltip';
44
import Typography from '@material-ui/core/Typography';
55
import VpnKeyIcon from '@material-ui/icons/VpnKey';
66

7+
import routes from '../../const/routes';
78
import withModal from '../../hoc/withModal';
89
import Menu, { MenuItem } from '../ui/Menu';
910
import { OfflineIcon } from '../ui/StatusIcon';
@@ -37,13 +38,13 @@ function UserTitle({
3738
return (
3839
<TitleHeader
3940
helpTo="/ref/user.html"
40-
title={userName}
41+
title={decodeURI(userName)}
4142
parentTitle="User"
4243
parentTo="/user/"
4344
iconList={
4445
<>
4546
<Tooltip title="Access Keys">
46-
<IconButton onClick={() => history.push(`/user/${userName}/key`)}>
47+
<IconButton onClick={() => history.push(routes.userAccessKey({ userName }))}>
4748
<VpnKeyIcon />
4849
</IconButton>
4950
</Tooltip>

src/const/routes.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,15 @@ export default {
2727
secret: (params) => generatePath('/secret/:alias', params),
2828
shapeTagList: (params) => generatePath('/shape-tag/', params),
2929
shapeTag: (params) => generatePath('/shape-tag/:tagName', params),
30+
user: (params) =>
31+
generatePath('/user/:userName/', { ...params, userName: encodeURI(params.userName) }),
32+
userAccessKey: (params) =>
33+
generatePath('/user/:userName/key', { ...params, userName: encodeURI(params.userName) }),
34+
importAccessUser: (params) =>
35+
generatePath('/import/access/:userName', {
36+
...params,
37+
userName: encodeURI(params.userName),
38+
}),
39+
group: (params) =>
40+
generatePath('/group/:groupName/', { ...params, groupName: encodeURI(params.groupName) }),
3041
};

src/containers/GroupList.jsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import GroupListCard from '../components/group/GroupListCard';
66
import GroupListParams, { GROUP_LIST_PARAMS_FORM } from '../components/group/GroupListParams';
77
import GroupListTitle from '../components/group/GroupListTitle';
88
import GroupWizard from '../components/group/GroupWizard';
9+
import routes from '../const/routes';
910
import withFormActions from '../hoc/withFormActions';
1011
import withUI from '../hoc/withUI';
1112

@@ -92,7 +93,7 @@ class GroupList extends PureComponent {
9293
)}
9394
<GroupWizard
9495
dialogName={GROUP_CREATE_MODAL}
95-
onSuccess={({ data }) => history.push(`/group/${data.groupName}`)}
96+
onSuccess={({ data }) => history.push(routes.group({ groupName: data.groupName }))}
9697
/>
9798
</>
9899
);

0 commit comments

Comments
 (0)