@webiny/app-security 5.40.0-beta.5 → 5.40.0-beta.6
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/contexts/Security.d.ts +4 -2
- package/contexts/Security.js +18 -17
- package/contexts/Security.js.map +1 -1
- package/hooks/useSecurity.js +5 -1
- package/hooks/useSecurity.js.map +1 -1
- package/package.json +6 -6
- package/types.d.ts +2 -0
- package/types.js.map +1 -1
package/contexts/Security.d.ts
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import React, { Dispatch, SetStateAction } from "react";
|
|
2
|
-
import { SecurityIdentity, SecurityPermission } from "../types";
|
|
2
|
+
import { IdTokenProvider, SecurityIdentity, SecurityPermission } from "../types";
|
|
3
3
|
export interface SecurityContext {
|
|
4
4
|
identity: SecurityIdentity | null;
|
|
5
5
|
getIdentityId: () => string | null;
|
|
6
6
|
setIdentity: Dispatch<SetStateAction<SecurityIdentity | null>>;
|
|
7
7
|
getPermission<T extends SecurityPermission = SecurityPermission>(name: string, exact?: boolean): T | null;
|
|
8
8
|
getPermissions<T extends SecurityPermission = SecurityPermission>(name: string): T[];
|
|
9
|
+
setIdTokenProvider: (provider: IdTokenProvider) => void;
|
|
10
|
+
getIdToken: IdTokenProvider;
|
|
9
11
|
}
|
|
10
12
|
interface SecurityProviderProps {
|
|
11
13
|
children: React.ReactNode;
|
|
12
14
|
}
|
|
13
|
-
export declare const SecurityContext: React.Context<SecurityContext>;
|
|
15
|
+
export declare const SecurityContext: React.Context<SecurityContext | undefined>;
|
|
14
16
|
export declare const SecurityProvider: (props: SecurityProviderProps) => React.JSX.Element;
|
|
15
17
|
export {};
|
package/contexts/Security.js
CHANGED
|
@@ -10,26 +10,21 @@ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/obje
|
|
|
10
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
11
|
var _minimatch = _interopRequireDefault(require("minimatch"));
|
|
12
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
13
|
-
var
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
},
|
|
18
|
-
setIdentity: function setIdentity() {
|
|
19
|
-
return void 0;
|
|
20
|
-
},
|
|
21
|
-
getPermission: function getPermission() {
|
|
22
|
-
return null;
|
|
23
|
-
},
|
|
24
|
-
getPermissions: function getPermissions() {
|
|
25
|
-
return [];
|
|
26
|
-
}
|
|
27
|
-
});
|
|
13
|
+
var defaultIdTokenProvider = function defaultIdTokenProvider() {
|
|
14
|
+
return undefined;
|
|
15
|
+
};
|
|
16
|
+
var SecurityContext = exports.SecurityContext = /*#__PURE__*/_react.default.createContext(undefined);
|
|
28
17
|
var SecurityProvider = exports.SecurityProvider = function SecurityProvider(props) {
|
|
29
18
|
var _useState = (0, _react.useState)(null),
|
|
30
19
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
31
20
|
identity = _useState2[0],
|
|
32
21
|
setIdentity = _useState2[1];
|
|
22
|
+
var _useState3 = (0, _react.useState)(function () {
|
|
23
|
+
return defaultIdTokenProvider;
|
|
24
|
+
}),
|
|
25
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
26
|
+
idTokenProvider = _useState4[0],
|
|
27
|
+
_setIdTokenProvider = _useState4[1];
|
|
33
28
|
var getPermission = (0, _react.useCallback)(function (name, exact) {
|
|
34
29
|
if (!identity) {
|
|
35
30
|
return null;
|
|
@@ -79,9 +74,15 @@ var SecurityProvider = exports.SecurityProvider = function SecurityProvider(prop
|
|
|
79
74
|
getIdentityId: getIdentityId,
|
|
80
75
|
setIdentity: setIdentity,
|
|
81
76
|
getPermission: getPermission,
|
|
82
|
-
getPermissions: getPermissions
|
|
77
|
+
getPermissions: getPermissions,
|
|
78
|
+
getIdToken: idTokenProvider,
|
|
79
|
+
setIdTokenProvider: function setIdTokenProvider(provider) {
|
|
80
|
+
_setIdTokenProvider(function () {
|
|
81
|
+
return provider;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
83
84
|
};
|
|
84
|
-
}, [identity]);
|
|
85
|
+
}, [idTokenProvider, identity]);
|
|
85
86
|
return /*#__PURE__*/_react.default.createElement(SecurityContext.Provider, {
|
|
86
87
|
value: value
|
|
87
88
|
}, props.children);
|
package/contexts/Security.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_minimatch","_interopRequireDefault","require","_react","_interopRequireWildcard","SecurityContext","exports","React","createContext","
|
|
1
|
+
{"version":3,"names":["_minimatch","_interopRequireDefault","require","_react","_interopRequireWildcard","defaultIdTokenProvider","undefined","SecurityContext","exports","React","createContext","SecurityProvider","props","_useState","useState","_useState2","_slicedToArray2","default","identity","setIdentity","_useState3","_useState4","idTokenProvider","setIdTokenProvider","getPermission","useCallback","name","exact","perms","permissions","exactMatch","find","p","minimatch","getPermissions","filter","current","getIdentityId","id","login","value","useMemo","_objectSpread2","getIdToken","provider","createElement","Provider","children"],"sources":["Security.tsx"],"sourcesContent":["import minimatch from \"minimatch\";\nimport React, { Dispatch, SetStateAction, useCallback, useMemo, useState } from \"react\";\nimport { IdTokenProvider, SecurityIdentity, SecurityPermission } from \"~/types\";\n\nexport interface SecurityContext {\n identity: SecurityIdentity | null;\n getIdentityId: () => string | null;\n setIdentity: Dispatch<SetStateAction<SecurityIdentity | null>>;\n getPermission<T extends SecurityPermission = SecurityPermission>(\n name: string,\n exact?: boolean\n ): T | null;\n getPermissions<T extends SecurityPermission = SecurityPermission>(name: string): T[];\n setIdTokenProvider: (provider: IdTokenProvider) => void;\n getIdToken: IdTokenProvider;\n}\n\ninterface SecurityProviderProps {\n children: React.ReactNode;\n}\n\nconst defaultIdTokenProvider: IdTokenProvider = () => undefined;\n\nexport const SecurityContext = React.createContext<SecurityContext | undefined>(undefined);\n\nexport const SecurityProvider = (props: SecurityProviderProps) => {\n const [identity, setIdentity] = useState<SecurityIdentity | null>(null);\n const [idTokenProvider, setIdTokenProvider] = useState<IdTokenProvider>(\n () => defaultIdTokenProvider\n );\n\n const getPermission = useCallback(\n <T extends SecurityPermission = SecurityPermission>(\n name: string,\n exact?: boolean\n ): T | null => {\n if (!identity) {\n return null;\n }\n\n const perms = (identity.permissions || []) as T[];\n const exactMatch = perms.find(p => p.name === name);\n if (exactMatch) {\n return exactMatch as T;\n } else if (exact) {\n return null;\n }\n\n // Try matching using patterns\n return perms.find(p => minimatch(name, p.name)) || null;\n },\n [identity]\n );\n\n const getPermissions = useCallback(\n <T extends SecurityPermission = SecurityPermission>(name: string): Array<T> => {\n if (!identity) {\n return [];\n }\n\n const permissions = identity.permissions || [];\n\n return permissions.filter(current => {\n const exactMatch = current.name === name;\n if (exactMatch) {\n return true;\n }\n\n // Try matching using patterns.\n return minimatch(name, current.name);\n }) as T[];\n },\n [identity]\n );\n\n const getIdentityId = useCallback(() => {\n if (!identity) {\n return null;\n }\n return identity.id || identity.login || null;\n }, [identity]);\n\n const value: SecurityContext = useMemo(() => {\n return {\n identity: identity\n ? {\n ...identity,\n // For backwards compatibility, expose the `getPermission` method on the `identity` object.\n getPermission\n }\n : null,\n getIdentityId,\n setIdentity,\n getPermission,\n getPermissions,\n getIdToken: idTokenProvider,\n setIdTokenProvider: provider => {\n setIdTokenProvider(() => provider);\n }\n };\n }, [idTokenProvider, identity]);\n\n return <SecurityContext.Provider value={value}>{props.children}</SecurityContext.Provider>;\n};\n"],"mappings":"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","ignoreList":[]}
|
package/hooks/useSecurity.js
CHANGED
|
@@ -7,7 +7,11 @@ exports.useSecurity = useSecurity;
|
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
var _Security = require("../contexts/Security");
|
|
9
9
|
function useSecurity() {
|
|
10
|
-
|
|
10
|
+
var context = (0, _react.useContext)(_Security.SecurityContext);
|
|
11
|
+
if (!context) {
|
|
12
|
+
throw Error("Missing <SecurityProvider> in the component hierarchy!");
|
|
13
|
+
}
|
|
14
|
+
return context;
|
|
11
15
|
}
|
|
12
16
|
|
|
13
17
|
//# sourceMappingURL=useSecurity.js.map
|
package/hooks/useSecurity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_Security","useSecurity","useContext","SecurityContext"],"sources":["useSecurity.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport { SecurityContext } from \"~/contexts/Security\";\n\nexport function useSecurity() {\n
|
|
1
|
+
{"version":3,"names":["_react","require","_Security","useSecurity","context","useContext","SecurityContext","Error"],"sources":["useSecurity.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport { SecurityContext } from \"~/contexts/Security\";\n\nexport function useSecurity() {\n const context = useContext(SecurityContext);\n\n if (!context) {\n throw Error(`Missing <SecurityProvider> in the component hierarchy!`);\n }\n\n return context;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AAEO,SAASE,WAAWA,CAAA,EAAG;EAC1B,IAAMC,OAAO,GAAG,IAAAC,iBAAU,EAACC,yBAAe,CAAC;EAE3C,IAAI,CAACF,OAAO,EAAE;IACV,MAAMG,KAAK,yDAAyD,CAAC;EACzE;EAEA,OAAOH,OAAO;AAClB","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-security",
|
|
3
|
-
"version": "5.40.0-beta.
|
|
3
|
+
"version": "5.40.0-beta.6",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
],
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@webiny/app": "5.40.0-beta.
|
|
17
|
-
"@webiny/plugins": "5.40.0-beta.
|
|
16
|
+
"@webiny/app": "5.40.0-beta.6",
|
|
17
|
+
"@webiny/plugins": "5.40.0-beta.6",
|
|
18
18
|
"minimatch": "5.1.6",
|
|
19
19
|
"react": "18.2.0",
|
|
20
20
|
"react-dom": "18.2.0"
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"@babel/preset-react": "7.24.1",
|
|
28
28
|
"@babel/preset-typescript": "7.24.1",
|
|
29
29
|
"@emotion/babel-plugin": "11.11.0",
|
|
30
|
-
"@webiny/cli": "5.40.0-beta.
|
|
31
|
-
"@webiny/project-utils": "5.40.0-beta.
|
|
30
|
+
"@webiny/cli": "5.40.0-beta.6",
|
|
31
|
+
"@webiny/project-utils": "5.40.0-beta.6",
|
|
32
32
|
"rimraf": "5.0.5",
|
|
33
33
|
"ttypescript": "1.5.15",
|
|
34
34
|
"typescript": "4.7.4"
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
]
|
|
49
49
|
}
|
|
50
50
|
},
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "e6ce53a387a9b1ab39aa8d15e4ed9be2359f17aa"
|
|
52
52
|
}
|
package/types.d.ts
CHANGED
|
@@ -37,3 +37,5 @@ export interface SecurityIdentity {
|
|
|
37
37
|
getPermission?<T extends SecurityPermission = SecurityPermission>(name: string): T | null;
|
|
38
38
|
[key: string]: any;
|
|
39
39
|
}
|
|
40
|
+
export declare type IdToken = string;
|
|
41
|
+
export declare type IdTokenProvider = () => Promise<IdToken | undefined> | IdToken | undefined;
|
package/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { Plugin } from \"@webiny/app/types\";\n\nexport type SecureRouteErrorPlugin = Plugin & {\n render(): React.ReactElement;\n};\n\nexport interface FullAccessPermission {\n name: \"*\";\n}\n\nexport interface SecurityPermission {\n name: string;\n [key: string]: any;\n}\n\nexport interface SecurityIdentity {\n id: string;\n type: string;\n displayName: string;\n permissions?: SecurityPermission[];\n /**\n * TODO @ts-refactor @pavel\n * Verify that login can be present in here.\n */\n login?: string;\n /**\n * TODO @ts-refactor @pavel\n * Verify that profile can be present in here.\n */\n profile?: {\n email?: string;\n firstName?: string;\n lastName?: string;\n avatar?: {\n src?: string;\n };\n gravatar?: string;\n };\n logout(): void;\n // For backwards compatibility, expose the `getPermission` method on the `identity` object.\n getPermission?<T extends SecurityPermission = SecurityPermission>(name: string): T | null;\n [key: string]: any;\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import { Plugin } from \"@webiny/app/types\";\n\nexport type SecureRouteErrorPlugin = Plugin & {\n render(): React.ReactElement;\n};\n\nexport interface FullAccessPermission {\n name: \"*\";\n}\n\nexport interface SecurityPermission {\n name: string;\n [key: string]: any;\n}\n\nexport interface SecurityIdentity {\n id: string;\n type: string;\n displayName: string;\n permissions?: SecurityPermission[];\n /**\n * TODO @ts-refactor @pavel\n * Verify that login can be present in here.\n */\n login?: string;\n /**\n * TODO @ts-refactor @pavel\n * Verify that profile can be present in here.\n */\n profile?: {\n email?: string;\n firstName?: string;\n lastName?: string;\n avatar?: {\n src?: string;\n };\n gravatar?: string;\n };\n logout(): void;\n // For backwards compatibility, expose the `getPermission` method on the `identity` object.\n getPermission?<T extends SecurityPermission = SecurityPermission>(name: string): T | null;\n [key: string]: any;\n}\n\nexport type IdToken = string;\n\nexport type IdTokenProvider = () => Promise<IdToken | undefined> | IdToken | undefined;\n"],"mappings":"","ignoreList":[]}
|