@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
package/plugins/index.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import routes from "./routes";
|
|
2
|
-
import menus from "./menus";
|
|
3
1
|
import installation from "./installation";
|
|
4
2
|
import permissionRenderer from "./permissionRenderer";
|
|
5
3
|
import secureRouteError from "./secureRouteError";
|
|
6
|
-
export default (
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
export default () => [installation, permissionRenderer, secureRouteError];
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["installation","permissionRenderer","secureRouteError"],"sources":["index.ts"],"sourcesContent":["import type { PluginCollection } from \"@webiny/plugins/types\";\nimport installation from \"./installation\";\nimport permissionRenderer from \"./permissionRenderer\";\nimport secureRouteError from \"~/plugins/secureRouteError\";\n\nexport default (): PluginCollection => [installation, permissionRenderer, secureRouteError];\n"],"mappings":"AACA,OAAOA,YAAY;AACnB,OAAOC,kBAAkB;AACzB,OAAOC,gBAAgB;AAEvB,eAAe,MAAwB,CAACF,YAAY,EAAEC,kBAAkB,EAAEC,gBAAgB,CAAC","ignoreList":[]}
|
package/plugins/installation.js
CHANGED
|
@@ -1,99 +1,100 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
|
|
4
|
-
|
|
5
|
-
var _templateObject, _templateObject2;
|
|
6
|
-
|
|
7
|
-
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
1
|
+
import _styled from "@emotion/styled/base";
|
|
2
|
+
function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
|
|
8
3
|
import React, { useState, useEffect } from "react";
|
|
9
4
|
import gql from "graphql-tag";
|
|
10
5
|
import { useApolloClient } from "@apollo/react-hooks";
|
|
11
6
|
import { Alert } from "@webiny/ui/Alert";
|
|
12
7
|
import { CircularProgress } from "@webiny/ui/Progress";
|
|
13
8
|
import { SimpleForm, SimpleFormContent } from "@webiny/app-admin/components/SimpleForm";
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
const SimpleFormPlaceholder = /*#__PURE__*/_styled("div", process.env.NODE_ENV === "production" ? {
|
|
10
|
+
target: "evolwsn0"
|
|
11
|
+
} : {
|
|
16
12
|
target: "evolwsn0",
|
|
17
13
|
label: "SimpleFormPlaceholder"
|
|
18
|
-
})({
|
|
19
|
-
|
|
20
|
-
|
|
14
|
+
})(process.env.NODE_ENV === "production" ? {
|
|
15
|
+
name: "u16u3o",
|
|
16
|
+
styles: "min-height:300px;min-width:400px"
|
|
17
|
+
} : {
|
|
18
|
+
name: "u16u3o",
|
|
19
|
+
styles: "min-height:300px;min-width:400px",
|
|
20
|
+
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluc3RhbGxhdGlvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUzhCIiwiZmlsZSI6Imluc3RhbGxhdGlvbi50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGdxbCBmcm9tIFwiZ3JhcGhxbC10YWdcIjtcbmltcG9ydCB7IHVzZUFwb2xsb0NsaWVudCB9IGZyb20gXCJAYXBvbGxvL3JlYWN0LWhvb2tzXCI7XG5pbXBvcnQgeyBBbGVydCB9IGZyb20gXCJAd2ViaW55L3VpL0FsZXJ0XCI7XG5pbXBvcnQgeyBDaXJjdWxhclByb2dyZXNzIH0gZnJvbSBcIkB3ZWJpbnkvdWkvUHJvZ3Jlc3NcIjtcbmltcG9ydCB7IFNpbXBsZUZvcm0sIFNpbXBsZUZvcm1Db250ZW50IH0gZnJvbSBcIkB3ZWJpbnkvYXBwLWFkbWluL2NvbXBvbmVudHMvU2ltcGxlRm9ybVwiO1xuaW1wb3J0IHN0eWxlZCBmcm9tIFwiQGVtb3Rpb24vc3R5bGVkXCI7XG5pbXBvcnQgdHlwZSB7IEFkbWluSW5zdGFsbGF0aW9uUGx1Z2luIH0gZnJvbSBcIkB3ZWJpbnkvYXBwLWFkbWluL3R5cGVzXCI7XG5cbmNvbnN0IFNpbXBsZUZvcm1QbGFjZWhvbGRlciA9IHN0eWxlZC5kaXYoe1xuICAgIG1pbkhlaWdodDogMzAwLFxuICAgIG1pbldpZHRoOiA0MDBcbn0pO1xuXG5jb25zdCBJU19JTlNUQUxMRUQgPSBncWxgXG4gICAgcXVlcnkgSXNTZWN1cml0eUluc3RhbGxlZCB7XG4gICAgICAgIHNlY3VyaXR5IHtcbiAgICAgICAgICAgIHZlcnNpb25cbiAgICAgICAgfVxuICAgIH1cbmA7XG5cbmNvbnN0IElOU1RBTEwgPSBncWxgXG4gICAgbXV0YXRpb24gSW5zdGFsbFNlY3VyaXR5IHtcbiAgICAgICAgc2VjdXJpdHkge1xuICAgICAgICAgICAgaW5zdGFsbCB7XG4gICAgICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICAgICAgIGVycm9yIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZVxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuYDtcblxuaW50ZXJmYWNlIFNlY3VyaXR5SW5zdGFsbGVyUHJvcHMge1xuICAgIG9uSW5zdGFsbGVkOiAoKSA9PiB2b2lkO1xufVxuY29uc3QgU2VjdXJpdHlJbnN0YWxsZXIgPSAoeyBvbkluc3RhbGxlZCB9OiBTZWN1cml0eUluc3RhbGxlclByb3BzKSA9PiB7XG4gICAgY29uc3QgY2xpZW50ID0gdXNlQXBvbGxvQ2xpZW50KCk7XG4gICAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZShudWxsKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNsaWVudC5tdXRhdGUoeyBtdXRhdGlvbjogSU5TVEFMTCB9KS50aGVuKCh7IGRhdGEgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gZGF0YS5zZWN1cml0eS5pbnN0YWxsO1xuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgc2V0RXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBKdXN0IHNvIHRoZSB1c2VyIHNlZXMgdGhlIGFjdHVhbCBtZXNzYWdlLlxuICAgICAgICAgICAgc2V0VGltZW91dChvbkluc3RhbGxlZCwgMzAwMCk7XG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGxhYmVsID0gZXJyb3IgPyAoXG4gICAgICAgIDxBbGVydCB0aXRsZT17YFNvbWV0aGluZyB3ZW50IHdyb25nYH0gdHlwZT17XCJkYW5nZXJcIn0+XG4gICAgICAgICAgICB7ZXJyb3J9XG4gICAgICAgIDwvQWxlcnQ+XG4gICAgKSA6IChcbiAgICAgICAgYEluc3RhbGxpbmcgU2VjdXJpdHkuLi5gXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxTaW1wbGVGb3JtPlxuICAgICAgICAgICAgPENpcmN1bGFyUHJvZ3Jlc3MgbGFiZWw9e2xhYmVsfSAvPlxuICAgICAgICAgICAgPFNpbXBsZUZvcm1Db250ZW50PlxuICAgICAgICAgICAgICAgIDxTaW1wbGVGb3JtUGxhY2Vob2xkZXIgLz5cbiAgICAgICAgICAgIDwvU2ltcGxlRm9ybUNvbnRlbnQ+XG4gICAgICAgIDwvU2ltcGxlRm9ybT5cbiAgICApO1xufTtcblxuY29uc3QgcGx1Z2luOiBBZG1pbkluc3RhbGxhdGlvblBsdWdpbiA9IHtcbiAgICBuYW1lOiBcImFkbWluLWluc3RhbGxhdGlvbi1zZWN1cml0eVwiLFxuICAgIHR5cGU6IFwiYWRtaW4taW5zdGFsbGF0aW9uXCIsXG4gICAgdGl0bGU6IGBTZWN1cml0eWAsXG4gICAgZGVwZW5kZW5jaWVzOiBbYGFkbWluLWluc3RhbGxhdGlvbi10ZW5hbmN5YF0sXG4gICAgc2VjdXJlOiBmYWxzZSxcbiAgICBhc3luYyBnZXRJbnN0YWxsZWRWZXJzaW9uKHsgY2xpZW50IH0pIHtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBjbGllbnQucXVlcnkoeyBxdWVyeTogSVNfSU5TVEFMTEVEIH0pO1xuICAgICAgICByZXR1cm4gZGF0YS5zZWN1cml0eS52ZXJzaW9uO1xuICAgIH0sXG4gICAgcmVuZGVyKHsgb25JbnN0YWxsZWQgfSkge1xuICAgICAgICByZXR1cm4gPFNlY3VyaXR5SW5zdGFsbGVyIG9uSW5zdGFsbGVkPXtvbkluc3RhbGxlZH0gLz47XG4gICAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgcGx1Z2luO1xuIl19 */",
|
|
21
|
+
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
21
22
|
});
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
23
|
+
const IS_INSTALLED = gql`
|
|
24
|
+
query IsSecurityInstalled {
|
|
25
|
+
security {
|
|
26
|
+
version
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
`;
|
|
30
|
+
const INSTALL = gql`
|
|
31
|
+
mutation InstallSecurity {
|
|
32
|
+
security {
|
|
33
|
+
install {
|
|
34
|
+
data
|
|
35
|
+
error {
|
|
36
|
+
code
|
|
37
|
+
message
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
`;
|
|
43
|
+
const SecurityInstaller = ({
|
|
44
|
+
onInstalled
|
|
45
|
+
}) => {
|
|
46
|
+
const client = useApolloClient();
|
|
47
|
+
const [error, setError] = useState(null);
|
|
48
|
+
useEffect(() => {
|
|
35
49
|
client.mutate({
|
|
36
50
|
mutation: INSTALL
|
|
37
|
-
}).then(
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
51
|
+
}).then(({
|
|
52
|
+
data
|
|
53
|
+
}) => {
|
|
54
|
+
const {
|
|
55
|
+
error
|
|
56
|
+
} = data.security.install;
|
|
41
57
|
if (error) {
|
|
42
58
|
setError(error.message);
|
|
43
59
|
return;
|
|
44
|
-
}
|
|
45
|
-
|
|
60
|
+
}
|
|
46
61
|
|
|
62
|
+
// Just so the user sees the actual message.
|
|
47
63
|
setTimeout(onInstalled, 3000);
|
|
48
64
|
});
|
|
49
65
|
}, []);
|
|
50
|
-
|
|
51
|
-
title:
|
|
66
|
+
const label = error ? /*#__PURE__*/React.createElement(Alert, {
|
|
67
|
+
title: `Something went wrong`,
|
|
52
68
|
type: "danger"
|
|
53
|
-
}, error) :
|
|
69
|
+
}, error) : `Installing Security...`;
|
|
54
70
|
return /*#__PURE__*/React.createElement(SimpleForm, null, /*#__PURE__*/React.createElement(CircularProgress, {
|
|
55
71
|
label: label
|
|
56
72
|
}), /*#__PURE__*/React.createElement(SimpleFormContent, null, /*#__PURE__*/React.createElement(SimpleFormPlaceholder, null)));
|
|
57
73
|
};
|
|
58
|
-
|
|
59
|
-
var plugin = {
|
|
74
|
+
const plugin = {
|
|
60
75
|
name: "admin-installation-security",
|
|
61
76
|
type: "admin-installation",
|
|
62
|
-
title:
|
|
63
|
-
dependencies: [
|
|
77
|
+
title: `Security`,
|
|
78
|
+
dependencies: [`admin-installation-tenancy`],
|
|
64
79
|
secure: false,
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
_context.next = 3;
|
|
75
|
-
return client.query({
|
|
76
|
-
query: IS_INSTALLED
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
case 3:
|
|
80
|
-
_yield$client$query = _context.sent;
|
|
81
|
-
data = _yield$client$query.data;
|
|
82
|
-
return _context.abrupt("return", data.security.version);
|
|
83
|
-
|
|
84
|
-
case 6:
|
|
85
|
-
case "end":
|
|
86
|
-
return _context.stop();
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}, _callee);
|
|
90
|
-
}))();
|
|
80
|
+
async getInstalledVersion({
|
|
81
|
+
client
|
|
82
|
+
}) {
|
|
83
|
+
const {
|
|
84
|
+
data
|
|
85
|
+
} = await client.query({
|
|
86
|
+
query: IS_INSTALLED
|
|
87
|
+
});
|
|
88
|
+
return data.security.version;
|
|
91
89
|
},
|
|
92
|
-
render
|
|
93
|
-
|
|
90
|
+
render({
|
|
91
|
+
onInstalled
|
|
92
|
+
}) {
|
|
94
93
|
return /*#__PURE__*/React.createElement(SecurityInstaller, {
|
|
95
94
|
onInstalled: onInstalled
|
|
96
95
|
});
|
|
97
96
|
}
|
|
98
97
|
};
|
|
99
|
-
export default plugin;
|
|
98
|
+
export default plugin;
|
|
99
|
+
|
|
100
|
+
//# sourceMappingURL=installation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useState","useEffect","gql","useApolloClient","Alert","CircularProgress","SimpleForm","SimpleFormContent","SimpleFormPlaceholder","_styled","process","env","NODE_ENV","target","label","name","styles","map","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","IS_INSTALLED","INSTALL","SecurityInstaller","onInstalled","client","error","setError","mutate","mutation","then","data","security","install","message","setTimeout","createElement","title","type","plugin","dependencies","secure","getInstalledVersion","query","version","render"],"sources":["installation.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport gql from \"graphql-tag\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\nimport { Alert } from \"@webiny/ui/Alert\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { SimpleForm, SimpleFormContent } from \"@webiny/app-admin/components/SimpleForm\";\nimport styled from \"@emotion/styled\";\nimport type { AdminInstallationPlugin } from \"@webiny/app-admin/types\";\n\nconst SimpleFormPlaceholder = styled.div({\n minHeight: 300,\n minWidth: 400\n});\n\nconst IS_INSTALLED = gql`\n query IsSecurityInstalled {\n security {\n version\n }\n }\n`;\n\nconst INSTALL = gql`\n mutation InstallSecurity {\n security {\n install {\n data\n error {\n code\n message\n }\n }\n }\n }\n`;\n\ninterface SecurityInstallerProps {\n onInstalled: () => void;\n}\nconst SecurityInstaller = ({ onInstalled }: SecurityInstallerProps) => {\n const client = useApolloClient();\n const [error, setError] = useState(null);\n\n useEffect(() => {\n client.mutate({ mutation: INSTALL }).then(({ data }) => {\n const { error } = data.security.install;\n if (error) {\n setError(error.message);\n return;\n }\n\n // Just so the user sees the actual message.\n setTimeout(onInstalled, 3000);\n });\n }, []);\n\n const label = error ? (\n <Alert title={`Something went wrong`} type={\"danger\"}>\n {error}\n </Alert>\n ) : (\n `Installing Security...`\n );\n\n return (\n <SimpleForm>\n <CircularProgress label={label} />\n <SimpleFormContent>\n <SimpleFormPlaceholder />\n </SimpleFormContent>\n </SimpleForm>\n );\n};\n\nconst plugin: AdminInstallationPlugin = {\n name: \"admin-installation-security\",\n type: \"admin-installation\",\n title: `Security`,\n dependencies: [`admin-installation-tenancy`],\n secure: false,\n async getInstalledVersion({ client }) {\n const { data } = await client.query({ query: IS_INSTALLED });\n return data.security.version;\n },\n render({ onInstalled }) {\n return <SecurityInstaller onInstalled={onInstalled} />;\n }\n};\n\nexport default plugin;\n"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,SAAS,QAAQ,OAAO;AAClD,OAAOC,GAAG,MAAM,aAAa;AAC7B,SAASC,eAAe,QAAQ,qBAAqB;AACrD,SAASC,KAAK,QAAQ,kBAAkB;AACxC,SAASC,gBAAgB,QAAQ,qBAAqB;AACtD,SAASC,UAAU,EAAEC,iBAAiB,QAAQ,yCAAyC;AAIvF,MAAMC,qBAAqB,gBAAGC,OAAA,QAAAC,OAAA,CAAAC,GAAA,CAAAC,QAAA;EAAAC,MAAA;AAAA;EAAAA,MAAA;EAAAC,KAAA;AAAA,GAAAJ,OAAA,CAAAC,GAAA,CAAAC,QAAA;EAAAG,IAAA;EAAAC,MAAA;AAAA;EAAAD,IAAA;EAAAC,MAAA;EAAAC,GAAA;EAAAC,QAAA,EAAAC;AAAA,CAG7B,CAAC;AAEF,MAAMC,YAAY,GAAGlB,GAAG;AACxB;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,MAAMmB,OAAO,GAAGnB,GAAG;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAKD,MAAMoB,iBAAiB,GAAGA,CAAC;EAAEC;AAAoC,CAAC,KAAK;EACnE,MAAMC,MAAM,GAAGrB,eAAe,CAAC,CAAC;EAChC,MAAM,CAACsB,KAAK,EAAEC,QAAQ,CAAC,GAAG1B,QAAQ,CAAC,IAAI,CAAC;EAExCC,SAAS,CAAC,MAAM;IACZuB,MAAM,CAACG,MAAM,CAAC;MAAEC,QAAQ,EAAEP;IAAQ,CAAC,CAAC,CAACQ,IAAI,CAAC,CAAC;MAAEC;IAAK,CAAC,KAAK;MACpD,MAAM;QAAEL;MAAM,CAAC,GAAGK,IAAI,CAACC,QAAQ,CAACC,OAAO;MACvC,IAAIP,KAAK,EAAE;QACPC,QAAQ,CAACD,KAAK,CAACQ,OAAO,CAAC;QACvB;MACJ;;MAEA;MACAC,UAAU,CAACX,WAAW,EAAE,IAAI,CAAC;IACjC,CAAC,CAAC;EACN,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMT,KAAK,GAAGW,KAAK,gBACf1B,KAAA,CAAAoC,aAAA,CAAC/B,KAAK;IAACgC,KAAK,EAAE,sBAAuB;IAACC,IAAI,EAAE;EAAS,GAChDZ,KACE,CAAC,GAER,wBACH;EAED,oBACI1B,KAAA,CAAAoC,aAAA,CAAC7B,UAAU,qBACPP,KAAA,CAAAoC,aAAA,CAAC9B,gBAAgB;IAACS,KAAK,EAAEA;EAAM,CAAE,CAAC,eAClCf,KAAA,CAAAoC,aAAA,CAAC5B,iBAAiB,qBACdR,KAAA,CAAAoC,aAAA,CAAC3B,qBAAqB,MAAE,CACT,CACX,CAAC;AAErB,CAAC;AAED,MAAM8B,MAA+B,GAAG;EACpCvB,IAAI,EAAE,6BAA6B;EACnCsB,IAAI,EAAE,oBAAoB;EAC1BD,KAAK,EAAE,UAAU;EACjBG,YAAY,EAAE,CAAC,4BAA4B,CAAC;EAC5CC,MAAM,EAAE,KAAK;EACb,MAAMC,mBAAmBA,CAAC;IAAEjB;EAAO,CAAC,EAAE;IAClC,MAAM;MAAEM;IAAK,CAAC,GAAG,MAAMN,MAAM,CAACkB,KAAK,CAAC;MAAEA,KAAK,EAAEtB;IAAa,CAAC,CAAC;IAC5D,OAAOU,IAAI,CAACC,QAAQ,CAACY,OAAO;EAChC,CAAC;EACDC,MAAMA,CAAC;IAAErB;EAAY,CAAC,EAAE;IACpB,oBAAOxB,KAAA,CAAAoC,aAAA,CAACb,iBAAiB;MAACC,WAAW,EAAEA;IAAY,CAAE,CAAC;EAC1D;AACJ,CAAC;AAED,eAAee,MAAM","ignoreList":[]}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { SecurityPermission } from "@webiny/app-security/types";
|
|
3
|
+
interface SecurityPermissionsProps {
|
|
4
|
+
value: SecurityPermission[];
|
|
5
|
+
onChange: (value: SecurityPermission[]) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const SecurityPermissions: ({ value, onChange }: SecurityPermissionsProps) => React.JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -1,176 +1,175 @@
|
|
|
1
|
-
import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
|
|
2
|
-
|
|
3
|
-
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13;
|
|
4
|
-
|
|
5
1
|
import React, { Fragment, useCallback, useMemo } from "react";
|
|
6
2
|
import { Grid, Cell } from "@webiny/ui/Grid";
|
|
7
3
|
import { Select } from "@webiny/ui/Select";
|
|
8
4
|
import { i18n } from "@webiny/app/i18n";
|
|
9
|
-
import { PermissionInfo,
|
|
5
|
+
import { CannotUseAaclAlert, PermissionInfo, gridWithPaddingClass, PermissionsGroup } from "@webiny/app-admin/components/Permissions";
|
|
10
6
|
import { Form } from "@webiny/form";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
7
|
+
import { useSecurity } from "@webiny/app-security";
|
|
8
|
+
import { useWcp } from "@webiny/app-admin";
|
|
9
|
+
const t = i18n.ns("app-security-admin-users/plugins/permissionRenderer");
|
|
10
|
+
const SECURITY = "security";
|
|
11
|
+
const SECURITY_FULL_ACCESS = `${SECURITY}.*`;
|
|
12
|
+
const SECURITY_GROUP_ACCESS = `${SECURITY}.group`;
|
|
13
|
+
const SECURITY_TEAM_ACCESS = `${SECURITY}.team`;
|
|
14
|
+
const SECURITY_API_KEY_ACCESS = `${SECURITY}.apiKey`;
|
|
15
|
+
const FULL_ACCESS = "full";
|
|
16
|
+
const NO_ACCESS = "no";
|
|
17
|
+
const CUSTOM_ACCESS = "custom";
|
|
18
|
+
export const SecurityPermissions = ({
|
|
19
|
+
value,
|
|
20
|
+
onChange
|
|
21
|
+
}) => {
|
|
22
|
+
const {
|
|
23
|
+
getPermission
|
|
24
|
+
} = useSecurity();
|
|
25
|
+
const wcp = useWcp();
|
|
26
|
+
|
|
27
|
+
// We disable form elements for custom permissions if AACL cannot be used.
|
|
28
|
+
const cannotUseAacl = useMemo(() => {
|
|
29
|
+
return !getPermission("aacl", true);
|
|
30
|
+
}, []);
|
|
31
|
+
const teams = wcp.canUseTeams();
|
|
32
|
+
const onFormChange = useCallback(formData => {
|
|
33
|
+
let newValue = [];
|
|
27
34
|
if (Array.isArray(value)) {
|
|
28
35
|
// Let's just filter out the `security*` permission objects, it's easier to build new ones from scratch.
|
|
29
|
-
newValue = value.filter(
|
|
30
|
-
return !item.name.startsWith(SECURITY);
|
|
31
|
-
});
|
|
36
|
+
newValue = value.filter(item => !item.name.startsWith(SECURITY));
|
|
32
37
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (data.accessLevel === FULL_ACCESS) {
|
|
38
|
+
const permissions = [];
|
|
39
|
+
if (formData.accessLevel === FULL_ACCESS) {
|
|
37
40
|
permissions.push({
|
|
38
41
|
name: SECURITY_FULL_ACCESS
|
|
39
42
|
});
|
|
40
|
-
} else if (
|
|
41
|
-
if (
|
|
43
|
+
} else if (formData.accessLevel === CUSTOM_ACCESS) {
|
|
44
|
+
if (formData.groupAccessScope === FULL_ACCESS) {
|
|
42
45
|
permissions.push({
|
|
43
46
|
name: SECURITY_GROUP_ACCESS
|
|
44
47
|
});
|
|
45
48
|
}
|
|
46
|
-
|
|
47
|
-
|
|
49
|
+
if (formData.teamAccessScope === FULL_ACCESS) {
|
|
50
|
+
permissions.push({
|
|
51
|
+
name: SECURITY_TEAM_ACCESS
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
if (formData.apiKeyAccessScope === FULL_ACCESS) {
|
|
48
55
|
permissions.push({
|
|
49
56
|
name: SECURITY_API_KEY_ACCESS
|
|
50
57
|
});
|
|
51
58
|
}
|
|
52
59
|
}
|
|
53
|
-
|
|
54
60
|
if (permissions && permissions.length) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
(_newValue = newValue).push.apply(_newValue, permissions);
|
|
61
|
+
newValue.push(...permissions);
|
|
58
62
|
}
|
|
59
|
-
|
|
60
63
|
onChange(newValue);
|
|
61
64
|
}, [value]);
|
|
62
|
-
|
|
65
|
+
const formData = useMemo(() => {
|
|
63
66
|
if (!Array.isArray(value)) {
|
|
64
67
|
return {
|
|
65
68
|
accessLevel: NO_ACCESS
|
|
66
69
|
};
|
|
67
70
|
}
|
|
68
|
-
|
|
69
|
-
var hasFullAccess = value.find(function (item) {
|
|
70
|
-
return item.name === SECURITY_FULL_ACCESS || item.name === "*";
|
|
71
|
-
});
|
|
72
|
-
|
|
71
|
+
const hasFullAccess = value.find(item => item.name === SECURITY_FULL_ACCESS || item.name === "*");
|
|
73
72
|
if (hasFullAccess) {
|
|
74
73
|
return {
|
|
75
74
|
accessLevel: FULL_ACCESS
|
|
76
75
|
};
|
|
77
76
|
}
|
|
78
|
-
|
|
79
|
-
var permissions = value.filter(function (item) {
|
|
80
|
-
return item.name.startsWith(SECURITY);
|
|
81
|
-
});
|
|
82
|
-
|
|
77
|
+
const permissions = value.filter(item => item.name.startsWith(SECURITY));
|
|
83
78
|
if (permissions.length === 0) {
|
|
84
79
|
return {
|
|
85
80
|
accessLevel: NO_ACCESS
|
|
86
81
|
};
|
|
87
82
|
}
|
|
88
|
-
|
|
89
|
-
var data = {
|
|
83
|
+
const data = {
|
|
90
84
|
accessLevel: CUSTOM_ACCESS,
|
|
91
85
|
groupAccessScope: NO_ACCESS,
|
|
86
|
+
teamAccessScope: NO_ACCESS,
|
|
92
87
|
apiKeyAccessScope: NO_ACCESS
|
|
93
88
|
};
|
|
94
|
-
|
|
95
|
-
return item.name === SECURITY_GROUP_ACCESS;
|
|
96
|
-
});
|
|
97
|
-
|
|
89
|
+
const hasGroupAccess = permissions.find(item => item.name === SECURITY_GROUP_ACCESS);
|
|
98
90
|
if (hasGroupAccess) {
|
|
99
91
|
data.groupAccessScope = FULL_ACCESS;
|
|
100
92
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
|
|
93
|
+
const hasTeamAccess = permissions.find(item => item.name === SECURITY_TEAM_ACCESS);
|
|
94
|
+
if (hasTeamAccess) {
|
|
95
|
+
data.teamAccessScope = FULL_ACCESS;
|
|
96
|
+
}
|
|
97
|
+
const hasApiKeyAccess = permissions.find(item => item.name === SECURITY_API_KEY_ACCESS);
|
|
106
98
|
if (hasApiKeyAccess) {
|
|
107
99
|
data.apiKeyAccessScope = FULL_ACCESS;
|
|
108
100
|
}
|
|
109
|
-
|
|
110
101
|
return data;
|
|
111
102
|
}, []);
|
|
112
103
|
return /*#__PURE__*/React.createElement(Form, {
|
|
113
104
|
data: formData,
|
|
114
105
|
onChange: onFormChange
|
|
115
|
-
},
|
|
116
|
-
|
|
117
|
-
|
|
106
|
+
}, ({
|
|
107
|
+
data,
|
|
108
|
+
Bind
|
|
109
|
+
}) => {
|
|
118
110
|
return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(Grid, {
|
|
119
|
-
className:
|
|
111
|
+
className: gridWithPaddingClass
|
|
112
|
+
}, /*#__PURE__*/React.createElement(Cell, {
|
|
113
|
+
span: 12
|
|
114
|
+
}, data.accessLevel === "custom" && cannotUseAacl && /*#__PURE__*/React.createElement(CannotUseAaclAlert, null))), /*#__PURE__*/React.createElement(Grid, {
|
|
115
|
+
className: gridWithPaddingClass
|
|
120
116
|
}, /*#__PURE__*/React.createElement(Cell, {
|
|
121
117
|
span: 6
|
|
122
118
|
}, /*#__PURE__*/React.createElement(PermissionInfo, {
|
|
123
|
-
title: t
|
|
119
|
+
title: t`Access Level`
|
|
124
120
|
})), /*#__PURE__*/React.createElement(Cell, {
|
|
125
121
|
span: 6
|
|
126
122
|
}, /*#__PURE__*/React.createElement(Bind, {
|
|
127
123
|
name: "accessLevel"
|
|
128
|
-
}, /*#__PURE__*/React.createElement(Select, {
|
|
129
|
-
label: t(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["Access Level"])))
|
|
130
|
-
}, /*#__PURE__*/React.createElement("option", {
|
|
124
|
+
}, /*#__PURE__*/React.createElement(Select, null, /*#__PURE__*/React.createElement("option", {
|
|
131
125
|
value: NO_ACCESS
|
|
132
|
-
}, t
|
|
126
|
+
}, t`No access`), /*#__PURE__*/React.createElement("option", {
|
|
133
127
|
value: FULL_ACCESS
|
|
134
|
-
}, t
|
|
128
|
+
}, t`Full access`), /*#__PURE__*/React.createElement("option", {
|
|
135
129
|
value: CUSTOM_ACCESS
|
|
136
|
-
}, t
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
130
|
+
}, t`Custom access`))))), data.accessLevel === CUSTOM_ACCESS && /*#__PURE__*/React.createElement("div", {
|
|
131
|
+
className: "wby-mt-lg"
|
|
132
|
+
}, /*#__PURE__*/React.createElement(PermissionsGroup, {
|
|
133
|
+
title: t`API Keys`
|
|
141
134
|
}, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Cell, {
|
|
142
135
|
span: 12
|
|
143
|
-
}, /*#__PURE__*/React.createElement(Typography, {
|
|
144
|
-
use: "overline"
|
|
145
|
-
}, t(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["API Keys"]))))), /*#__PURE__*/React.createElement(Cell, {
|
|
146
|
-
span: 12
|
|
147
136
|
}, /*#__PURE__*/React.createElement(Bind, {
|
|
148
137
|
name: "apiKeyAccessScope"
|
|
149
138
|
}, /*#__PURE__*/React.createElement(Select, {
|
|
150
|
-
label: t
|
|
139
|
+
label: t`Access Scope`,
|
|
140
|
+
disabled: cannotUseAacl
|
|
151
141
|
}, /*#__PURE__*/React.createElement("option", {
|
|
152
142
|
value: NO_ACCESS
|
|
153
|
-
}, t
|
|
143
|
+
}, t`No access`), /*#__PURE__*/React.createElement("option", {
|
|
154
144
|
value: FULL_ACCESS
|
|
155
|
-
}, t
|
|
156
|
-
|
|
157
|
-
style: {
|
|
158
|
-
marginTop: 10
|
|
159
|
-
}
|
|
145
|
+
}, t`Full access`)))))), /*#__PURE__*/React.createElement(PermissionsGroup, {
|
|
146
|
+
title: t`Roles`
|
|
160
147
|
}, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Cell, {
|
|
161
148
|
span: 12
|
|
162
|
-
}, /*#__PURE__*/React.createElement(Typography, {
|
|
163
|
-
use: "overline"
|
|
164
|
-
}, t(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["Groups"]))))), /*#__PURE__*/React.createElement(Cell, {
|
|
165
|
-
span: 12
|
|
166
149
|
}, /*#__PURE__*/React.createElement(Bind, {
|
|
167
150
|
name: "groupAccessScope"
|
|
168
151
|
}, /*#__PURE__*/React.createElement(Select, {
|
|
169
|
-
label: t
|
|
152
|
+
label: t`Access Scope`,
|
|
153
|
+
disabled: cannotUseAacl
|
|
154
|
+
}, /*#__PURE__*/React.createElement("option", {
|
|
155
|
+
value: NO_ACCESS
|
|
156
|
+
}, t`No access`), /*#__PURE__*/React.createElement("option", {
|
|
157
|
+
value: FULL_ACCESS
|
|
158
|
+
}, t`Full access`)))))), teams && /*#__PURE__*/React.createElement(PermissionsGroup, {
|
|
159
|
+
title: t`Teams`
|
|
160
|
+
}, /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Cell, {
|
|
161
|
+
span: 12
|
|
162
|
+
}, /*#__PURE__*/React.createElement(Bind, {
|
|
163
|
+
name: "teamAccessScope"
|
|
164
|
+
}, /*#__PURE__*/React.createElement(Select, {
|
|
165
|
+
label: t`Access Scope`,
|
|
166
|
+
disabled: cannotUseAacl
|
|
170
167
|
}, /*#__PURE__*/React.createElement("option", {
|
|
171
168
|
value: NO_ACCESS
|
|
172
|
-
}, t
|
|
169
|
+
}, t`No access`), /*#__PURE__*/React.createElement("option", {
|
|
173
170
|
value: FULL_ACCESS
|
|
174
|
-
}, t
|
|
171
|
+
}, t`Full access`))))))));
|
|
175
172
|
});
|
|
176
|
-
};
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
//# sourceMappingURL=SecurityPermissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Fragment","useCallback","useMemo","Grid","Cell","Select","i18n","CannotUseAaclAlert","PermissionInfo","gridWithPaddingClass","PermissionsGroup","Form","useSecurity","useWcp","t","ns","SECURITY","SECURITY_FULL_ACCESS","SECURITY_GROUP_ACCESS","SECURITY_TEAM_ACCESS","SECURITY_API_KEY_ACCESS","FULL_ACCESS","NO_ACCESS","CUSTOM_ACCESS","SecurityPermissions","value","onChange","getPermission","wcp","cannotUseAacl","teams","canUseTeams","onFormChange","formData","newValue","Array","isArray","filter","item","name","startsWith","permissions","accessLevel","push","groupAccessScope","teamAccessScope","apiKeyAccessScope","length","hasFullAccess","find","data","hasGroupAccess","hasTeamAccess","hasApiKeyAccess","createElement","Bind","className","span","title","label","disabled"],"sources":["SecurityPermissions.tsx"],"sourcesContent":["import React, { Fragment, useCallback, useMemo } from \"react\";\nimport { Grid, Cell } from \"@webiny/ui/Grid\";\nimport { Select } from \"@webiny/ui/Select\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport {\n CannotUseAaclAlert,\n PermissionInfo,\n gridWithPaddingClass,\n PermissionsGroup\n} from \"@webiny/app-admin/components/Permissions\";\nimport { Form } from \"@webiny/form\";\nimport type { SecurityPermission } from \"@webiny/app-security/types\";\nimport { useSecurity } from \"@webiny/app-security\";\nimport type { AaclPermission } from \"@webiny/app-admin\";\nimport { useWcp } from \"@webiny/app-admin\";\n\nconst t = i18n.ns(\"app-security-admin-users/plugins/permissionRenderer\");\n\nconst SECURITY = \"security\";\nconst SECURITY_FULL_ACCESS = `${SECURITY}.*`;\nconst SECURITY_GROUP_ACCESS = `${SECURITY}.group`;\nconst SECURITY_TEAM_ACCESS = `${SECURITY}.team`;\nconst SECURITY_API_KEY_ACCESS = `${SECURITY}.apiKey`;\nconst FULL_ACCESS = \"full\";\nconst NO_ACCESS = \"no\";\nconst CUSTOM_ACCESS = \"custom\";\n\ninterface SecurityPermissionsProps {\n value: SecurityPermission[];\n onChange: (value: SecurityPermission[]) => void;\n}\n\nexport const SecurityPermissions = ({ value, onChange }: SecurityPermissionsProps) => {\n const { getPermission } = useSecurity();\n const wcp = useWcp();\n\n // We disable form elements for custom permissions if AACL cannot be used.\n const cannotUseAacl = useMemo(() => {\n return !getPermission<AaclPermission>(\"aacl\", true);\n }, []);\n\n const teams = wcp.canUseTeams();\n\n const onFormChange = useCallback(\n (formData: SecurityPermission) => {\n let newValue: SecurityPermission[] = [];\n if (Array.isArray(value)) {\n // Let's just filter out the `security*` permission objects, it's easier to build new ones from scratch.\n newValue = value.filter(item => !item.name.startsWith(SECURITY));\n }\n\n const permissions = [];\n if (formData.accessLevel === FULL_ACCESS) {\n permissions.push({ name: SECURITY_FULL_ACCESS });\n } else if (formData.accessLevel === CUSTOM_ACCESS) {\n if (formData.groupAccessScope === FULL_ACCESS) {\n permissions.push({ name: SECURITY_GROUP_ACCESS });\n }\n\n if (formData.teamAccessScope === FULL_ACCESS) {\n permissions.push({ name: SECURITY_TEAM_ACCESS });\n }\n\n if (formData.apiKeyAccessScope === FULL_ACCESS) {\n permissions.push({ name: SECURITY_API_KEY_ACCESS });\n }\n }\n\n if (permissions && permissions.length) {\n newValue.push(...permissions);\n }\n\n onChange(newValue);\n },\n [value]\n );\n\n const formData = useMemo(() => {\n if (!Array.isArray(value)) {\n return { accessLevel: NO_ACCESS };\n }\n\n const hasFullAccess = value.find(\n item => item.name === SECURITY_FULL_ACCESS || item.name === \"*\"\n );\n\n if (hasFullAccess) {\n return { accessLevel: FULL_ACCESS };\n }\n\n const permissions = value.filter(item => item.name.startsWith(SECURITY));\n if (permissions.length === 0) {\n return { accessLevel: NO_ACCESS };\n }\n\n const data = {\n accessLevel: CUSTOM_ACCESS,\n groupAccessScope: NO_ACCESS,\n teamAccessScope: NO_ACCESS,\n apiKeyAccessScope: NO_ACCESS\n };\n\n const hasGroupAccess = permissions.find(item => item.name === SECURITY_GROUP_ACCESS);\n if (hasGroupAccess) {\n data.groupAccessScope = FULL_ACCESS;\n }\n const hasTeamAccess = permissions.find(item => item.name === SECURITY_TEAM_ACCESS);\n if (hasTeamAccess) {\n data.teamAccessScope = FULL_ACCESS;\n }\n\n const hasApiKeyAccess = permissions.find(item => item.name === SECURITY_API_KEY_ACCESS);\n if (hasApiKeyAccess) {\n data.apiKeyAccessScope = FULL_ACCESS;\n }\n\n return data;\n }, []);\n\n return (\n <Form data={formData} onChange={onFormChange}>\n {({ data, Bind }) => {\n return (\n <Fragment>\n <Grid className={gridWithPaddingClass}>\n <Cell span={12}>\n {data.accessLevel === \"custom\" && cannotUseAacl && (\n <CannotUseAaclAlert />\n )}\n </Cell>\n </Grid>\n <Grid className={gridWithPaddingClass}>\n <Cell span={6}>\n <PermissionInfo title={t`Access Level`} />\n </Cell>\n <Cell span={6}>\n <Bind name={\"accessLevel\"}>\n <Select>\n <option value={NO_ACCESS}>{t`No access`}</option>\n <option value={FULL_ACCESS}>{t`Full access`}</option>\n <option value={CUSTOM_ACCESS}>{t`Custom access`}</option>\n </Select>\n </Bind>\n </Cell>\n </Grid>\n {data.accessLevel === CUSTOM_ACCESS && (\n <div className={\"wby-mt-lg\"}>\n <PermissionsGroup title={t`API Keys`}>\n <Grid>\n <Cell span={12}>\n <Bind name={\"apiKeyAccessScope\"}>\n <Select\n label={t`Access Scope`}\n disabled={cannotUseAacl}\n >\n <option\n value={NO_ACCESS}\n >{t`No access`}</option>\n <option\n value={FULL_ACCESS}\n >{t`Full access`}</option>\n </Select>\n </Bind>\n </Cell>\n </Grid>\n </PermissionsGroup>\n <PermissionsGroup title={t`Roles`}>\n <Grid>\n <Cell span={12}>\n <Bind name={\"groupAccessScope\"}>\n <Select\n label={t`Access Scope`}\n disabled={cannotUseAacl}\n >\n <option\n value={NO_ACCESS}\n >{t`No access`}</option>\n <option\n value={FULL_ACCESS}\n >{t`Full access`}</option>\n </Select>\n </Bind>\n </Cell>\n </Grid>\n </PermissionsGroup>\n {teams && (\n <PermissionsGroup title={t`Teams`}>\n <Grid>\n <Cell span={12}>\n <Bind name={\"teamAccessScope\"}>\n <Select\n label={t`Access Scope`}\n disabled={cannotUseAacl}\n >\n <option\n value={NO_ACCESS}\n >{t`No access`}</option>\n <option\n value={FULL_ACCESS}\n >{t`Full access`}</option>\n </Select>\n </Bind>\n </Cell>\n </Grid>\n </PermissionsGroup>\n )}\n </div>\n )}\n </Fragment>\n );\n }}\n </Form>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
|
|
2
|
-
|
|
3
|
-
var _templateObject, _templateObject2;
|
|
4
|
-
|
|
5
1
|
import React from "react";
|
|
6
2
|
import { i18n } from "@webiny/app/i18n";
|
|
7
|
-
import {
|
|
8
|
-
import { ReactComponent as
|
|
3
|
+
import { Accordion } from "@webiny/admin-ui";
|
|
4
|
+
import { ReactComponent as PermissionsIcon } from "@webiny/icons/security.svg";
|
|
9
5
|
import { SecurityPermissions } from "./SecurityPermissions";
|
|
10
6
|
import { PermissionRendererPlugin } from "@webiny/app-admin/plugins/PermissionRendererPlugin";
|
|
11
|
-
|
|
7
|
+
const t = i18n.ns("app-security-admin-users/plugins/permissionRenderer");
|
|
12
8
|
export default new PermissionRendererPlugin({
|
|
13
|
-
render
|
|
14
|
-
return /*#__PURE__*/React.createElement(
|
|
15
|
-
icon: /*#__PURE__*/React.createElement(
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
render(props) {
|
|
10
|
+
return /*#__PURE__*/React.createElement(Accordion.Item, {
|
|
11
|
+
icon: /*#__PURE__*/React.createElement(Accordion.Item.Icon, {
|
|
12
|
+
icon: /*#__PURE__*/React.createElement(PermissionsIcon, null),
|
|
13
|
+
label: "Security Permissions"
|
|
14
|
+
}),
|
|
15
|
+
title: t`Security`,
|
|
16
|
+
description: t`Manage Security app access permissions.`,
|
|
18
17
|
"data-testid": "permission.security"
|
|
19
18
|
}, /*#__PURE__*/React.createElement(SecurityPermissions, props));
|
|
20
19
|
}
|
|
21
|
-
});
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","i18n","Accordion","ReactComponent","PermissionsIcon","SecurityPermissions","PermissionRendererPlugin","t","ns","render","props","createElement","Item","icon","Icon","label","title","description"],"sources":["index.tsx"],"sourcesContent":["import React from \"react\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { Accordion } from \"@webiny/admin-ui\";\nimport { ReactComponent as PermissionsIcon } from \"@webiny/icons/security.svg\";\nimport { SecurityPermissions } from \"./SecurityPermissions\";\nimport { PermissionRendererPlugin } from \"@webiny/app-admin/plugins/PermissionRendererPlugin\";\n\nconst t = i18n.ns(\"app-security-admin-users/plugins/permissionRenderer\");\n\nexport default new PermissionRendererPlugin({\n render(props) {\n return (\n <Accordion.Item\n icon={\n <Accordion.Item.Icon\n icon={<PermissionsIcon />}\n label={\"Security Permissions\"}\n />\n }\n title={t`Security`}\n description={t`Manage Security app access permissions.`}\n data-testid={\"permission.security\"}\n >\n <SecurityPermissions {...props} />\n </Accordion.Item>\n );\n }\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,kBAAkB;AACvC,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,cAAc,IAAIC,eAAe,QAAQ,4BAA4B;AAC9E,SAASC,mBAAmB;AAC5B,SAASC,wBAAwB,QAAQ,oDAAoD;AAE7F,MAAMC,CAAC,GAAGN,IAAI,CAACO,EAAE,CAAC,qDAAqD,CAAC;AAExE,eAAe,IAAIF,wBAAwB,CAAC;EACxCG,MAAMA,CAACC,KAAK,EAAE;IACV,oBACIV,KAAA,CAAAW,aAAA,CAACT,SAAS,CAACU,IAAI;MACXC,IAAI,eACAb,KAAA,CAAAW,aAAA,CAACT,SAAS,CAACU,IAAI,CAACE,IAAI;QAChBD,IAAI,eAAEb,KAAA,CAAAW,aAAA,CAACP,eAAe,MAAE,CAAE;QAC1BW,KAAK,EAAE;MAAuB,CACjC,CACJ;MACDC,KAAK,EAAET,CAAC,UAAW;MACnBU,WAAW,EAAEV,CAAC,yCAA0C;MACxD,eAAa;IAAsB,gBAEnCP,KAAA,CAAAW,aAAA,CAACN,mBAAmB,EAAKK,KAAQ,CACrB,CAAC;EAEzB;AACJ,CAAC,CAAC","ignoreList":[]}
|
package/plugins/routes.d.ts
CHANGED
package/plugins/routes.js
CHANGED
|
@@ -6,19 +6,17 @@ import { SecureRoute } from "@webiny/app-security/components";
|
|
|
6
6
|
import { Groups } from "../ui/views/Groups";
|
|
7
7
|
import { ApiKeys } from "../ui/views/ApiKeys";
|
|
8
8
|
import { Permission } from "./constants";
|
|
9
|
-
|
|
9
|
+
const plugins = [{
|
|
10
10
|
name: "route-security-groups",
|
|
11
11
|
type: "route",
|
|
12
12
|
route: /*#__PURE__*/React.createElement(Route, {
|
|
13
13
|
exact: true,
|
|
14
14
|
path: "/access-management/groups",
|
|
15
|
-
render:
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}), /*#__PURE__*/React.createElement(Groups, null)));
|
|
21
|
-
}
|
|
15
|
+
render: () => /*#__PURE__*/React.createElement(SecureRoute, {
|
|
16
|
+
permission: Permission.Groups
|
|
17
|
+
}, /*#__PURE__*/React.createElement(AdminLayout, null, /*#__PURE__*/React.createElement(Helmet, {
|
|
18
|
+
title: "Access Management - Groups"
|
|
19
|
+
}), /*#__PURE__*/React.createElement(Groups, null)))
|
|
22
20
|
})
|
|
23
21
|
}, {
|
|
24
22
|
name: "route-security-api-keys",
|
|
@@ -26,13 +24,13 @@ var plugins = [{
|
|
|
26
24
|
route: /*#__PURE__*/React.createElement(Route, {
|
|
27
25
|
exact: true,
|
|
28
26
|
path: "/access-management/api-keys",
|
|
29
|
-
render:
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}, /*#__PURE__*/React.createElement(ApiKeys, null)));
|
|
35
|
-
}
|
|
27
|
+
render: () => /*#__PURE__*/React.createElement(SecureRoute, {
|
|
28
|
+
permission: Permission.ApiKeys
|
|
29
|
+
}, /*#__PURE__*/React.createElement(AdminLayout, {
|
|
30
|
+
title: "Access Management - API Keys"
|
|
31
|
+
}, /*#__PURE__*/React.createElement(ApiKeys, null)))
|
|
36
32
|
})
|
|
37
33
|
}];
|
|
38
|
-
export default plugins;
|
|
34
|
+
export default plugins;
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=routes.js.map
|