@webiny/app-security-access-management 0.0.0-ee-vpcs.549378cf03
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/LICENSE +21 -0
- package/README.md +115 -0
- package/components/GroupAutocomplete/graphql.d.ts +1 -0
- package/components/GroupAutocomplete/graphql.js +17 -0
- package/components/GroupAutocomplete/graphql.js.map +1 -0
- package/components/GroupAutocomplete/index.d.ts +5 -0
- package/components/GroupAutocomplete/index.js +31 -0
- package/components/GroupAutocomplete/index.js.map +1 -0
- package/components/NotAuthorizedError/NotAuthorizedError.d.ts +2 -0
- package/components/NotAuthorizedError/NotAuthorizedError.js +71 -0
- package/components/NotAuthorizedError/NotAuthorizedError.js.map +1 -0
- package/components/NotAuthorizedError/SecureRouteError.svg +1 -0
- package/components/NotAuthorizedError/index.d.ts +1 -0
- package/components/NotAuthorizedError/index.js +13 -0
- package/components/NotAuthorizedError/index.js.map +1 -0
- package/index.d.ts +9 -0
- package/index.js +80 -0
- package/index.js.map +1 -0
- package/package.json +65 -0
- package/plugins/constants.d.ts +4 -0
- package/plugins/constants.js +13 -0
- package/plugins/constants.js.map +1 -0
- package/plugins/index.d.ts +3 -0
- package/plugins/index.js +20 -0
- package/plugins/index.js.map +1 -0
- package/plugins/installation.d.ts +3 -0
- package/plugins/installation.js +121 -0
- package/plugins/installation.js.map +1 -0
- package/plugins/permissionRenderer/SecurityPermissions.d.ts +8 -0
- package/plugins/permissionRenderer/SecurityPermissions.js +199 -0
- package/plugins/permissionRenderer/SecurityPermissions.js.map +1 -0
- package/plugins/permissionRenderer/index.d.ts +3 -0
- package/plugins/permissionRenderer/index.js +39 -0
- package/plugins/permissionRenderer/index.js.map +1 -0
- package/plugins/routes.d.ts +3 -0
- package/plugins/routes.js +56 -0
- package/plugins/routes.js.map +1 -0
- package/plugins/secureRouteError.d.ts +7 -0
- package/plugins/secureRouteError.js +22 -0
- package/plugins/secureRouteError.js.map +1 -0
- package/types.d.ts +15 -0
- package/types.js +5 -0
- package/types.js.map +1 -0
- package/ui/elements/GroupAutocompleteElement.d.ts +6 -0
- package/ui/elements/GroupAutocompleteElement.js +64 -0
- package/ui/elements/GroupAutocompleteElement.js.map +1 -0
- package/ui/views/ApiKeys/ApiKeyForm.d.ts +5 -0
- package/ui/views/ApiKeys/ApiKeyForm.js +288 -0
- package/ui/views/ApiKeys/ApiKeyForm.js.map +1 -0
- package/ui/views/ApiKeys/ApiKeys.d.ts +8 -0
- package/ui/views/ApiKeys/ApiKeys.js +26 -0
- package/ui/views/ApiKeys/ApiKeys.js.map +1 -0
- package/ui/views/ApiKeys/ApiKeysDataList.d.ts +5 -0
- package/ui/views/ApiKeys/ApiKeysDataList.js +232 -0
- package/ui/views/ApiKeys/ApiKeysDataList.js.map +1 -0
- package/ui/views/ApiKeys/graphql.d.ts +5 -0
- package/ui/views/ApiKeys/graphql.js +26 -0
- package/ui/views/ApiKeys/graphql.js.map +1 -0
- package/ui/views/ApiKeys/index.d.ts +1 -0
- package/ui/views/ApiKeys/index.js +18 -0
- package/ui/views/ApiKeys/index.js.map +1 -0
- package/ui/views/ApiKeys/utils.d.ts +2 -0
- package/ui/views/ApiKeys/utils.js +18 -0
- package/ui/views/ApiKeys/utils.js.map +1 -0
- package/ui/views/Groups/Groups.d.ts +8 -0
- package/ui/views/Groups/Groups.js +26 -0
- package/ui/views/Groups/Groups.js.map +1 -0
- package/ui/views/Groups/GroupsDataList.d.ts +5 -0
- package/ui/views/Groups/GroupsDataList.js +239 -0
- package/ui/views/Groups/GroupsDataList.js.map +1 -0
- package/ui/views/Groups/GroupsForm.d.ts +5 -0
- package/ui/views/Groups/GroupsForm.js +278 -0
- package/ui/views/Groups/GroupsForm.js.map +1 -0
- package/ui/views/Groups/graphql.d.ts +5 -0
- package/ui/views/Groups/graphql.js +26 -0
- package/ui/views/Groups/graphql.js.map +1 -0
- package/ui/views/Groups/index.d.ts +1 -0
- package/ui/views/Groups/index.js +18 -0
- package/ui/views/Groups/index.js.map +1 -0
- package/ui/views/utils.d.ts +3 -0
- package/ui/views/utils.js +26 -0
- package/ui/views/utils.js.map +1 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.default = void 0;
|
|
11
|
+
|
|
12
|
+
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
|
|
13
|
+
|
|
14
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
15
|
+
|
|
16
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
17
|
+
|
|
18
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
19
|
+
|
|
20
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
21
|
+
|
|
22
|
+
var _graphqlTag = _interopRequireDefault(require("graphql-tag"));
|
|
23
|
+
|
|
24
|
+
var _reactHooks = require("@apollo/react-hooks");
|
|
25
|
+
|
|
26
|
+
var _Alert = require("@webiny/ui/Alert");
|
|
27
|
+
|
|
28
|
+
var _Progress = require("@webiny/ui/Progress");
|
|
29
|
+
|
|
30
|
+
var _SimpleForm = require("@webiny/app-admin/components/SimpleForm");
|
|
31
|
+
|
|
32
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
33
|
+
|
|
34
|
+
var _templateObject, _templateObject2;
|
|
35
|
+
|
|
36
|
+
var SimpleFormPlaceholder = /*#__PURE__*/(0, _styled.default)("div", {
|
|
37
|
+
target: "evolwsn0",
|
|
38
|
+
label: "SimpleFormPlaceholder"
|
|
39
|
+
})({
|
|
40
|
+
minHeight: 300,
|
|
41
|
+
minWidth: 400
|
|
42
|
+
});
|
|
43
|
+
var IS_INSTALLED = (0, _graphqlTag.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n query IsSecurityInstalled {\n security {\n version\n }\n }\n"])));
|
|
44
|
+
var INSTALL = (0, _graphqlTag.default)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n mutation InstallSecurity {\n security {\n install {\n data\n error {\n code\n message\n }\n }\n }\n }\n"])));
|
|
45
|
+
|
|
46
|
+
var SecurityInstaller = function SecurityInstaller(_ref) {
|
|
47
|
+
var onInstalled = _ref.onInstalled;
|
|
48
|
+
var client = (0, _reactHooks.useApolloClient)();
|
|
49
|
+
|
|
50
|
+
var _useState = (0, _react.useState)(null),
|
|
51
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
52
|
+
error = _useState2[0],
|
|
53
|
+
setError = _useState2[1];
|
|
54
|
+
|
|
55
|
+
(0, _react.useEffect)(function () {
|
|
56
|
+
client.mutate({
|
|
57
|
+
mutation: INSTALL
|
|
58
|
+
}).then(function (_ref2) {
|
|
59
|
+
var data = _ref2.data;
|
|
60
|
+
var error = data.security.install.error;
|
|
61
|
+
|
|
62
|
+
if (error) {
|
|
63
|
+
setError(error.message);
|
|
64
|
+
return;
|
|
65
|
+
} // Just so the user sees the actual message.
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
setTimeout(onInstalled, 3000);
|
|
69
|
+
});
|
|
70
|
+
}, []);
|
|
71
|
+
var label = error ? /*#__PURE__*/_react.default.createElement(_Alert.Alert, {
|
|
72
|
+
title: "Something went wrong",
|
|
73
|
+
type: "danger"
|
|
74
|
+
}, error) : "Installing Security...";
|
|
75
|
+
return /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleForm, null, /*#__PURE__*/_react.default.createElement(_Progress.CircularProgress, {
|
|
76
|
+
label: label
|
|
77
|
+
}), /*#__PURE__*/_react.default.createElement(_SimpleForm.SimpleFormContent, null, /*#__PURE__*/_react.default.createElement(SimpleFormPlaceholder, null)));
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
var plugin = {
|
|
81
|
+
name: "admin-installation-security",
|
|
82
|
+
type: "admin-installation",
|
|
83
|
+
title: "Security",
|
|
84
|
+
dependencies: ["admin-installation-tenancy"],
|
|
85
|
+
secure: false,
|
|
86
|
+
getInstalledVersion: function getInstalledVersion(_ref3) {
|
|
87
|
+
return (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee() {
|
|
88
|
+
var client, _yield$client$query, data;
|
|
89
|
+
|
|
90
|
+
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
|
|
91
|
+
while (1) {
|
|
92
|
+
switch (_context.prev = _context.next) {
|
|
93
|
+
case 0:
|
|
94
|
+
client = _ref3.client;
|
|
95
|
+
_context.next = 3;
|
|
96
|
+
return client.query({
|
|
97
|
+
query: IS_INSTALLED
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
case 3:
|
|
101
|
+
_yield$client$query = _context.sent;
|
|
102
|
+
data = _yield$client$query.data;
|
|
103
|
+
return _context.abrupt("return", data.security.version);
|
|
104
|
+
|
|
105
|
+
case 6:
|
|
106
|
+
case "end":
|
|
107
|
+
return _context.stop();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}, _callee);
|
|
111
|
+
}))();
|
|
112
|
+
},
|
|
113
|
+
render: function render(_ref4) {
|
|
114
|
+
var onInstalled = _ref4.onInstalled;
|
|
115
|
+
return /*#__PURE__*/_react.default.createElement(SecurityInstaller, {
|
|
116
|
+
onInstalled: onInstalled
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
var _default = plugin;
|
|
121
|
+
exports.default = _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SimpleFormPlaceholder","styled","minHeight","minWidth","IS_INSTALLED","gql","INSTALL","SecurityInstaller","onInstalled","client","useApolloClient","useState","error","setError","useEffect","mutate","mutation","then","data","security","install","message","setTimeout","label","plugin","name","type","title","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 { 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: React.FC<SecurityInstallerProps> = ({ onInstalled }) => {\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;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAGA,IAAMA,qBAAqB,oBAAGC,eAAH;EAAA;EAAA;AAAA,GAAc;EACrCC,SAAS,EAAE,GAD0B;EAErCC,QAAQ,EAAE;AAF2B,CAAd,CAA3B;AAKA,IAAMC,YAAY,OAAGC,mBAAH,kLAAlB;AAQA,IAAMC,OAAO,OAAGD,mBAAH,6TAAb;;AAiBA,IAAME,iBAAmD,GAAG,SAAtDA,iBAAsD,OAAqB;EAAA,IAAlBC,WAAkB,QAAlBA,WAAkB;EAC7E,IAAMC,MAAM,GAAG,IAAAC,2BAAA,GAAf;;EACA,gBAA0B,IAAAC,eAAA,EAAS,IAAT,CAA1B;EAAA;EAAA,IAAOC,KAAP;EAAA,IAAcC,QAAd;;EAEA,IAAAC,gBAAA,EAAU,YAAM;IACZL,MAAM,CAACM,MAAP,CAAc;MAAEC,QAAQ,EAAEV;IAAZ,CAAd,EAAqCW,IAArC,CAA0C,iBAAc;MAAA,IAAXC,IAAW,SAAXA,IAAW;MACpD,IAAQN,KAAR,GAAkBM,IAAI,CAACC,QAAL,CAAcC,OAAhC,CAAQR,KAAR;;MACA,IAAIA,KAAJ,EAAW;QACPC,QAAQ,CAACD,KAAK,CAACS,OAAP,CAAR;QACA;MACH,CALmD,CAOpD;;;MACAC,UAAU,CAACd,WAAD,EAAc,IAAd,CAAV;IACH,CATD;EAUH,CAXD,EAWG,EAXH;EAaA,IAAMe,KAAK,GAAGX,KAAK,gBACf,6BAAC,YAAD;IAAO,KAAK,wBAAZ;IAAsC,IAAI,EAAE;EAA5C,GACKA,KADL,CADe,2BAAnB;EAQA,oBACI,6BAAC,sBAAD,qBACI,6BAAC,0BAAD;IAAkB,KAAK,EAAEW;EAAzB,EADJ,eAEI,6BAAC,6BAAD,qBACI,6BAAC,qBAAD,OADJ,CAFJ,CADJ;AAQH,CAjCD;;AAmCA,IAAMC,MAA+B,GAAG;EACpCC,IAAI,EAAE,6BAD8B;EAEpCC,IAAI,EAAE,oBAF8B;EAGpCC,KAAK,YAH+B;EAIpCC,YAAY,EAAE,8BAJsB;EAKpCC,MAAM,EAAE,KAL4B;EAM9BC,mBAN8B,sCAME;IAAA;MAAA;;MAAA;QAAA;UAAA;YAAA;cAAVrB,MAAU,SAAVA,MAAU;cAAA;cAAA,OACXA,MAAM,CAACsB,KAAP,CAAa;gBAAEA,KAAK,EAAE3B;cAAT,CAAb,CADW;;YAAA;cAAA;cAC1Bc,IAD0B,uBAC1BA,IAD0B;cAAA,iCAE3BA,IAAI,CAACC,QAAL,CAAca,OAFa;;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA;EAGrC,CATmC;EAUpCC,MAVoC,yBAUZ;IAAA,IAAfzB,WAAe,SAAfA,WAAe;IACpB,oBAAO,6BAAC,iBAAD;MAAmB,WAAW,EAAEA;IAAhC,EAAP;EACH;AAZmC,CAAxC;eAeegB,M"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { SecurityPermission } from "@webiny/app-security/types";
|
|
3
|
+
interface SecurityPermissionsProps {
|
|
4
|
+
value: SecurityPermission[];
|
|
5
|
+
onChange: (value: SecurityPermission[]) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const SecurityPermissions: React.FC<SecurityPermissionsProps>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports.SecurityPermissions = void 0;
|
|
11
|
+
|
|
12
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
13
|
+
|
|
14
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
15
|
+
|
|
16
|
+
var _Grid = require("@webiny/ui/Grid");
|
|
17
|
+
|
|
18
|
+
var _Select = require("@webiny/ui/Select");
|
|
19
|
+
|
|
20
|
+
var _i18n = require("@webiny/app/i18n");
|
|
21
|
+
|
|
22
|
+
var _Permissions = require("@webiny/app-admin/components/Permissions");
|
|
23
|
+
|
|
24
|
+
var _form = require("@webiny/form");
|
|
25
|
+
|
|
26
|
+
var _Elevation = require("@webiny/ui/Elevation");
|
|
27
|
+
|
|
28
|
+
var _Typography = require("@webiny/ui/Typography");
|
|
29
|
+
|
|
30
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13;
|
|
31
|
+
|
|
32
|
+
var t = _i18n.i18n.ns("app-security-admin-users/plugins/permissionRenderer");
|
|
33
|
+
|
|
34
|
+
var SECURITY = "security";
|
|
35
|
+
var SECURITY_FULL_ACCESS = "".concat(SECURITY, ".*");
|
|
36
|
+
var SECURITY_GROUP_ACCESS = "".concat(SECURITY, ".group");
|
|
37
|
+
var SECURITY_API_KEY_ACCESS = "".concat(SECURITY, ".apiKey");
|
|
38
|
+
var FULL_ACCESS = "full";
|
|
39
|
+
var NO_ACCESS = "no";
|
|
40
|
+
var CUSTOM_ACCESS = "custom";
|
|
41
|
+
|
|
42
|
+
var SecurityPermissions = function SecurityPermissions(_ref) {
|
|
43
|
+
var value = _ref.value,
|
|
44
|
+
onChange = _ref.onChange;
|
|
45
|
+
var onFormChange = (0, _react.useCallback)(function (data) {
|
|
46
|
+
var newValue = [];
|
|
47
|
+
|
|
48
|
+
if (Array.isArray(value)) {
|
|
49
|
+
// Let's just filter out the `security*` permission objects, it's easier to build new ones from scratch.
|
|
50
|
+
newValue = value.filter(function (item) {
|
|
51
|
+
return !item.name.startsWith(SECURITY);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
var permissions = [];
|
|
56
|
+
|
|
57
|
+
if (data.accessLevel === FULL_ACCESS) {
|
|
58
|
+
permissions.push({
|
|
59
|
+
name: SECURITY_FULL_ACCESS
|
|
60
|
+
});
|
|
61
|
+
} else if (data.accessLevel === CUSTOM_ACCESS) {
|
|
62
|
+
if (data.groupAccessScope === FULL_ACCESS) {
|
|
63
|
+
permissions.push({
|
|
64
|
+
name: SECURITY_GROUP_ACCESS
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (data.apiKeyAccessScope === FULL_ACCESS) {
|
|
69
|
+
permissions.push({
|
|
70
|
+
name: SECURITY_API_KEY_ACCESS
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (permissions && permissions.length) {
|
|
76
|
+
var _newValue;
|
|
77
|
+
|
|
78
|
+
(_newValue = newValue).push.apply(_newValue, permissions);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
onChange(newValue);
|
|
82
|
+
}, [value]);
|
|
83
|
+
var formData = (0, _react.useMemo)(function () {
|
|
84
|
+
if (!Array.isArray(value)) {
|
|
85
|
+
return {
|
|
86
|
+
accessLevel: NO_ACCESS
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
var hasFullAccess = value.find(function (item) {
|
|
91
|
+
return item.name === SECURITY_FULL_ACCESS || item.name === "*";
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
if (hasFullAccess) {
|
|
95
|
+
return {
|
|
96
|
+
accessLevel: FULL_ACCESS
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
var permissions = value.filter(function (item) {
|
|
101
|
+
return item.name.startsWith(SECURITY);
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
if (permissions.length === 0) {
|
|
105
|
+
return {
|
|
106
|
+
accessLevel: NO_ACCESS
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
var data = {
|
|
111
|
+
accessLevel: CUSTOM_ACCESS,
|
|
112
|
+
groupAccessScope: NO_ACCESS,
|
|
113
|
+
apiKeyAccessScope: NO_ACCESS
|
|
114
|
+
};
|
|
115
|
+
var hasGroupAccess = permissions.find(function (item) {
|
|
116
|
+
return item.name === SECURITY_GROUP_ACCESS;
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
if (hasGroupAccess) {
|
|
120
|
+
data.groupAccessScope = FULL_ACCESS;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
var hasApiKeyAccess = permissions.find(function (item) {
|
|
124
|
+
return item.name === SECURITY_API_KEY_ACCESS;
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
if (hasApiKeyAccess) {
|
|
128
|
+
data.apiKeyAccessScope = FULL_ACCESS;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return data;
|
|
132
|
+
}, []);
|
|
133
|
+
return /*#__PURE__*/_react.default.createElement(_form.Form, {
|
|
134
|
+
data: formData,
|
|
135
|
+
onChange: onFormChange
|
|
136
|
+
}, function (_ref2) {
|
|
137
|
+
var data = _ref2.data,
|
|
138
|
+
Bind = _ref2.Bind;
|
|
139
|
+
return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_Grid.Grid, {
|
|
140
|
+
className: _Permissions.gridNoPaddingClass
|
|
141
|
+
}, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
142
|
+
span: 6
|
|
143
|
+
}, /*#__PURE__*/_react.default.createElement(_Permissions.PermissionInfo, {
|
|
144
|
+
title: t(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["Access Level"])))
|
|
145
|
+
})), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
146
|
+
span: 6
|
|
147
|
+
}, /*#__PURE__*/_react.default.createElement(Bind, {
|
|
148
|
+
name: "accessLevel"
|
|
149
|
+
}, /*#__PURE__*/_react.default.createElement(_Select.Select, {
|
|
150
|
+
label: t(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["Access Level"])))
|
|
151
|
+
}, /*#__PURE__*/_react.default.createElement("option", {
|
|
152
|
+
value: NO_ACCESS
|
|
153
|
+
}, t(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["No access"])))), /*#__PURE__*/_react.default.createElement("option", {
|
|
154
|
+
value: FULL_ACCESS
|
|
155
|
+
}, t(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["Full access"])))), /*#__PURE__*/_react.default.createElement("option", {
|
|
156
|
+
value: CUSTOM_ACCESS
|
|
157
|
+
}, t(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["Custom access"])))))))), data.accessLevel === CUSTOM_ACCESS && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Elevation.Elevation, {
|
|
158
|
+
z: 1,
|
|
159
|
+
style: {
|
|
160
|
+
marginTop: 10
|
|
161
|
+
}
|
|
162
|
+
}, /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
163
|
+
span: 12
|
|
164
|
+
}, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
|
|
165
|
+
use: "overline"
|
|
166
|
+
}, t(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["API Keys"]))))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
167
|
+
span: 12
|
|
168
|
+
}, /*#__PURE__*/_react.default.createElement(Bind, {
|
|
169
|
+
name: "apiKeyAccessScope"
|
|
170
|
+
}, /*#__PURE__*/_react.default.createElement(_Select.Select, {
|
|
171
|
+
label: t(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2.default)(["Access Scope"])))
|
|
172
|
+
}, /*#__PURE__*/_react.default.createElement("option", {
|
|
173
|
+
value: NO_ACCESS
|
|
174
|
+
}, t(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2.default)(["No access"])))), /*#__PURE__*/_react.default.createElement("option", {
|
|
175
|
+
value: FULL_ACCESS
|
|
176
|
+
}, t(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2.default)(["Full access"]))))))))), /*#__PURE__*/_react.default.createElement(_Elevation.Elevation, {
|
|
177
|
+
z: 1,
|
|
178
|
+
style: {
|
|
179
|
+
marginTop: 10
|
|
180
|
+
}
|
|
181
|
+
}, /*#__PURE__*/_react.default.createElement(_Grid.Grid, null, /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
182
|
+
span: 12
|
|
183
|
+
}, /*#__PURE__*/_react.default.createElement(_Typography.Typography, {
|
|
184
|
+
use: "overline"
|
|
185
|
+
}, t(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2.default)(["Groups"]))))), /*#__PURE__*/_react.default.createElement(_Grid.Cell, {
|
|
186
|
+
span: 12
|
|
187
|
+
}, /*#__PURE__*/_react.default.createElement(Bind, {
|
|
188
|
+
name: "groupAccessScope"
|
|
189
|
+
}, /*#__PURE__*/_react.default.createElement(_Select.Select, {
|
|
190
|
+
label: t(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2.default)(["Access Scope"])))
|
|
191
|
+
}, /*#__PURE__*/_react.default.createElement("option", {
|
|
192
|
+
value: NO_ACCESS
|
|
193
|
+
}, t(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2.default)(["No access"])))), /*#__PURE__*/_react.default.createElement("option", {
|
|
194
|
+
value: FULL_ACCESS
|
|
195
|
+
}, t(_templateObject13 || (_templateObject13 = (0, _taggedTemplateLiteral2.default)(["Full access"])))))))))));
|
|
196
|
+
});
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
exports.SecurityPermissions = SecurityPermissions;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["t","i18n","ns","SECURITY","SECURITY_FULL_ACCESS","SECURITY_GROUP_ACCESS","SECURITY_API_KEY_ACCESS","FULL_ACCESS","NO_ACCESS","CUSTOM_ACCESS","SecurityPermissions","value","onChange","onFormChange","useCallback","data","newValue","Array","isArray","filter","item","name","startsWith","permissions","accessLevel","push","groupAccessScope","apiKeyAccessScope","length","formData","useMemo","hasFullAccess","find","hasGroupAccess","hasApiKeyAccess","Bind","gridNoPaddingClass","marginTop"],"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 { PermissionInfo, gridNoPaddingClass } from \"@webiny/app-admin/components/Permissions\";\nimport { Form } from \"@webiny/form\";\nimport { Elevation } from \"@webiny/ui/Elevation\";\nimport { Typography } from \"@webiny/ui/Typography\";\nimport { SecurityPermission } from \"@webiny/app-security/types\";\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_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}\nexport const SecurityPermissions: React.FC<SecurityPermissionsProps> = ({ value, onChange }) => {\n const onFormChange = useCallback(\n data => {\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 (data.accessLevel === FULL_ACCESS) {\n permissions.push({ name: SECURITY_FULL_ACCESS });\n } else if (data.accessLevel === CUSTOM_ACCESS) {\n if (data.groupAccessScope === FULL_ACCESS) {\n permissions.push({ name: SECURITY_GROUP_ACCESS });\n }\n\n if (data.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 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\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={gridNoPaddingClass}>\n <Cell span={6}>\n <PermissionInfo title={t`Access Level`} />\n </Cell>\n <Cell span={6}>\n <Bind name={\"accessLevel\"}>\n <Select label={t`Access Level`}>\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 <React.Fragment>\n <Elevation z={1} style={{ marginTop: 10 }}>\n <Grid>\n <Cell span={12}>\n <Typography use={\"overline\"}>{t`API Keys`}</Typography>\n </Cell>\n <Cell span={12}>\n <Bind name={\"apiKeyAccessScope\"}>\n <Select label={t`Access Scope`}>\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 </Elevation>\n <Elevation z={1} style={{ marginTop: 10 }}>\n <Grid>\n <Cell span={12}>\n <Typography use={\"overline\"}>{t`Groups`}</Typography>\n </Cell>\n <Cell span={12}>\n <Bind name={\"groupAccessScope\"}>\n <Select label={t`Access Scope`}>\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 </Elevation>\n </React.Fragment>\n )}\n </Fragment>\n );\n }}\n </Form>\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
11
|
+
|
|
12
|
+
var _react = _interopRequireDefault(require("react"));
|
|
13
|
+
|
|
14
|
+
var _i18n = require("@webiny/app/i18n");
|
|
15
|
+
|
|
16
|
+
var _Accordion = require("@webiny/ui/Accordion");
|
|
17
|
+
|
|
18
|
+
var _baselineSecurity24px = require("@webiny/app-admin/assets/icons/baseline-security-24px.svg");
|
|
19
|
+
|
|
20
|
+
var _SecurityPermissions = require("./SecurityPermissions");
|
|
21
|
+
|
|
22
|
+
var _PermissionRendererPlugin = require("@webiny/app-admin/plugins/PermissionRendererPlugin");
|
|
23
|
+
|
|
24
|
+
var _templateObject, _templateObject2;
|
|
25
|
+
|
|
26
|
+
var t = _i18n.i18n.ns("app-security-admin-users/plugins/permissionRenderer");
|
|
27
|
+
|
|
28
|
+
var _default = new _PermissionRendererPlugin.PermissionRendererPlugin({
|
|
29
|
+
render: function render(props) {
|
|
30
|
+
return /*#__PURE__*/_react.default.createElement(_Accordion.AccordionItem, {
|
|
31
|
+
icon: /*#__PURE__*/_react.default.createElement(_baselineSecurity24px.ReactComponent, null),
|
|
32
|
+
title: t(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["Security"]))),
|
|
33
|
+
description: t(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["Manage Security app access permissions."]))),
|
|
34
|
+
"data-testid": "permission.security"
|
|
35
|
+
}, /*#__PURE__*/_react.default.createElement(_SecurityPermissions.SecurityPermissions, props));
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
exports.default = _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["t","i18n","ns","PermissionRendererPlugin","render","props"],"sources":["index.tsx"],"sourcesContent":["import React from \"react\";\nimport { i18n } from \"@webiny/app/i18n\";\nimport { AccordionItem } from \"@webiny/ui/Accordion\";\nimport { ReactComponent as SecurityIcon } from \"@webiny/app-admin/assets/icons/baseline-security-24px.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 <AccordionItem\n icon={<SecurityIcon />}\n title={t`Security`}\n description={t`Manage Security app access permissions.`}\n data-testid={\"permission.security\"}\n >\n <SecurityPermissions {...props} />\n </AccordionItem>\n );\n }\n});\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAMA,CAAC,GAAGC,UAAA,CAAKC,EAAL,CAAQ,qDAAR,CAAV;;eAEe,IAAIC,kDAAJ,CAA6B;EACxCC,MADwC,kBACjCC,KADiC,EAC1B;IACV,oBACI,6BAAC,wBAAD;MACI,IAAI,eAAE,6BAAC,oCAAD,OADV;MAEI,KAAK,EAAEL,CAAF,2FAFT;MAGI,WAAW,EAAEA,CAAF,4HAHf;MAII,eAAa;IAJjB,gBAMI,6BAAC,wCAAD,EAAyBK,KAAzB,CANJ,CADJ;EAUH;AAZuC,CAA7B,C"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
|
|
12
|
+
var _reactHelmet = _interopRequireDefault(require("react-helmet"));
|
|
13
|
+
|
|
14
|
+
var _reactRouter = require("@webiny/react-router");
|
|
15
|
+
|
|
16
|
+
var _AdminLayout = require("@webiny/app-admin/components/AdminLayout");
|
|
17
|
+
|
|
18
|
+
var _components = require("@webiny/app-security/components");
|
|
19
|
+
|
|
20
|
+
var _Groups = require("../ui/views/Groups");
|
|
21
|
+
|
|
22
|
+
var _ApiKeys = require("../ui/views/ApiKeys");
|
|
23
|
+
|
|
24
|
+
var _constants = require("./constants");
|
|
25
|
+
|
|
26
|
+
var plugins = [{
|
|
27
|
+
name: "route-security-groups",
|
|
28
|
+
type: "route",
|
|
29
|
+
route: /*#__PURE__*/_react.default.createElement(_reactRouter.Route, {
|
|
30
|
+
exact: true,
|
|
31
|
+
path: "/access-management/groups",
|
|
32
|
+
render: function render() {
|
|
33
|
+
return /*#__PURE__*/_react.default.createElement(_components.SecureRoute, {
|
|
34
|
+
permission: _constants.Permission.Groups
|
|
35
|
+
}, /*#__PURE__*/_react.default.createElement(_AdminLayout.AdminLayout, null, /*#__PURE__*/_react.default.createElement(_reactHelmet.default, {
|
|
36
|
+
title: "Access Management - Groups"
|
|
37
|
+
}), /*#__PURE__*/_react.default.createElement(_Groups.Groups, null)));
|
|
38
|
+
}
|
|
39
|
+
})
|
|
40
|
+
}, {
|
|
41
|
+
name: "route-security-api-keys",
|
|
42
|
+
type: "route",
|
|
43
|
+
route: /*#__PURE__*/_react.default.createElement(_reactRouter.Route, {
|
|
44
|
+
exact: true,
|
|
45
|
+
path: "/access-management/api-keys",
|
|
46
|
+
render: function render() {
|
|
47
|
+
return /*#__PURE__*/_react.default.createElement(_components.SecureRoute, {
|
|
48
|
+
permission: _constants.Permission.ApiKeys
|
|
49
|
+
}, /*#__PURE__*/_react.default.createElement(_AdminLayout.AdminLayout, {
|
|
50
|
+
title: "Access Management - API Keys"
|
|
51
|
+
}, /*#__PURE__*/_react.default.createElement(_ApiKeys.ApiKeys, null)));
|
|
52
|
+
}
|
|
53
|
+
})
|
|
54
|
+
}];
|
|
55
|
+
var _default = plugins;
|
|
56
|
+
exports.default = _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["plugins","name","type","route","Permission","Groups","ApiKeys"],"sources":["routes.tsx"],"sourcesContent":["import React from \"react\";\nimport Helmet from \"react-helmet\";\nimport { Route } from \"@webiny/react-router\";\nimport { AdminLayout } from \"@webiny/app-admin/components/AdminLayout\";\nimport { SecureRoute } from \"@webiny/app-security/components\";\nimport { RoutePlugin } from \"@webiny/app/types\";\nimport { Groups } from \"~/ui/views/Groups\";\nimport { ApiKeys } from \"~/ui/views/ApiKeys\";\nimport { Permission } from \"./constants\";\n\nconst plugins: RoutePlugin[] = [\n {\n name: \"route-security-groups\",\n type: \"route\",\n route: (\n <Route\n exact\n path={\"/access-management/groups\"}\n render={() => (\n <SecureRoute permission={Permission.Groups}>\n <AdminLayout>\n <Helmet title={\"Access Management - Groups\"} />\n <Groups />\n </AdminLayout>\n </SecureRoute>\n )}\n />\n )\n },\n {\n name: \"route-security-api-keys\",\n type: \"route\",\n route: (\n <Route\n exact\n path={\"/access-management/api-keys\"}\n render={() => (\n <SecureRoute permission={Permission.ApiKeys}>\n <AdminLayout title={\"Access Management - API Keys\"}>\n <ApiKeys />\n </AdminLayout>\n </SecureRoute>\n )}\n />\n )\n }\n];\n\nexport default plugins;\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AAEA,IAAMA,OAAsB,GAAG,CAC3B;EACIC,IAAI,EAAE,uBADV;EAEIC,IAAI,EAAE,OAFV;EAGIC,KAAK,eACD,6BAAC,kBAAD;IACI,KAAK,MADT;IAEI,IAAI,EAAE,2BAFV;IAGI,MAAM,EAAE;MAAA,oBACJ,6BAAC,uBAAD;QAAa,UAAU,EAAEC,qBAAA,CAAWC;MAApC,gBACI,6BAAC,wBAAD,qBACI,6BAAC,oBAAD;QAAQ,KAAK,EAAE;MAAf,EADJ,eAEI,6BAAC,cAAD,OAFJ,CADJ,CADI;IAAA;EAHZ;AAJR,CAD2B,EAmB3B;EACIJ,IAAI,EAAE,yBADV;EAEIC,IAAI,EAAE,OAFV;EAGIC,KAAK,eACD,6BAAC,kBAAD;IACI,KAAK,MADT;IAEI,IAAI,EAAE,6BAFV;IAGI,MAAM,EAAE;MAAA,oBACJ,6BAAC,uBAAD;QAAa,UAAU,EAAEC,qBAAA,CAAWE;MAApC,gBACI,6BAAC,wBAAD;QAAa,KAAK,EAAE;MAApB,gBACI,6BAAC,gBAAD,OADJ,CADJ,CADI;IAAA;EAHZ;AAJR,CAnB2B,CAA/B;eAsCeN,O"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
var React = _interopRequireWildcard(require("react"));
|
|
11
|
+
|
|
12
|
+
var _NotAuthorizedError = require("../components/NotAuthorizedError");
|
|
13
|
+
|
|
14
|
+
var plugin = {
|
|
15
|
+
type: "secure-route-error",
|
|
16
|
+
name: "secure-route-error",
|
|
17
|
+
render: function render() {
|
|
18
|
+
return /*#__PURE__*/React.createElement(_NotAuthorizedError.NotAuthorizedError, null);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
var _default = plugin;
|
|
22
|
+
exports.default = _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["plugin","type","name","render"],"sources":["secureRouteError.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Plugin } from \"@webiny/plugins/types\";\nimport { NotAuthorizedError } from \"~/components/NotAuthorizedError\";\n\ntype SecureRouteErrorPlugin = Plugin & { render: () => React.ReactNode };\n\nconst plugin: SecureRouteErrorPlugin = {\n type: \"secure-route-error\",\n name: \"secure-route-error\",\n render(): React.ReactElement {\n return <NotAuthorizedError />;\n }\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;AAAA;;AAEA;;AAIA,IAAMA,MAA8B,GAAG;EACnCC,IAAI,EAAE,oBAD6B;EAEnCC,IAAI,EAAE,oBAF6B;EAGnCC,MAHmC,oBAGN;IACzB,oBAAO,oBAAC,sCAAD,OAAP;EACH;AALkC,CAAvC;eAQeH,M"}
|
package/types.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SecurityPermission } from "@webiny/app-security/types";
|
|
2
|
+
export interface Group {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
slug: string;
|
|
7
|
+
system?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface ApiKey {
|
|
10
|
+
id: string;
|
|
11
|
+
token: string;
|
|
12
|
+
name: string;
|
|
13
|
+
description: string;
|
|
14
|
+
permissions: SecurityPermission[];
|
|
15
|
+
}
|
package/types.js
ADDED
package/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { SecurityPermission } from \"@webiny/app-security/types\";\n\nexport interface Group {\n id: string;\n name: string;\n description: string;\n slug: string;\n system?: boolean;\n}\nexport interface ApiKey {\n id: string;\n token: string;\n name: string;\n description: string;\n permissions: SecurityPermission[];\n}\n"],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { InputElement } from "@webiny/app-admin/ui/elements/form/InputElement";
|
|
3
|
+
import { FormFieldElementRenderProps } from "@webiny/app-admin/ui/elements/form/FormFieldElement";
|
|
4
|
+
export declare class GroupAutocompleteElement extends InputElement {
|
|
5
|
+
render(props: FormFieldElementRenderProps): React.ReactElement;
|
|
6
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.GroupAutocompleteElement = void 0;
|
|
9
|
+
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
|
|
14
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
15
|
+
|
|
16
|
+
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
|
|
17
|
+
|
|
18
|
+
var _react = _interopRequireDefault(require("react"));
|
|
19
|
+
|
|
20
|
+
var _InputElement2 = require("@webiny/app-admin/ui/elements/form/InputElement");
|
|
21
|
+
|
|
22
|
+
var _GroupAutocomplete = require("../../components/GroupAutocomplete");
|
|
23
|
+
|
|
24
|
+
var GroupAutocompleteElement = /*#__PURE__*/function (_InputElement) {
|
|
25
|
+
(0, _inherits2.default)(GroupAutocompleteElement, _InputElement);
|
|
26
|
+
|
|
27
|
+
var _super = (0, _createSuper2.default)(GroupAutocompleteElement);
|
|
28
|
+
|
|
29
|
+
function GroupAutocompleteElement() {
|
|
30
|
+
(0, _classCallCheck2.default)(this, GroupAutocompleteElement);
|
|
31
|
+
return _super.apply(this, arguments);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
(0, _createClass2.default)(GroupAutocompleteElement, [{
|
|
35
|
+
key: "render",
|
|
36
|
+
value: function render(props) {
|
|
37
|
+
var formProps = props.formProps;
|
|
38
|
+
var _ref = formProps,
|
|
39
|
+
Bind = _ref.Bind;
|
|
40
|
+
var validators = this.config.validators;
|
|
41
|
+
/**
|
|
42
|
+
* TODO @ts-refactor @bruno
|
|
43
|
+
* Figure out what can validators be.
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
if (validators && typeof validators !== "function") {
|
|
47
|
+
console.log("packages/app-security-access-management/src/ui/elements/GroupAutocompleteElement.tsx validators is set but not a function.");
|
|
48
|
+
console.log(validators);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return /*#__PURE__*/_react.default.createElement(Bind, {
|
|
52
|
+
name: this.id,
|
|
53
|
+
validators: typeof validators === "function" ? validators({
|
|
54
|
+
formProps: formProps
|
|
55
|
+
}) : []
|
|
56
|
+
}, /*#__PURE__*/_react.default.createElement(_GroupAutocomplete.GroupAutocomplete, {
|
|
57
|
+
label: "Group"
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
}]);
|
|
61
|
+
return GroupAutocompleteElement;
|
|
62
|
+
}(_InputElement2.InputElement);
|
|
63
|
+
|
|
64
|
+
exports.GroupAutocompleteElement = GroupAutocompleteElement;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["GroupAutocompleteElement","props","formProps","Bind","validators","config","console","log","id","InputElement"],"sources":["GroupAutocompleteElement.tsx"],"sourcesContent":["import React from \"react\";\nimport { FormRenderPropParams } from \"@webiny/form\";\nimport { InputElement } from \"@webiny/app-admin/ui/elements/form/InputElement\";\nimport { GroupAutocomplete } from \"~/components/GroupAutocomplete\";\nimport { FormFieldElementRenderProps } from \"@webiny/app-admin/ui/elements/form/FormFieldElement\";\n\nexport class GroupAutocompleteElement extends InputElement {\n public override render(props: FormFieldElementRenderProps): React.ReactElement {\n const { formProps } = props;\n const { Bind } = formProps as FormRenderPropParams;\n const validators = this.config.validators;\n /**\n * TODO @ts-refactor @bruno\n * Figure out what can validators be.\n */\n if (validators && typeof validators !== \"function\") {\n console.log(\n \"packages/app-security-access-management/src/ui/elements/GroupAutocompleteElement.tsx validators is set but not a function.\"\n );\n console.log(validators);\n }\n return (\n <Bind\n name={this.id}\n validators={typeof validators === \"function\" ? validators({ formProps }) : []}\n >\n <GroupAutocomplete label={\"Group\"} />\n </Bind>\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;AAEA;;AACA;;IAGaA,wB;;;;;;;;;;;;WACT,gBAAuBC,KAAvB,EAA+E;MAC3E,IAAQC,SAAR,GAAsBD,KAAtB,CAAQC,SAAR;MACA,WAAiBA,SAAjB;MAAA,IAAQC,IAAR,QAAQA,IAAR;MACA,IAAMC,UAAU,GAAG,KAAKC,MAAL,CAAYD,UAA/B;MACA;AACR;AACA;AACA;;MACQ,IAAIA,UAAU,IAAI,OAAOA,UAAP,KAAsB,UAAxC,EAAoD;QAChDE,OAAO,CAACC,GAAR,CACI,4HADJ;QAGAD,OAAO,CAACC,GAAR,CAAYH,UAAZ;MACH;;MACD,oBACI,6BAAC,IAAD;QACI,IAAI,EAAE,KAAKI,EADf;QAEI,UAAU,EAAE,OAAOJ,UAAP,KAAsB,UAAtB,GAAmCA,UAAU,CAAC;UAAEF,SAAS,EAATA;QAAF,CAAD,CAA7C,GAA+D;MAF/E,gBAII,6BAAC,oCAAD;QAAmB,KAAK,EAAE;MAA1B,EAJJ,CADJ;IAQH;;;EAvByCO,2B"}
|