@webiny/app-security-access-management 0.0.0-mt-2 → 0.0.0-unstable.06b2ede40f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/components/GroupAutocomplete/graphql.d.ts +1 -1
- package/components/GroupAutocomplete/graphql.js +17 -5
- package/components/GroupAutocomplete/graphql.js.map +1 -0
- package/components/GroupAutocomplete/index.d.ts +5 -2
- package/components/GroupAutocomplete/index.js +10 -8
- package/components/GroupAutocomplete/index.js.map +1 -0
- package/components/GroupsMultiAutocomplete/graphql.d.ts +1 -0
- package/components/GroupsMultiAutocomplete/graphql.js +23 -0
- package/components/GroupsMultiAutocomplete/graphql.js.map +1 -0
- package/components/GroupsMultiAutocomplete/index.d.ts +5 -0
- package/components/GroupsMultiAutocomplete/index.js +19 -0
- package/components/GroupsMultiAutocomplete/index.js.map +1 -0
- package/components/NotAuthorizedError/NotAuthorizedError.d.ts +2 -2
- package/components/NotAuthorizedError/NotAuthorizedError.js +17 -44
- package/components/NotAuthorizedError/NotAuthorizedError.js.map +1 -0
- package/components/NotAuthorizedError/index.js +3 -1
- package/components/NotAuthorizedError/index.js.map +1 -0
- package/components/TeamAutocomplete/graphql.d.ts +1 -0
- package/components/TeamAutocomplete/graphql.js +18 -0
- package/components/TeamAutocomplete/graphql.js.map +1 -0
- package/components/TeamAutocomplete/index.d.ts +5 -0
- package/components/TeamAutocomplete/index.js +18 -0
- package/components/TeamAutocomplete/index.js.map +1 -0
- package/components/TeamsMultiAutocomplete/graphql.d.ts +1 -0
- package/components/TeamsMultiAutocomplete/graphql.js +23 -0
- package/components/TeamsMultiAutocomplete/graphql.js.map +1 -0
- package/components/TeamsMultiAutocomplete/index.d.ts +5 -0
- package/components/TeamsMultiAutocomplete/index.js +19 -0
- package/components/TeamsMultiAutocomplete/index.js.map +1 -0
- package/index.d.ts +2 -2
- package/index.js +83 -4
- package/index.js.map +1 -0
- package/package.json +24 -37
- package/plugins/constants.d.ts +1 -0
- package/plugins/constants.js +6 -4
- package/plugins/constants.js.map +1 -0
- package/plugins/index.d.ts +1 -1
- package/plugins/index.js +3 -5
- package/plugins/index.js.map +1 -0
- package/plugins/installation.d.ts +1 -1
- package/plugins/installation.js +68 -67
- package/plugins/installation.js.map +1 -0
- package/plugins/permissionRenderer/SecurityPermissions.d.ts +8 -5
- package/plugins/permissionRenderer/SecurityPermissions.js +93 -94
- package/plugins/permissionRenderer/SecurityPermissions.js.map +1 -0
- package/plugins/permissionRenderer/index.js +14 -13
- package/plugins/permissionRenderer/index.js.map +1 -0
- package/plugins/routes.d.ts +1 -1
- package/plugins/routes.js +14 -16
- package/plugins/routes.js.map +1 -0
- package/plugins/secureRouteError.d.ts +2 -2
- package/plugins/secureRouteError.js +5 -3
- package/plugins/secureRouteError.js.map +1 -0
- package/types.d.ts +28 -0
- package/types.js +3 -0
- package/types.js.map +1 -0
- package/ui/elements/GroupAutocompleteElement.d.ts +2 -1
- package/ui/elements/GroupAutocompleteElement.js +27 -30
- package/ui/elements/GroupAutocompleteElement.js.map +1 -0
- package/ui/elements/GroupsMultiAutocompleteElement.d.ts +6 -0
- package/ui/elements/GroupsMultiAutocompleteElement.js +32 -0
- package/ui/elements/GroupsMultiAutocompleteElement.js.map +1 -0
- package/ui/elements/TeamAutocompleteElement.d.ts +6 -0
- package/ui/elements/TeamAutocompleteElement.js +32 -0
- package/ui/elements/TeamAutocompleteElement.js.map +1 -0
- package/ui/views/ApiKeys/ApiKeyForm.d.ts +5 -3
- package/ui/views/ApiKeys/ApiKeyForm.js +125 -183
- package/ui/views/ApiKeys/ApiKeyForm.js.map +1 -0
- package/ui/views/ApiKeys/ApiKeys.d.ts +8 -3
- package/ui/views/ApiKeys/ApiKeys.js +7 -7
- package/ui/views/ApiKeys/ApiKeys.js.map +1 -0
- package/ui/views/ApiKeys/ApiKeysDataList.d.ts +5 -3
- package/ui/views/ApiKeys/ApiKeysDataList.js +105 -169
- package/ui/views/ApiKeys/ApiKeysDataList.js.map +1 -0
- package/ui/views/ApiKeys/graphql.d.ts +13 -5
- package/ui/views/ApiKeys/graphql.js +81 -10
- package/ui/views/ApiKeys/graphql.js.map +1 -0
- package/ui/views/ApiKeys/index.d.ts +1 -1
- package/ui/views/ApiKeys/index.js +3 -1
- package/ui/views/ApiKeys/index.js.map +1 -0
- package/ui/views/ApiKeys/utils.d.ts +2 -1
- package/ui/views/ApiKeys/utils.js +6 -5
- package/ui/views/ApiKeys/utils.js.map +1 -0
- package/ui/views/Groups/Groups.d.ts +8 -3
- package/ui/views/Groups/Groups.js +8 -8
- package/ui/views/Groups/Groups.js.map +1 -0
- package/ui/views/Groups/GroupsDataList.d.ts +5 -3
- package/ui/views/Groups/GroupsDataList.js +110 -176
- package/ui/views/Groups/GroupsDataList.js.map +1 -0
- package/ui/views/Groups/GroupsForm.d.ts +5 -3
- package/ui/views/Groups/GroupsForm.js +150 -170
- package/ui/views/Groups/GroupsForm.js.map +1 -0
- package/ui/views/Groups/graphql.d.ts +13 -5
- package/ui/views/Groups/graphql.js +84 -10
- package/ui/views/Groups/graphql.js.map +1 -0
- package/ui/views/Groups/index.d.ts +1 -1
- package/ui/views/Groups/index.js +3 -1
- package/ui/views/Groups/index.js.map +1 -0
- package/ui/views/Teams/Teams.d.ts +8 -0
- package/ui/views/Teams/Teams.js +12 -0
- package/ui/views/Teams/Teams.js.map +1 -0
- package/ui/views/Teams/TeamsDataList.d.ts +5 -0
- package/ui/views/Teams/TeamsDataList.js +151 -0
- package/ui/views/Teams/TeamsDataList.js.map +1 -0
- package/ui/views/Teams/TeamsForm.d.ts +5 -0
- package/ui/views/Teams/TeamsForm.js +173 -0
- package/ui/views/Teams/TeamsForm.js.map +1 -0
- package/ui/views/Teams/graphql.d.ts +13 -0
- package/ui/views/Teams/graphql.js +89 -0
- package/ui/views/Teams/graphql.js.map +1 -0
- package/ui/views/Teams/index.d.ts +1 -0
- package/ui/views/Teams/index.js +3 -0
- package/ui/views/Teams/index.js.map +1 -0
- package/ui/views/utils.d.ts +3 -2
- package/ui/views/utils.js +6 -23
- package/ui/views/utils.js.map +1 -0
- package/plugins/menus.d.ts +0 -4
- package/plugins/menus.js +0 -61
|
@@ -1,244 +1,186 @@
|
|
|
1
|
-
import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
|
|
2
|
-
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
3
|
-
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
4
|
-
|
|
5
|
-
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10;
|
|
6
|
-
|
|
7
|
-
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
8
1
|
import React, { useCallback } from "react";
|
|
9
2
|
import { useMutation, useQuery } from "@apollo/react-hooks";
|
|
10
3
|
import get from "lodash/get";
|
|
11
4
|
import { useRouter } from "@webiny/react-router";
|
|
12
5
|
import { i18n } from "@webiny/app/i18n";
|
|
13
6
|
import { Form } from "@webiny/form";
|
|
14
|
-
import { Grid, Cell } from "@webiny/ui/Grid";
|
|
15
|
-
import { Input } from "@webiny/ui/Input";
|
|
16
|
-
import { ButtonDefault, ButtonIcon, ButtonPrimary, CopyButton } from "@webiny/ui/Button";
|
|
17
|
-
import { CircularProgress } from "@webiny/ui/Progress";
|
|
18
|
-
import { FormElementMessage } from "@webiny/ui/FormElementMessage";
|
|
19
7
|
import { Permissions } from "@webiny/app-admin/components/Permissions";
|
|
20
8
|
import { validation } from "@webiny/validation";
|
|
21
9
|
import { SimpleForm, SimpleFormFooter, SimpleFormContent, SimpleFormHeader } from "@webiny/app-admin/components/SimpleForm";
|
|
22
|
-
import { Typography } from "@webiny/ui/Typography";
|
|
23
10
|
import { useSnackbar } from "@webiny/app-admin/hooks/useSnackbar";
|
|
24
11
|
import { pickDataForAPI } from "./utils";
|
|
25
12
|
import * as GQL from "./graphql";
|
|
26
|
-
import { SnackbarAction } from "@webiny/ui/Snackbar";
|
|
27
13
|
import isEmpty from "lodash/isEmpty";
|
|
28
14
|
import EmptyView from "@webiny/app-admin/components/EmptyView";
|
|
29
|
-
import { ReactComponent as AddIcon } from "@
|
|
30
|
-
import
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
var _useSnackbar = useSnackbar(),
|
|
46
|
-
showSnackbar = _useSnackbar.showSnackbar;
|
|
47
|
-
|
|
48
|
-
var newEntry = new URLSearchParams(location.search).get("new") === "true";
|
|
49
|
-
var id = new URLSearchParams(location.search).get("id");
|
|
50
|
-
var getQuery = useQuery(GQL.READ_API_KEY, {
|
|
15
|
+
import { ReactComponent as AddIcon } from "@webiny/icons/add.svg";
|
|
16
|
+
import { ReactComponent as CopyIcon } from "@webiny/icons/content_copy.svg";
|
|
17
|
+
import { ReactComponent as SettingsIcon } from "@webiny/icons/settings.svg";
|
|
18
|
+
import { Alert, Button, CopyButton, Grid, IconButton, Input, Label, OverlayLoader, Textarea, Tooltip } from "@webiny/admin-ui";
|
|
19
|
+
const t = i18n.ns("app-security-admin-users/admin/api-keys/form");
|
|
20
|
+
export const ApiKeyForm = () => {
|
|
21
|
+
const {
|
|
22
|
+
location,
|
|
23
|
+
history
|
|
24
|
+
} = useRouter();
|
|
25
|
+
const {
|
|
26
|
+
showSnackbar
|
|
27
|
+
} = useSnackbar();
|
|
28
|
+
const newEntry = new URLSearchParams(location.search).get("new") === "true";
|
|
29
|
+
const id = new URLSearchParams(location.search).get("id");
|
|
30
|
+
const getQuery = useQuery(GQL.READ_API_KEY, {
|
|
51
31
|
variables: {
|
|
52
|
-
id
|
|
32
|
+
id
|
|
53
33
|
},
|
|
54
34
|
skip: !id,
|
|
55
|
-
onCompleted:
|
|
35
|
+
onCompleted: data => {
|
|
56
36
|
if (!data) {
|
|
57
37
|
return;
|
|
58
38
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
39
|
+
const {
|
|
40
|
+
error
|
|
41
|
+
} = data.security.apiKey;
|
|
62
42
|
if (error) {
|
|
63
43
|
history.push("/access-management/api-keys");
|
|
64
44
|
showSnackbar(error.message);
|
|
65
45
|
}
|
|
66
46
|
}
|
|
67
47
|
});
|
|
68
|
-
|
|
69
|
-
var _useMutation = useMutation(GQL.CREATE_API_KEY, {
|
|
48
|
+
const [create, createMutation] = useMutation(GQL.CREATE_API_KEY, {
|
|
70
49
|
refetchQueries: [{
|
|
71
50
|
query: GQL.LIST_API_KEYS
|
|
72
51
|
}]
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
create = _useMutation2[0],
|
|
76
|
-
createMutation = _useMutation2[1];
|
|
77
|
-
|
|
78
|
-
var _useMutation3 = useMutation(GQL.UPDATE_API_KEY, {
|
|
52
|
+
});
|
|
53
|
+
const [update, updateMutation] = useMutation(GQL.UPDATE_API_KEY, {
|
|
79
54
|
refetchQueries: [{
|
|
80
55
|
query: GQL.LIST_API_KEYS
|
|
81
56
|
}]
|
|
82
|
-
}),
|
|
83
|
-
_useMutation4 = _slicedToArray(_useMutation3, 2),
|
|
84
|
-
update = _useMutation4[0],
|
|
85
|
-
updateMutation = _useMutation4[1];
|
|
86
|
-
|
|
87
|
-
var loading = [getQuery, createMutation, updateMutation].find(function (item) {
|
|
88
|
-
return item.loading;
|
|
89
57
|
});
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
case 7:
|
|
128
|
-
response = _context.sent;
|
|
129
|
-
error = response.data.security.apiKey.error;
|
|
130
|
-
|
|
131
|
-
if (!error) {
|
|
132
|
-
_context.next = 11;
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
return _context.abrupt("return", showSnackbar(error.message));
|
|
137
|
-
|
|
138
|
-
case 11:
|
|
139
|
-
id = response.data.security.apiKey.data.id;
|
|
140
|
-
!isUpdate && history.push("/access-management/api-keys?id=".concat(id));
|
|
141
|
-
showSnackbar(t(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["API key saved successfully."]))));
|
|
142
|
-
|
|
143
|
-
case 14:
|
|
144
|
-
case "end":
|
|
145
|
-
return _context.stop();
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}, _callee);
|
|
149
|
-
}));
|
|
150
|
-
|
|
151
|
-
return function (_x) {
|
|
152
|
-
return _ref.apply(this, arguments);
|
|
153
|
-
};
|
|
154
|
-
}(), [id]);
|
|
155
|
-
var data = get(getQuery, "data.security.apiKey.data", {});
|
|
156
|
-
var showEmptyView = !newEntry && !loading && isEmpty(data); // Render "No content" selected view.
|
|
157
|
-
|
|
58
|
+
const loading = [getQuery, createMutation, updateMutation].find(item => item.loading);
|
|
59
|
+
const onSubmit = useCallback(async formData => {
|
|
60
|
+
if (!formData.permissions || !formData.permissions.length) {
|
|
61
|
+
showSnackbar(t`You must configure permissions before saving!`, {
|
|
62
|
+
timeout: 60000,
|
|
63
|
+
dismissesOnAction: true
|
|
64
|
+
});
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const isUpdate = formData.createdOn;
|
|
68
|
+
const [operation, args] = isUpdate ? [update, {
|
|
69
|
+
variables: {
|
|
70
|
+
id: formData.id,
|
|
71
|
+
data: pickDataForAPI(formData)
|
|
72
|
+
}
|
|
73
|
+
}] : [create, {
|
|
74
|
+
variables: {
|
|
75
|
+
data: pickDataForAPI(formData)
|
|
76
|
+
}
|
|
77
|
+
}];
|
|
78
|
+
const response = await operation(args);
|
|
79
|
+
const {
|
|
80
|
+
error
|
|
81
|
+
} = response.data.security.apiKey;
|
|
82
|
+
if (error) {
|
|
83
|
+
return showSnackbar(error.message);
|
|
84
|
+
}
|
|
85
|
+
const {
|
|
86
|
+
id
|
|
87
|
+
} = response.data.security.apiKey.data;
|
|
88
|
+
!isUpdate && history.push(`/access-management/api-keys?id=${id}`);
|
|
89
|
+
showSnackbar(t`API key saved successfully.`);
|
|
90
|
+
}, [id]);
|
|
91
|
+
const data = get(getQuery, "data.security.apiKey.data", {});
|
|
92
|
+
const showEmptyView = !newEntry && !loading && isEmpty(data);
|
|
93
|
+
// Render "No content" selected view.
|
|
158
94
|
if (showEmptyView) {
|
|
159
95
|
return /*#__PURE__*/React.createElement(EmptyView, {
|
|
160
|
-
|
|
161
|
-
|
|
96
|
+
icon: /*#__PURE__*/React.createElement(SettingsIcon, null),
|
|
97
|
+
title: t`Click on the left side list to display API key details or create a...`,
|
|
98
|
+
action: /*#__PURE__*/React.createElement(Button, {
|
|
99
|
+
icon: /*#__PURE__*/React.createElement(AddIcon, null),
|
|
100
|
+
text: t`New API Key`,
|
|
162
101
|
"data-testid": "new-record-button",
|
|
163
|
-
onClick:
|
|
164
|
-
|
|
165
|
-
}
|
|
166
|
-
}, /*#__PURE__*/React.createElement(ButtonIcon, {
|
|
167
|
-
icon: /*#__PURE__*/React.createElement(AddIcon, null)
|
|
168
|
-
}), " ", t(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["New API Key"]))))
|
|
102
|
+
onClick: () => history.push("/access-management/api-keys?new=true")
|
|
103
|
+
})
|
|
169
104
|
});
|
|
170
105
|
}
|
|
171
|
-
|
|
172
106
|
return /*#__PURE__*/React.createElement(Form, {
|
|
173
107
|
data: data,
|
|
174
108
|
onSubmit: onSubmit
|
|
175
|
-
},
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
109
|
+
}, ({
|
|
110
|
+
data,
|
|
111
|
+
form,
|
|
112
|
+
Bind
|
|
113
|
+
}) => {
|
|
114
|
+
return /*#__PURE__*/React.createElement(SimpleForm, {
|
|
115
|
+
size: "lg"
|
|
116
|
+
}, loading && /*#__PURE__*/React.createElement(OverlayLoader, null), /*#__PURE__*/React.createElement(SimpleFormHeader, {
|
|
180
117
|
title: data.name ? data.name : "Untitled"
|
|
181
|
-
}), /*#__PURE__*/React.createElement(SimpleFormContent, null, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(
|
|
118
|
+
}), /*#__PURE__*/React.createElement(SimpleFormContent, null, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Grid.Column, {
|
|
182
119
|
span: 12
|
|
183
120
|
}, /*#__PURE__*/React.createElement(Bind, {
|
|
184
121
|
name: "name",
|
|
185
122
|
validators: validation.create("required")
|
|
186
123
|
}, /*#__PURE__*/React.createElement(Input, {
|
|
187
|
-
|
|
188
|
-
|
|
124
|
+
size: "lg",
|
|
125
|
+
label: t`Name`,
|
|
126
|
+
"data-testid": "sam.key.new.form.name"
|
|
127
|
+
}))), /*#__PURE__*/React.createElement(Grid.Column, {
|
|
189
128
|
span: 12
|
|
190
129
|
}, /*#__PURE__*/React.createElement(Bind, {
|
|
191
130
|
name: "description",
|
|
192
131
|
validators: validation.create("required")
|
|
193
|
-
}, /*#__PURE__*/React.createElement(
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
132
|
+
}, /*#__PURE__*/React.createElement(Textarea, {
|
|
133
|
+
size: "lg",
|
|
134
|
+
label: t`Description`,
|
|
135
|
+
rows: 4,
|
|
136
|
+
"data-testid": "sam.key.new.form.description"
|
|
137
|
+
}))), /*#__PURE__*/React.createElement(Grid.Column, {
|
|
197
138
|
span: 12
|
|
198
|
-
}, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(
|
|
199
|
-
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
paddingLeft: "16px"
|
|
205
|
-
}
|
|
206
|
-
}, /*#__PURE__*/React.createElement("span", {
|
|
207
|
-
style: {
|
|
208
|
-
lineHeight: "48px",
|
|
209
|
-
verticalAlign: "middle"
|
|
210
|
-
}
|
|
211
|
-
}, data.token), /*#__PURE__*/React.createElement("span", {
|
|
212
|
-
style: {
|
|
213
|
-
position: "absolute",
|
|
214
|
-
right: "32px"
|
|
215
|
-
}
|
|
216
|
-
}, /*#__PURE__*/React.createElement(CopyButton, {
|
|
139
|
+
}, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Label, {
|
|
140
|
+
text: t`Token`
|
|
141
|
+
}), data.token ? /*#__PURE__*/React.createElement("div", {
|
|
142
|
+
className: "wby-py-sm wby-pl-sm-extra wby-pr-xs wby-rounded-md wby-mt-xs wby-bg-neutral-disabled wby-flex wby-justify-between wby-items-center"
|
|
143
|
+
}, /*#__PURE__*/React.createElement("div", null, data.token), /*#__PURE__*/React.createElement(CopyButton, {
|
|
144
|
+
variant: "ghost",
|
|
217
145
|
value: data.token,
|
|
218
|
-
onCopy:
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
146
|
+
onCopy: () => showSnackbar("Successfully copied!")
|
|
147
|
+
})) : /*#__PURE__*/React.createElement(Alert, {
|
|
148
|
+
className: "wby-mt-xs"
|
|
149
|
+
}, "Your token will be shown once you submit the form."))))), /*#__PURE__*/React.createElement(SimpleFormHeader, {
|
|
150
|
+
title: "Permissions",
|
|
151
|
+
rounded: false
|
|
152
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
153
|
+
className: "wby-flex wby-justify-end"
|
|
154
|
+
}, /*#__PURE__*/React.createElement(Tooltip, {
|
|
155
|
+
content: "Copy permissions as JSON",
|
|
156
|
+
trigger: /*#__PURE__*/React.createElement(IconButton, {
|
|
157
|
+
variant: "ghost",
|
|
158
|
+
icon: /*#__PURE__*/React.createElement(CopyIcon, null),
|
|
159
|
+
onClick: () => {
|
|
160
|
+
navigator.clipboard.writeText(JSON.stringify(data.permissions, null, 2));
|
|
161
|
+
showSnackbar("JSON data copied to clipboard.");
|
|
162
|
+
}
|
|
163
|
+
})
|
|
164
|
+
}))), /*#__PURE__*/React.createElement(SimpleFormContent, null, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Grid.Column, {
|
|
226
165
|
span: 12
|
|
227
166
|
}, /*#__PURE__*/React.createElement(Bind, {
|
|
228
167
|
name: "permissions",
|
|
229
168
|
defaultValue: []
|
|
230
|
-
},
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
onClick:
|
|
236
|
-
|
|
169
|
+
}, bind => /*#__PURE__*/React.createElement(Permissions, Object.assign({
|
|
170
|
+
id: data.id || "new"
|
|
171
|
+
}, bind)))))), /*#__PURE__*/React.createElement(SimpleFormFooter, null, /*#__PURE__*/React.createElement(Button, {
|
|
172
|
+
variant: "secondary",
|
|
173
|
+
text: t`Cancel`,
|
|
174
|
+
onClick: () => history.push("/access-management/api-keys"),
|
|
175
|
+
"data-testid": "sam.key.new.form.button.cancel"
|
|
176
|
+
}), /*#__PURE__*/React.createElement(Button, {
|
|
177
|
+
text: t`Save`,
|
|
178
|
+
"data-testid": "sam.key.new.form.button.save",
|
|
179
|
+
onClick: ev => {
|
|
180
|
+
form.submit(ev);
|
|
237
181
|
}
|
|
238
|
-
}
|
|
239
|
-
onClick: form.submit
|
|
240
|
-
}, t(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["Save API key"])))))));
|
|
182
|
+
})));
|
|
241
183
|
});
|
|
242
184
|
};
|
|
243
185
|
|
|
244
|
-
|
|
186
|
+
//# sourceMappingURL=ApiKeyForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useCallback","useMutation","useQuery","get","useRouter","i18n","Form","Permissions","validation","SimpleForm","SimpleFormFooter","SimpleFormContent","SimpleFormHeader","useSnackbar","pickDataForAPI","GQL","isEmpty","EmptyView","ReactComponent","AddIcon","CopyIcon","SettingsIcon","Alert","Button","CopyButton","Grid","IconButton","Input","Label","OverlayLoader","Textarea","Tooltip","t","ns","ApiKeyForm","location","history","showSnackbar","newEntry","URLSearchParams","search","id","getQuery","READ_API_KEY","variables","skip","onCompleted","data","error","security","apiKey","push","message","create","createMutation","CREATE_API_KEY","refetchQueries","query","LIST_API_KEYS","update","updateMutation","UPDATE_API_KEY","loading","find","item","onSubmit","formData","permissions","length","timeout","dismissesOnAction","isUpdate","createdOn","operation","args","response","showEmptyView","createElement","icon","title","action","text","onClick","form","Bind","size","name","Column","span","validators","label","rows","token","className","variant","value","onCopy","rounded","content","trigger","navigator","clipboard","writeText","JSON","stringify","defaultValue","bind","Object","assign","ev","submit"],"sources":["ApiKeyForm.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useMutation, useQuery } from \"@apollo/react-hooks\";\nimport get from \"lodash/get\";\nimport { useRouter } from \"@webiny/react-router\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Form } from \"@webiny/form\";\nimport { Permissions } from \"@webiny/app-admin/components/Permissions\";\nimport { validation } from \"@webiny/validation\";\nimport {\n SimpleForm,\n SimpleFormFooter,\n SimpleFormContent,\n SimpleFormHeader\n} from \"@webiny/app-admin/components/SimpleForm\";\nimport { useSnackbar } from \"@webiny/app-admin/hooks/useSnackbar\";\nimport { pickDataForAPI } from \"./utils\";\nimport * as GQL from \"./graphql\";\nimport isEmpty from \"lodash/isEmpty\";\nimport EmptyView from \"@webiny/app-admin/components/EmptyView\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport { ReactComponent as CopyIcon } from \"@webiny/icons/content_copy.svg\";\nimport { ReactComponent as SettingsIcon } from \"@webiny/icons/settings.svg\";\nimport type { ApiKey } from \"~/types\";\nimport {\n Alert,\n Button,\n CopyButton,\n Grid,\n IconButton,\n Input,\n Label,\n OverlayLoader,\n Textarea,\n Tooltip\n} from \"@webiny/admin-ui\";\n\nconst t = i18n.ns(\"app-security-admin-users/admin/api-keys/form\");\n\nexport interface ApiKeyFormProps {\n // TODO @ts-refactor delete and go up the tree and sort it out\n [key: string]: any;\n}\n\nexport const ApiKeyForm = () => {\n const { location, history } = useRouter();\n const { showSnackbar } = useSnackbar();\n const newEntry = new URLSearchParams(location.search).get(\"new\") === \"true\";\n const id = new URLSearchParams(location.search).get(\"id\");\n\n const getQuery = useQuery(GQL.READ_API_KEY, {\n variables: { id },\n skip: !id,\n onCompleted: data => {\n if (!data) {\n return;\n }\n\n const { error } = data.security.apiKey;\n if (error) {\n history.push(\"/access-management/api-keys\");\n showSnackbar(error.message);\n }\n }\n });\n\n const [create, createMutation] = useMutation(GQL.CREATE_API_KEY, {\n refetchQueries: [{ query: GQL.LIST_API_KEYS }]\n });\n\n const [update, updateMutation] = useMutation(GQL.UPDATE_API_KEY, {\n refetchQueries: [{ query: GQL.LIST_API_KEYS }]\n });\n\n const loading = [getQuery, createMutation, updateMutation].find(item => item.loading);\n\n const onSubmit = useCallback(\n async (formData: ApiKey) => {\n if (!formData.permissions || !formData.permissions.length) {\n showSnackbar(t`You must configure permissions before saving!`, {\n timeout: 60000,\n dismissesOnAction: true\n });\n return;\n }\n\n const isUpdate = formData.createdOn;\n const [operation, args] = isUpdate\n ? [update, { variables: { id: formData.id, data: pickDataForAPI(formData) } }]\n : [create, { variables: { data: pickDataForAPI(formData) } }];\n\n const response = await operation(args);\n\n const { error } = response.data.security.apiKey;\n if (error) {\n return showSnackbar(error.message);\n }\n\n const { id } = response.data.security.apiKey.data;\n\n !isUpdate && history.push(`/access-management/api-keys?id=${id}`);\n showSnackbar(t`API key saved successfully.`);\n },\n [id]\n );\n\n const data: ApiKey = get(getQuery, \"data.security.apiKey.data\", {});\n\n const showEmptyView = !newEntry && !loading && isEmpty(data);\n // Render \"No content\" selected view.\n if (showEmptyView) {\n return (\n <EmptyView\n icon={<SettingsIcon />}\n title={t`Click on the left side list to display API key details or create a...`}\n action={\n <Button\n icon={<AddIcon />}\n text={t`New API Key`}\n data-testid=\"new-record-button\"\n onClick={() => history.push(\"/access-management/api-keys?new=true\")}\n />\n }\n />\n );\n }\n\n return (\n <Form data={data} onSubmit={onSubmit}>\n {({ data, form, Bind }) => {\n return (\n <SimpleForm size={\"lg\"}>\n {loading && <OverlayLoader />}\n <SimpleFormHeader title={data.name ? data.name : \"Untitled\"} />\n <SimpleFormContent>\n <Grid>\n <Grid.Column span={12}>\n <Bind name=\"name\" validators={validation.create(\"required\")}>\n <Input\n size={\"lg\"}\n label={t`Name`}\n data-testid=\"sam.key.new.form.name\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name=\"description\"\n validators={validation.create(\"required\")}\n >\n <Textarea\n size={\"lg\"}\n label={t`Description`}\n rows={4}\n data-testid=\"sam.key.new.form.description\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <div>\n <Label text={t`Token`} />\n {data.token ? (\n <div\n className={\n \"wby-py-sm wby-pl-sm-extra wby-pr-xs wby-rounded-md wby-mt-xs wby-bg-neutral-disabled wby-flex wby-justify-between wby-items-center\"\n }\n >\n <div>{data.token}</div>\n <CopyButton\n variant={\"ghost\"}\n value={data.token}\n onCopy={() =>\n showSnackbar(\"Successfully copied!\")\n }\n />\n </div>\n ) : (\n <Alert className={\"wby-mt-xs\"}>\n {\n \"Your token will be shown once you submit the form.\"\n }\n </Alert>\n )}\n </div>\n </Grid.Column>\n </Grid>\n </SimpleFormContent>\n <SimpleFormHeader title={\"Permissions\"} rounded={false}>\n <div className={\"wby-flex wby-justify-end\"}>\n <Tooltip\n content=\"Copy permissions as JSON\"\n trigger={\n <IconButton\n variant={\"ghost\"}\n icon={<CopyIcon />}\n onClick={() => {\n navigator.clipboard.writeText(\n JSON.stringify(data.permissions, null, 2)\n );\n showSnackbar(\"JSON data copied to clipboard.\");\n }}\n />\n }\n />\n </div>\n </SimpleFormHeader>\n <SimpleFormContent>\n <Grid>\n <Grid.Column span={12}>\n <Bind name={\"permissions\"} defaultValue={[]}>\n {bind => <Permissions id={data.id || \"new\"} {...bind} />}\n </Bind>\n </Grid.Column>\n </Grid>\n </SimpleFormContent>\n <SimpleFormFooter>\n <Button\n variant={\"secondary\"}\n text={t`Cancel`}\n onClick={() => history.push(\"/access-management/api-keys\")}\n data-testid=\"sam.key.new.form.button.cancel\"\n />\n <Button\n text={t`Save`}\n data-testid=\"sam.key.new.form.button.save\"\n onClick={ev => {\n form.submit(ev);\n }}\n />\n </SimpleFormFooter>\n </SimpleForm>\n );\n }}\n </Form>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { ApiKeysDataListProps } from "./ApiKeysDataList";
|
|
3
|
+
import type { ApiKeyFormProps } from "./ApiKeyForm";
|
|
4
|
+
export interface ApiKeysProps {
|
|
5
|
+
listProps?: ApiKeysDataListProps;
|
|
6
|
+
formProps?: ApiKeyFormProps;
|
|
7
|
+
}
|
|
8
|
+
export declare const ApiKeys: ({ formProps, listProps }: ApiKeysProps) => React.JSX.Element;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { SplitView, LeftPanel, RightPanel } from "@webiny/app-admin/components/SplitView";
|
|
3
|
-
import ApiKeysDataList from "./ApiKeysDataList";
|
|
4
|
-
import ApiKeyForm from "./ApiKeyForm";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
import { ApiKeysDataList } from "./ApiKeysDataList";
|
|
4
|
+
import { ApiKeyForm } from "./ApiKeyForm";
|
|
5
|
+
export const ApiKeys = ({
|
|
6
|
+
formProps = {},
|
|
7
|
+
listProps = {}
|
|
8
|
+
}) => {
|
|
9
9
|
return /*#__PURE__*/React.createElement(SplitView, null, /*#__PURE__*/React.createElement(LeftPanel, null, /*#__PURE__*/React.createElement(ApiKeysDataList, listProps)), /*#__PURE__*/React.createElement(RightPanel, null, /*#__PURE__*/React.createElement(ApiKeyForm, formProps)));
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
//# sourceMappingURL=ApiKeys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","SplitView","LeftPanel","RightPanel","ApiKeysDataList","ApiKeyForm","ApiKeys","formProps","listProps","createElement"],"sources":["ApiKeys.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { SplitView, LeftPanel, RightPanel } from \"@webiny/app-admin/components/SplitView\";\nimport type { ApiKeysDataListProps } from \"./ApiKeysDataList\";\nimport { ApiKeysDataList } from \"./ApiKeysDataList\";\nimport type { ApiKeyFormProps } from \"./ApiKeyForm\";\nimport { ApiKeyForm } from \"./ApiKeyForm\";\n\nexport interface ApiKeysProps {\n listProps?: ApiKeysDataListProps;\n formProps?: ApiKeyFormProps;\n}\nexport const ApiKeys = ({ formProps = {}, listProps = {} }: ApiKeysProps) => {\n return (\n <SplitView>\n <LeftPanel>\n <ApiKeysDataList {...listProps} />\n </LeftPanel>\n <RightPanel>\n <ApiKeyForm {...formProps} />\n </RightPanel>\n </SplitView>\n );\n};\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAASC,SAAS,EAAEC,SAAS,EAAEC,UAAU,QAAQ,wCAAwC;AAEzF,SAASC,eAAe;AAExB,SAASC,UAAU;AAMnB,OAAO,MAAMC,OAAO,GAAGA,CAAC;EAAEC,SAAS,GAAG,CAAC,CAAC;EAAEC,SAAS,GAAG,CAAC;AAAgB,CAAC,KAAK;EACzE,oBACIR,KAAA,CAAAS,aAAA,CAACR,SAAS,qBACND,KAAA,CAAAS,aAAA,CAACP,SAAS,qBACNF,KAAA,CAAAS,aAAA,CAACL,eAAe,EAAKI,SAAY,CAC1B,CAAC,eACZR,KAAA,CAAAS,aAAA,CAACN,UAAU,qBACPH,KAAA,CAAAS,aAAA,CAACJ,UAAU,EAAKE,SAAY,CACpB,CACL,CAAC;AAEpB,CAAC","ignoreList":[]}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface ApiKeysDataListProps {
|
|
3
|
+
[key: string]: any;
|
|
4
|
+
}
|
|
5
|
+
export declare const ApiKeysDataList: () => React.JSX.Element;
|