@webiny/cognito 0.0.0-unstable.e2758ee1cf → 0.0.0-unstable.e6f0dc8ca7
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/Cognito.d.ts +1 -5
- package/admin/Cognito.js +4 -5
- package/admin/Cognito.js.map +1 -1
- package/admin/Extension.js +3 -0
- package/admin/Extension.js.map +1 -1
- package/admin/SecurityPermission.js +2 -10
- package/admin/SecurityPermission.js.map +1 -1
- package/admin/domain/permissionsSchema.d.ts +10 -0
- package/admin/domain/permissionsSchema.js +13 -0
- package/admin/domain/permissionsSchema.js.map +1 -0
- package/admin/features/permissions/abstractions.d.ts +17 -0
- package/admin/features/permissions/abstractions.js +5 -0
- package/admin/features/permissions/abstractions.js.map +1 -0
- package/admin/features/permissions/feature.d.ts +14 -0
- package/admin/features/permissions/feature.js +6 -0
- package/admin/features/permissions/feature.js.map +1 -0
- package/admin/presentation/Cognito/CognitoPresenter.d.ts +0 -1
- package/admin/presentation/Cognito/CognitoPresenter.js +43 -21
- package/admin/presentation/Cognito/CognitoPresenter.js.map +1 -1
- package/admin/presentation/Cognito/components/FederatedLogin.js +10 -7
- package/admin/presentation/Cognito/components/FederatedLogin.js.map +1 -1
- package/admin/presentation/shared/createPasswordValidator.js +1 -1
- package/admin/presentation/shared/createPasswordValidator.js.map +1 -1
- package/admin/ui/views/Users/UsersDataList.js +25 -26
- package/admin/ui/views/Users/UsersDataList.js.map +1 -1
- package/admin/ui/views/Users/components/DeleteAction.js +13 -12
- package/admin/ui/views/Users/components/DeleteAction.js.map +1 -1
- package/api/CognitoApiFeature.d.ts +4 -1
- package/api/features/CognitoIdp/feature.d.ts +4 -1
- package/api/features/CognitoService/feature.d.ts +4 -1
- package/api/features/CognitoService/feature.js.map +1 -1
- package/api/features/CreateUser/CreateUserUseCase.js +1 -1
- package/api/features/CreateUser/CreateUserUseCase.js.map +1 -1
- package/api/features/CreateUser/feature.d.ts +4 -1
- package/api/features/CreateUser/schema.d.ts +4 -36
- package/api/features/DeleteUser/DeleteUserUseCase.d.ts +2 -2
- package/api/features/DeleteUser/DeleteUserUseCase.js +2 -2
- package/api/features/DeleteUser/DeleteUserUseCase.js.map +1 -1
- package/api/features/DeleteUser/feature.d.ts +4 -1
- package/api/features/UpdateUser/UpdateUserUseCase.d.ts +2 -2
- package/api/features/UpdateUser/UpdateUserUseCase.js +3 -3
- package/api/features/UpdateUser/UpdateUserUseCase.js.map +1 -1
- package/api/features/UpdateUser/feature.d.ts +4 -1
- package/api/features/UpdateUser/schema.d.ts +4 -34
- package/api/features/UserInstaller/UserInstaller.d.ts +2 -2
- package/api/features/UserInstaller/UserInstaller.js +2 -2
- package/api/features/UserInstaller/UserInstaller.js.map +1 -1
- package/api/features/UserInstaller/feature.d.ts +4 -1
- package/api/graphql/user.gql.js +2 -2
- package/api/graphql/user.gql.js.map +1 -1
- package/package.json +31 -29
- package/admin/plugins/constants.d.ts +0 -3
- package/admin/plugins/constants.js +0 -6
- package/admin/plugins/constants.js.map +0 -1
- /package/admin/{plugins → presentation}/userMenu/AccountDetails.d.ts +0 -0
- /package/admin/{plugins → presentation}/userMenu/AccountDetails.js +0 -0
- /package/admin/{plugins → presentation}/userMenu/AccountDetails.js.map +0 -0
- /package/admin/{plugins → presentation}/userMenu/useIsDefaultTenant.d.ts +0 -0
- /package/admin/{plugins → presentation}/userMenu/useIsDefaultTenant.js +0 -0
- /package/admin/{plugins → presentation}/userMenu/useIsDefaultTenant.js.map +0 -0
package/Cognito.d.ts
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export declare const Cognito: import("@webiny/project/defineExtension/defineExtension").ExtensionComponent<z.ZodObject<{
|
|
3
3
|
apiConfig: z.ZodOptional<z.ZodString>;
|
|
4
|
-
},
|
|
5
|
-
apiConfig?: string | undefined;
|
|
6
|
-
}, {
|
|
7
|
-
apiConfig?: string | undefined;
|
|
8
|
-
}>>;
|
|
4
|
+
}, z.core.$strip>>;
|
package/admin/Cognito.js
CHANGED
|
@@ -2,13 +2,12 @@ import React, { Fragment, memo } from "react";
|
|
|
2
2
|
import { AdminConfig, AdminLayout } from "@webiny/app-admin";
|
|
3
3
|
import { HasPermission } from "@webiny/app-admin";
|
|
4
4
|
import { useRouter } from "@webiny/app-admin";
|
|
5
|
-
import { Permission } from "./plugins/constants.js";
|
|
6
5
|
import { UsersView } from "./ui/views/Users/UsersView.js";
|
|
7
6
|
import { UserAccountForm } from "./ui/views/Account/index.js";
|
|
8
|
-
import { AccountDetails } from "./plugins/userMenu/AccountDetails.js";
|
|
9
7
|
import { SecurityPermission } from "./SecurityPermission.js";
|
|
10
8
|
import { CognitoLogin } from "./CognitoLogin.js";
|
|
11
9
|
import { Routes } from "./routes.js";
|
|
10
|
+
import { AccountDetails } from "./presentation/userMenu/AccountDetails.js";
|
|
12
11
|
const {
|
|
13
12
|
Route,
|
|
14
13
|
Menu
|
|
@@ -18,7 +17,7 @@ const CognitoIdP = props => {
|
|
|
18
17
|
getLink
|
|
19
18
|
} = useRouter();
|
|
20
19
|
return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement(SecurityPermission, null), /*#__PURE__*/React.createElement(CognitoLogin, props.login), /*#__PURE__*/React.createElement(AdminConfig, null, /*#__PURE__*/React.createElement(HasPermission, {
|
|
21
|
-
name:
|
|
20
|
+
name: "adminUsers.user"
|
|
22
21
|
}, /*#__PURE__*/React.createElement(Route, {
|
|
23
22
|
route: Routes.Users.List,
|
|
24
23
|
element: /*#__PURE__*/React.createElement(AdminLayout, {
|
|
@@ -31,8 +30,8 @@ const CognitoIdP = props => {
|
|
|
31
30
|
}, /*#__PURE__*/React.createElement(UserAccountForm, null))
|
|
32
31
|
}), /*#__PURE__*/React.createElement(Menu, {
|
|
33
32
|
name: "cognito.settings.adminUsers",
|
|
34
|
-
parent: "settings",
|
|
35
|
-
|
|
33
|
+
parent: "settings.security",
|
|
34
|
+
before: "$first",
|
|
36
35
|
element: /*#__PURE__*/React.createElement(Menu.Link, {
|
|
37
36
|
text: "Users",
|
|
38
37
|
to: getLink(Routes.Users.List),
|
package/admin/Cognito.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","Fragment","memo","AdminConfig","AdminLayout","HasPermission","useRouter","
|
|
1
|
+
{"version":3,"names":["React","Fragment","memo","AdminConfig","AdminLayout","HasPermission","useRouter","UsersView","UserAccountForm","SecurityPermission","CognitoLogin","Routes","AccountDetails","Route","Menu","CognitoIdP","props","getLink","createElement","login","name","route","Users","List","element","title","Account","parent","before","Link","text","to","pinnable","User","after","accountRoute","CognitoAdmin"],"sources":["Cognito.tsx"],"sourcesContent":["import React, { Fragment, memo } from \"react\";\nimport { AdminConfig, AdminLayout } from \"@webiny/app-admin\";\nimport { HasPermission } from \"@webiny/app-admin\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport { UsersView } from \"./ui/views/Users/UsersView.js\";\nimport { UserAccountForm } from \"./ui/views/Account/index.js\";\nimport { SecurityPermission } from \"./SecurityPermission.js\";\nimport { CognitoLogin, type CognitoLoginProps } from \"./CognitoLogin.js\";\nimport { Routes } from \"./routes.js\";\nimport { AccountDetails } from \"~/admin/presentation/userMenu/AccountDetails.js\";\n\nconst { Route, Menu } = AdminConfig;\n\nexport interface CognitoAdminProps {\n login: CognitoLoginProps;\n}\n\nconst CognitoIdP = (props: CognitoAdminProps) => {\n const { getLink } = useRouter();\n\n return (\n <Fragment>\n <SecurityPermission />\n <CognitoLogin {...props.login} />\n <AdminConfig>\n <HasPermission name={\"adminUsers.user\"}>\n <Route\n route={Routes.Users.List}\n element={\n <AdminLayout title={\"Admin Users\"}>\n <UsersView />\n </AdminLayout>\n }\n />\n\n <Route\n route={Routes.Users.Account}\n element={\n <AdminLayout title={\"User Account\"}>\n <UserAccountForm />\n </AdminLayout>\n }\n />\n\n <Menu\n name={\"cognito.settings.adminUsers\"}\n parent={\"settings.security\"}\n before={\"$first\"}\n element={\n <Menu.Link\n text={\"Users\"}\n to={getLink(Routes.Users.List)}\n pinnable={true}\n />\n }\n />\n </HasPermission>\n\n <Menu.User\n name={\"accountSettings\"}\n after={\"userInfo\"}\n element={<AccountDetails accountRoute={getLink(Routes.Users.Account)} />}\n />\n </AdminConfig>\n </Fragment>\n );\n};\n\nexport const CognitoAdmin = memo(CognitoIdP);\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,IAAI,QAAQ,OAAO;AAC7C,SAASC,WAAW,EAAEC,WAAW,QAAQ,mBAAmB;AAC5D,SAASC,aAAa,QAAQ,mBAAmB;AACjD,SAASC,SAAS,QAAQ,mBAAmB;AAC7C,SAASC,SAAS;AAClB,SAASC,eAAe;AACxB,SAASC,kBAAkB;AAC3B,SAASC,YAAY;AACrB,SAASC,MAAM;AACf,SAASC,cAAc;AAEvB,MAAM;EAAEC,KAAK;EAAEC;AAAK,CAAC,GAAGX,WAAW;AAMnC,MAAMY,UAAU,GAAIC,KAAwB,IAAK;EAC7C,MAAM;IAAEC;EAAQ,CAAC,GAAGX,SAAS,CAAC,CAAC;EAE/B,oBACIN,KAAA,CAAAkB,aAAA,CAACjB,QAAQ,qBACLD,KAAA,CAAAkB,aAAA,CAACT,kBAAkB,MAAE,CAAC,eACtBT,KAAA,CAAAkB,aAAA,CAACR,YAAY,EAAKM,KAAK,CAACG,KAAQ,CAAC,eACjCnB,KAAA,CAAAkB,aAAA,CAACf,WAAW,qBACRH,KAAA,CAAAkB,aAAA,CAACb,aAAa;IAACe,IAAI,EAAE;EAAkB,gBACnCpB,KAAA,CAAAkB,aAAA,CAACL,KAAK;IACFQ,KAAK,EAAEV,MAAM,CAACW,KAAK,CAACC,IAAK;IACzBC,OAAO,eACHxB,KAAA,CAAAkB,aAAA,CAACd,WAAW;MAACqB,KAAK,EAAE;IAAc,gBAC9BzB,KAAA,CAAAkB,aAAA,CAACX,SAAS,MAAE,CACH;EAChB,CACJ,CAAC,eAEFP,KAAA,CAAAkB,aAAA,CAACL,KAAK;IACFQ,KAAK,EAAEV,MAAM,CAACW,KAAK,CAACI,OAAQ;IAC5BF,OAAO,eACHxB,KAAA,CAAAkB,aAAA,CAACd,WAAW;MAACqB,KAAK,EAAE;IAAe,gBAC/BzB,KAAA,CAAAkB,aAAA,CAACV,eAAe,MAAE,CACT;EAChB,CACJ,CAAC,eAEFR,KAAA,CAAAkB,aAAA,CAACJ,IAAI;IACDM,IAAI,EAAE,6BAA8B;IACpCO,MAAM,EAAE,mBAAoB;IAC5BC,MAAM,EAAE,QAAS;IACjBJ,OAAO,eACHxB,KAAA,CAAAkB,aAAA,CAACJ,IAAI,CAACe,IAAI;MACNC,IAAI,EAAE,OAAQ;MACdC,EAAE,EAAEd,OAAO,CAACN,MAAM,CAACW,KAAK,CAACC,IAAI,CAAE;MAC/BS,QAAQ,EAAE;IAAK,CAClB;EACJ,CACJ,CACU,CAAC,eAEhBhC,KAAA,CAAAkB,aAAA,CAACJ,IAAI,CAACmB,IAAI;IACNb,IAAI,EAAE,iBAAkB;IACxBc,KAAK,EAAE,UAAW;IAClBV,OAAO,eAAExB,KAAA,CAAAkB,aAAA,CAACN,cAAc;MAACuB,YAAY,EAAElB,OAAO,CAACN,MAAM,CAACW,KAAK,CAACI,OAAO;IAAE,CAAE;EAAE,CAC5E,CACQ,CACP,CAAC;AAEnB,CAAC;AAED,OAAO,MAAMU,YAAY,gBAAGlC,IAAI,CAACa,UAAU,CAAC","ignoreList":[]}
|
package/admin/Extension.js
CHANGED
|
@@ -2,12 +2,15 @@ import React from "react";
|
|
|
2
2
|
import { RegisterFeature } from "@webiny/app-admin";
|
|
3
3
|
import { CognitoFeature } from "./presentation/Cognito/feature.js";
|
|
4
4
|
import { CognitoAdmin } from "./Cognito.js";
|
|
5
|
+
import { CognitoPermissionsFeature } from "./features/permissions/feature.js";
|
|
5
6
|
export const Extension = () => {
|
|
6
7
|
const region = process.env.REACT_APP_USER_POOL_REGION || "";
|
|
7
8
|
const userPoolId = process.env.REACT_APP_USER_POOL_ID || "";
|
|
8
9
|
const clientId = process.env.REACT_APP_USER_POOL_WEB_CLIENT_ID || "";
|
|
9
10
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(RegisterFeature, {
|
|
10
11
|
feature: CognitoFeature
|
|
12
|
+
}), /*#__PURE__*/React.createElement(RegisterFeature, {
|
|
13
|
+
feature: CognitoPermissionsFeature
|
|
11
14
|
}), /*#__PURE__*/React.createElement(CognitoAdmin, {
|
|
12
15
|
login: {
|
|
13
16
|
region,
|
package/admin/Extension.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","RegisterFeature","CognitoFeature","CognitoAdmin","Extension","region","process","env","REACT_APP_USER_POOL_REGION","userPoolId","REACT_APP_USER_POOL_ID","clientId","REACT_APP_USER_POOL_WEB_CLIENT_ID","createElement","Fragment","feature","login"],"sources":["Extension.tsx"],"sourcesContent":["import React from \"react\";\nimport { RegisterFeature } from \"@webiny/app-admin\";\nimport { CognitoFeature } from \"./presentation/Cognito/feature.js\";\nimport { CognitoAdmin } from \"./Cognito.js\";\n\nexport const Extension = () => {\n const region = process.env.REACT_APP_USER_POOL_REGION || \"\";\n const userPoolId = process.env.REACT_APP_USER_POOL_ID || \"\";\n const clientId = process.env.REACT_APP_USER_POOL_WEB_CLIENT_ID || \"\";\n\n return (\n <>\n <RegisterFeature feature={CognitoFeature} />\n <CognitoAdmin\n login={{\n region,\n userPoolId,\n clientId\n }}\n />\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,eAAe,QAAQ,mBAAmB;AACnD,SAASC,cAAc;AACvB,SAASC,YAAY;
|
|
1
|
+
{"version":3,"names":["React","RegisterFeature","CognitoFeature","CognitoAdmin","CognitoPermissionsFeature","Extension","region","process","env","REACT_APP_USER_POOL_REGION","userPoolId","REACT_APP_USER_POOL_ID","clientId","REACT_APP_USER_POOL_WEB_CLIENT_ID","createElement","Fragment","feature","login"],"sources":["Extension.tsx"],"sourcesContent":["import React from \"react\";\nimport { RegisterFeature } from \"@webiny/app-admin\";\nimport { CognitoFeature } from \"./presentation/Cognito/feature.js\";\nimport { CognitoAdmin } from \"./Cognito.js\";\nimport { CognitoPermissionsFeature } from \"./features/permissions/feature.js\";\n\nexport const Extension = () => {\n const region = process.env.REACT_APP_USER_POOL_REGION || \"\";\n const userPoolId = process.env.REACT_APP_USER_POOL_ID || \"\";\n const clientId = process.env.REACT_APP_USER_POOL_WEB_CLIENT_ID || \"\";\n\n return (\n <>\n <RegisterFeature feature={CognitoFeature} />\n <RegisterFeature feature={CognitoPermissionsFeature} />\n <CognitoAdmin\n login={{\n region,\n userPoolId,\n clientId\n }}\n />\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,eAAe,QAAQ,mBAAmB;AACnD,SAASC,cAAc;AACvB,SAASC,YAAY;AACrB,SAASC,yBAAyB;AAElC,OAAO,MAAMC,SAAS,GAAGA,CAAA,KAAM;EAC3B,MAAMC,MAAM,GAAGC,OAAO,CAACC,GAAG,CAACC,0BAA0B,IAAI,EAAE;EAC3D,MAAMC,UAAU,GAAGH,OAAO,CAACC,GAAG,CAACG,sBAAsB,IAAI,EAAE;EAC3D,MAAMC,QAAQ,GAAGL,OAAO,CAACC,GAAG,CAACK,iCAAiC,IAAI,EAAE;EAEpE,oBACIb,KAAA,CAAAc,aAAA,CAAAd,KAAA,CAAAe,QAAA,qBACIf,KAAA,CAAAc,aAAA,CAACb,eAAe;IAACe,OAAO,EAAEd;EAAe,CAAE,CAAC,eAC5CF,KAAA,CAAAc,aAAA,CAACb,eAAe;IAACe,OAAO,EAAEZ;EAA0B,CAAE,CAAC,eACvDJ,KAAA,CAAAc,aAAA,CAACX,YAAY;IACTc,KAAK,EAAE;MACHX,MAAM;MACNI,UAAU;MACVE;IACJ;EAAE,CACL,CACH,CAAC;AAEX,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { AdminConfig } from "@webiny/app-admin";
|
|
3
3
|
import { ReactComponent as PermissionsIcon } from "@webiny/icons/group.svg";
|
|
4
|
+
import { COGNITO_PERMISSIONS_SCHEMA } from "./domain/permissionsSchema.js";
|
|
4
5
|
const {
|
|
5
6
|
Security
|
|
6
7
|
} = AdminConfig;
|
|
@@ -10,16 +11,7 @@ export const SecurityPermission = () => {
|
|
|
10
11
|
title: "Admin Users",
|
|
11
12
|
description: "Manage Admin Users permissions.",
|
|
12
13
|
icon: /*#__PURE__*/React.createElement(PermissionsIcon, null),
|
|
13
|
-
schema:
|
|
14
|
-
prefix: "adminUsers",
|
|
15
|
-
fullAccess: true,
|
|
16
|
-
entities: [{
|
|
17
|
-
id: "user",
|
|
18
|
-
title: "Users",
|
|
19
|
-
permission: "adminUsers.user",
|
|
20
|
-
scopes: ["full"]
|
|
21
|
-
}]
|
|
22
|
-
}
|
|
14
|
+
schema: COGNITO_PERMISSIONS_SCHEMA
|
|
23
15
|
}));
|
|
24
16
|
};
|
|
25
17
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","AdminConfig","ReactComponent","PermissionsIcon","Security","SecurityPermission","createElement","Permissions","name","title","description","icon","schema"
|
|
1
|
+
{"version":3,"names":["React","AdminConfig","ReactComponent","PermissionsIcon","COGNITO_PERMISSIONS_SCHEMA","Security","SecurityPermission","createElement","Permissions","name","title","description","icon","schema"],"sources":["SecurityPermission.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig } from \"@webiny/app-admin\";\nimport { ReactComponent as PermissionsIcon } from \"@webiny/icons/group.svg\";\nimport { COGNITO_PERMISSIONS_SCHEMA } from \"~/admin/domain/permissionsSchema.js\";\n\nconst { Security } = AdminConfig;\n\nexport const SecurityPermission = () => {\n return (\n <AdminConfig>\n <Security.Permissions\n name=\"admin-users\"\n title=\"Admin Users\"\n description=\"Manage Admin Users permissions.\"\n icon={<PermissionsIcon />}\n schema={COGNITO_PERMISSIONS_SCHEMA}\n />\n </AdminConfig>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,cAAc,IAAIC,eAAe,QAAQ,yBAAyB;AAC3E,SAASC,0BAA0B;AAEnC,MAAM;EAAEC;AAAS,CAAC,GAAGJ,WAAW;AAEhC,OAAO,MAAMK,kBAAkB,GAAGA,CAAA,KAAM;EACpC,oBACIN,KAAA,CAAAO,aAAA,CAACN,WAAW,qBACRD,KAAA,CAAAO,aAAA,CAACF,QAAQ,CAACG,WAAW;IACjBC,IAAI,EAAC,aAAa;IAClBC,KAAK,EAAC,aAAa;IACnBC,WAAW,EAAC,iCAAiC;IAC7CC,IAAI,eAAEZ,KAAA,CAAAO,aAAA,CAACJ,eAAe,MAAE,CAAE;IAC1BU,MAAM,EAAET;EAA2B,CACtC,CACQ,CAAC;AAEtB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const COGNITO_PERMISSIONS_SCHEMA: {
|
|
2
|
+
readonly prefix: "adminUsers";
|
|
3
|
+
readonly fullAccess: true;
|
|
4
|
+
readonly entities: [{
|
|
5
|
+
readonly id: "user";
|
|
6
|
+
readonly title: "Users";
|
|
7
|
+
readonly permission: "adminUsers.user";
|
|
8
|
+
readonly scopes: ["full"];
|
|
9
|
+
}];
|
|
10
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createPermissionSchema } from "@webiny/app-admin";
|
|
2
|
+
export const COGNITO_PERMISSIONS_SCHEMA = createPermissionSchema({
|
|
3
|
+
prefix: "adminUsers",
|
|
4
|
+
fullAccess: true,
|
|
5
|
+
entities: [{
|
|
6
|
+
id: "user",
|
|
7
|
+
title: "Users",
|
|
8
|
+
permission: "adminUsers.user",
|
|
9
|
+
scopes: ["full"]
|
|
10
|
+
}]
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=permissionsSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createPermissionSchema","COGNITO_PERMISSIONS_SCHEMA","prefix","fullAccess","entities","id","title","permission","scopes"],"sources":["permissionsSchema.ts"],"sourcesContent":["import { createPermissionSchema } from \"@webiny/app-admin\";\n\nexport const COGNITO_PERMISSIONS_SCHEMA = createPermissionSchema({\n prefix: \"adminUsers\",\n fullAccess: true,\n entities: [\n {\n id: \"user\",\n title: \"Users\",\n permission: \"adminUsers.user\",\n scopes: [\"full\"]\n }\n ]\n});\n"],"mappings":"AAAA,SAASA,sBAAsB,QAAQ,mBAAmB;AAE1D,OAAO,MAAMC,0BAA0B,GAAGD,sBAAsB,CAAC;EAC7DE,MAAM,EAAE,YAAY;EACpBC,UAAU,EAAE,IAAI;EAChBC,QAAQ,EAAE,CACN;IACIC,EAAE,EAAE,MAAM;IACVC,KAAK,EAAE,OAAO;IACdC,UAAU,EAAE,iBAAiB;IAC7BC,MAAM,EAAE,CAAC,MAAM;EACnB,CAAC;AAET,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Permissions } from "@webiny/app-admin/exports/admin/security.js";
|
|
2
|
+
import { COGNITO_PERMISSIONS_SCHEMA } from "../../../admin/domain/permissionsSchema.js";
|
|
3
|
+
export declare const CognitoPermissions: import("@webiny/di").Abstraction<{
|
|
4
|
+
canAccess: (entityId: "user") => boolean;
|
|
5
|
+
canAction: (action: string, entityId: "user") => boolean;
|
|
6
|
+
} & {
|
|
7
|
+
canRead: (entityId: string) => boolean;
|
|
8
|
+
canCreate: (entityId: string) => boolean;
|
|
9
|
+
canEdit: (entityId: string, item?: import("@webiny/app-admin/permissions").OwnableItem) => boolean;
|
|
10
|
+
canDelete: (entityId: string, item?: import("@webiny/app-admin/permissions").OwnableItem) => boolean;
|
|
11
|
+
} & {
|
|
12
|
+
canPublish: (entityId: string) => boolean;
|
|
13
|
+
canUnpublish: (entityId: string) => boolean;
|
|
14
|
+
}>;
|
|
15
|
+
export declare namespace CognitoPermissions {
|
|
16
|
+
type Interface = Permissions<typeof COGNITO_PERMISSIONS_SCHEMA>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createPermissionsAbstraction } from "@webiny/app-admin/exports/admin/security.js";
|
|
2
|
+
import { COGNITO_PERMISSIONS_SCHEMA } from "../../domain/permissionsSchema.js";
|
|
3
|
+
export const CognitoPermissions = createPermissionsAbstraction(COGNITO_PERMISSIONS_SCHEMA);
|
|
4
|
+
|
|
5
|
+
//# sourceMappingURL=abstractions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createPermissionsAbstraction","COGNITO_PERMISSIONS_SCHEMA","CognitoPermissions"],"sources":["abstractions.ts"],"sourcesContent":["import { createPermissionsAbstraction } from \"@webiny/app-admin/exports/admin/security.js\";\nimport type { Permissions } from \"@webiny/app-admin/exports/admin/security.js\";\nimport { COGNITO_PERMISSIONS_SCHEMA } from \"~/admin/domain/permissionsSchema.js\";\n\nexport const CognitoPermissions = createPermissionsAbstraction(COGNITO_PERMISSIONS_SCHEMA);\n\nexport namespace CognitoPermissions {\n export type Interface = Permissions<typeof COGNITO_PERMISSIONS_SCHEMA>;\n}\n"],"mappings":"AAAA,SAASA,4BAA4B,QAAQ,6CAA6C;AAE1F,SAASC,0BAA0B;AAEnC,OAAO,MAAMC,kBAAkB,GAAGF,4BAA4B,CAACC,0BAA0B,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const CognitoPermissionsFeature: import("@webiny/feature/admin").FeatureDefinition<{
|
|
2
|
+
permissions: {
|
|
3
|
+
canAccess: (entityId: "user") => boolean;
|
|
4
|
+
canAction: (action: string, entityId: "user") => boolean;
|
|
5
|
+
} & {
|
|
6
|
+
canRead: (entityId: string) => boolean;
|
|
7
|
+
canCreate: (entityId: string) => boolean;
|
|
8
|
+
canEdit: (entityId: string, item?: import("@webiny/app-admin/index.js").OwnableItem) => boolean;
|
|
9
|
+
canDelete: (entityId: string, item?: import("@webiny/app-admin/index.js").OwnableItem) => boolean;
|
|
10
|
+
} & {
|
|
11
|
+
canPublish: (entityId: string) => boolean;
|
|
12
|
+
canUnpublish: (entityId: string) => boolean;
|
|
13
|
+
};
|
|
14
|
+
}, []>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createPermissionsFeature } from "@webiny/app-admin/exports/admin/security.js";
|
|
2
|
+
import { CognitoPermissions } from "./abstractions.js";
|
|
3
|
+
import { COGNITO_PERMISSIONS_SCHEMA } from "../../domain/permissionsSchema.js";
|
|
4
|
+
export const CognitoPermissionsFeature = createPermissionsFeature(COGNITO_PERMISSIONS_SCHEMA, CognitoPermissions);
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createPermissionsFeature","CognitoPermissions","COGNITO_PERMISSIONS_SCHEMA","CognitoPermissionsFeature"],"sources":["feature.ts"],"sourcesContent":["import { createPermissionsFeature } from \"@webiny/app-admin/exports/admin/security.js\";\nimport { CognitoPermissions } from \"./abstractions.js\";\nimport { COGNITO_PERMISSIONS_SCHEMA } from \"~/admin/domain/permissionsSchema.js\";\n\nexport const CognitoPermissionsFeature = createPermissionsFeature(\n COGNITO_PERMISSIONS_SCHEMA,\n CognitoPermissions\n);\n"],"mappings":"AAAA,SAASA,wBAAwB,QAAQ,6CAA6C;AACtF,SAASC,kBAAkB;AAC3B,SAASC,0BAA0B;AAEnC,OAAO,MAAMC,yBAAyB,GAAGH,wBAAwB,CAC7DE,0BAA0B,EAC1BD,kBACJ,CAAC","ignoreList":[]}
|
|
@@ -10,7 +10,6 @@ declare class CognitoPresenterImpl implements CognitoPresenterAbstraction.Interf
|
|
|
10
10
|
private checkingSession;
|
|
11
11
|
private isLoggingIn;
|
|
12
12
|
private formLoading;
|
|
13
|
-
private cognitoUser;
|
|
14
13
|
private initialized;
|
|
15
14
|
constructor(identity: IdentityContext.Interface, logInUseCase: LogInUseCase.Interface);
|
|
16
15
|
get vm(): {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { makeAutoObservable, runInAction } from "mobx";
|
|
2
|
-
import {
|
|
2
|
+
import { Amplify } from "aws-amplify";
|
|
3
|
+
import { signIn, signOut, confirmSignIn, resetPassword, confirmResetPassword, fetchAuthSession } from "aws-amplify/auth";
|
|
3
4
|
import { CognitoPresenter as CognitoPresenterAbstraction } from "./abstractions.js";
|
|
4
5
|
import { LogInUseCase } from "@webiny/app-admin/features/security/LogIn/index.js";
|
|
5
6
|
import { IdentityContext } from "@webiny/app-admin/features/security/IdentityContext/index.js";
|
|
@@ -10,7 +11,6 @@ class CognitoPresenterImpl {
|
|
|
10
11
|
checkingSession = false;
|
|
11
12
|
isLoggingIn = false;
|
|
12
13
|
formLoading = false;
|
|
13
|
-
cognitoUser = null;
|
|
14
14
|
initialized = false;
|
|
15
15
|
constructor(identity, logInUseCase) {
|
|
16
16
|
this.identity = identity;
|
|
@@ -51,12 +51,14 @@ class CognitoPresenterImpl {
|
|
|
51
51
|
if (this.initialized) {
|
|
52
52
|
return;
|
|
53
53
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
54
|
+
Amplify.configure({
|
|
55
|
+
Auth: {
|
|
56
|
+
Cognito: {
|
|
57
|
+
userPoolId: params.userPoolId,
|
|
58
|
+
userPoolClientId: params.clientId
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
60
62
|
this.initialized = true;
|
|
61
63
|
await this.checkUrl();
|
|
62
64
|
}
|
|
@@ -69,13 +71,18 @@ class CognitoPresenterImpl {
|
|
|
69
71
|
});
|
|
70
72
|
const usernameOrPassword = ["UserNotFoundException", "NotAuthorizedException"];
|
|
71
73
|
try {
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
+
const result = await signIn({
|
|
75
|
+
username,
|
|
76
|
+
password
|
|
77
|
+
});
|
|
78
|
+
const {
|
|
79
|
+
nextStep
|
|
80
|
+
} = result;
|
|
81
|
+
if (nextStep.signInStep === "CONFIRM_SIGN_IN_WITH_NEW_PASSWORD_REQUIRED") {
|
|
74
82
|
runInAction(() => {
|
|
75
|
-
this.cognitoUser = user;
|
|
76
83
|
this.authState = "requireNewPassword";
|
|
77
84
|
this.authData = {
|
|
78
|
-
requiredAttributes:
|
|
85
|
+
requiredAttributes: nextStep.missingAttributes || []
|
|
79
86
|
};
|
|
80
87
|
this.formLoading = false;
|
|
81
88
|
});
|
|
@@ -87,7 +94,7 @@ class CognitoPresenterImpl {
|
|
|
87
94
|
}
|
|
88
95
|
} catch (error) {
|
|
89
96
|
let message = error.message;
|
|
90
|
-
if (usernameOrPassword.includes(error.
|
|
97
|
+
if (usernameOrPassword.includes(error.name)) {
|
|
91
98
|
message = "Incorrect username or password.";
|
|
92
99
|
}
|
|
93
100
|
runInAction(() => {
|
|
@@ -106,7 +113,12 @@ class CognitoPresenterImpl {
|
|
|
106
113
|
this.message = null;
|
|
107
114
|
});
|
|
108
115
|
try {
|
|
109
|
-
await
|
|
116
|
+
await confirmSignIn({
|
|
117
|
+
challengeResponse: password,
|
|
118
|
+
options: {
|
|
119
|
+
userAttributes: requiredAttributes
|
|
120
|
+
}
|
|
121
|
+
});
|
|
110
122
|
await this.handleSignedIn();
|
|
111
123
|
} catch (error) {
|
|
112
124
|
runInAction(() => {
|
|
@@ -128,7 +140,9 @@ class CognitoPresenterImpl {
|
|
|
128
140
|
this.message = null;
|
|
129
141
|
});
|
|
130
142
|
try {
|
|
131
|
-
await
|
|
143
|
+
await resetPassword({
|
|
144
|
+
username
|
|
145
|
+
});
|
|
132
146
|
} catch {
|
|
133
147
|
// We ignore errors and pretend that everything went fine.
|
|
134
148
|
// Showing an error would give a potential attacker information about which usernames exist (or not).
|
|
@@ -167,7 +181,11 @@ class CognitoPresenterImpl {
|
|
|
167
181
|
this.message = null;
|
|
168
182
|
});
|
|
169
183
|
try {
|
|
170
|
-
await
|
|
184
|
+
await confirmResetPassword({
|
|
185
|
+
username,
|
|
186
|
+
confirmationCode: code,
|
|
187
|
+
newPassword: password
|
|
188
|
+
});
|
|
171
189
|
runInAction(() => {
|
|
172
190
|
this.authState = "signIn";
|
|
173
191
|
this.message = {
|
|
@@ -212,11 +230,15 @@ class CognitoPresenterImpl {
|
|
|
212
230
|
try {
|
|
213
231
|
await this.logInUseCase.execute({
|
|
214
232
|
idTokenProvider: async () => {
|
|
215
|
-
const
|
|
216
|
-
|
|
233
|
+
const session = await fetchAuthSession();
|
|
234
|
+
const idToken = session.tokens?.idToken;
|
|
235
|
+
if (!idToken) {
|
|
236
|
+
throw new Error("No ID token available.");
|
|
237
|
+
}
|
|
238
|
+
return idToken.toString();
|
|
217
239
|
},
|
|
218
240
|
logoutCallback: () => {
|
|
219
|
-
|
|
241
|
+
signOut();
|
|
220
242
|
runInAction(() => {
|
|
221
243
|
this.authState = "signIn";
|
|
222
244
|
this.authData = null;
|
|
@@ -255,8 +277,8 @@ class CognitoPresenterImpl {
|
|
|
255
277
|
this.checkingSession = true;
|
|
256
278
|
});
|
|
257
279
|
try {
|
|
258
|
-
const
|
|
259
|
-
if (
|
|
280
|
+
const session = await fetchAuthSession();
|
|
281
|
+
if (session.tokens) {
|
|
260
282
|
// We don't need to `await`, we simply start a separate "branch" of execution.
|
|
261
283
|
this.handleSignedIn();
|
|
262
284
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["makeAutoObservable","runInAction","Auth","CognitoPresenter","CognitoPresenterAbstraction","LogInUseCase","IdentityContext","CognitoPresenterImpl","authState","authData","message","checkingSession","isLoggingIn","formLoading","cognitoUser","initialized","constructor","identity","logInUseCase","vm","getIdentity","isAuthenticated","signIn","isLoading","requestPasswordResetCode","passwordResetCodeSent","setNewPassword","requireNewPassword","requiredAttributes","init","params","authConfig","region","userPoolId","userPoolWebClientId","clientId","configure","checkUrl","username","password","usernameOrPassword","user","challengeName","challengeParam","handleSignedIn","error","includes","code","title","text","type","confirmNewPassword","completeNewPassword","requestPasswordReset","forgotPassword","resendPasswordResetCode","confirmPasswordReset","forgotPasswordSubmit","showSignIn","showRequestPasswordResetCode","showSetNewPassword","execute","idTokenProvider","currentSession","getIdToken","getJwtToken","logoutCallback","signOut","console","query","URLSearchParams","window","location","search","queryData","forEach","value","key","state","checkSession","createImplementation","implementation","dependencies"],"sources":["CognitoPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction } from \"mobx\";\nimport { Auth } from \"@aws-amplify/auth\";\nimport { AuthOptions } from \"@aws-amplify/auth/lib-esm/types/index.js\";\nimport {\n CognitoPresenter as CognitoPresenterAbstraction,\n AuthState,\n AuthData,\n AuthMessage,\n ICognitoInitParams\n} from \"./abstractions.js\";\nimport { LogInUseCase } from \"@webiny/app-admin/features/security/LogIn/index.js\";\nimport { IdentityContext } from \"@webiny/app-admin/features/security/IdentityContext/index.js\";\n\nclass CognitoPresenterImpl implements CognitoPresenterAbstraction.Interface {\n private authState: AuthState = \"signIn\";\n private authData: AuthData | null = null;\n private message: AuthMessage | null = null;\n private checkingSession = false;\n private isLoggingIn = false;\n private formLoading = false;\n private cognitoUser: any = null;\n private initialized = false;\n\n constructor(\n private identity: IdentityContext.Interface,\n private logInUseCase: LogInUseCase.Interface\n ) {\n makeAutoObservable(this);\n }\n\n get vm() {\n const identity = this.identity.getIdentity();\n\n return {\n authState: this.authState,\n checkingSession: this.checkingSession,\n isLoggingIn: this.isLoggingIn,\n isAuthenticated: identity.isAuthenticated,\n\n // View-specific VMs\n signIn: {\n isLoading: this.formLoading,\n message: this.message\n },\n requestPasswordResetCode: {\n isLoading: this.formLoading,\n message: this.message\n },\n passwordResetCodeSent: {\n isLoading: this.formLoading,\n message: this.message\n },\n setNewPassword: {\n isLoading: this.formLoading,\n message: this.message\n },\n requireNewPassword: {\n isLoading: this.formLoading,\n requiredAttributes: (this.authData && this.authData.requiredAttributes) || []\n }\n };\n }\n\n async init(params: ICognitoInitParams): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n const authConfig: AuthOptions = {\n region: params.region,\n userPoolId: params.userPoolId,\n userPoolWebClientId: params.clientId\n };\n\n Auth.configure(authConfig);\n this.initialized = true;\n\n await this.checkUrl();\n }\n\n // Public API\n async signIn(username: string, password: string): Promise<void> {\n runInAction(() => {\n this.formLoading = true;\n this.message = null;\n });\n\n const usernameOrPassword = [\"UserNotFoundException\", \"NotAuthorizedException\"];\n\n try {\n const user = await Auth.signIn(username, password);\n\n if (user.challengeName === \"NEW_PASSWORD_REQUIRED\") {\n runInAction(() => {\n this.cognitoUser = user;\n this.authState = \"requireNewPassword\";\n this.authData = {\n requiredAttributes: user.challengeParam.requiredAttributes || []\n };\n this.formLoading = false;\n });\n } else {\n await this.handleSignedIn();\n runInAction(() => {\n this.formLoading = false;\n });\n }\n } catch (error) {\n let message = error.message;\n\n if (usernameOrPassword.includes(error.code)) {\n message = \"Incorrect username or password.\";\n }\n runInAction(() => {\n this.message = {\n title: \"Login Failed\",\n text: message,\n type: \"danger\"\n };\n this.formLoading = false;\n });\n }\n }\n\n async confirmNewPassword(password: string, requiredAttributes: any): Promise<void> {\n runInAction(() => {\n this.formLoading = true;\n this.message = null;\n });\n\n try {\n await Auth.completeNewPassword(this.cognitoUser, password, requiredAttributes);\n await this.handleSignedIn();\n } catch (error) {\n runInAction(() => {\n this.message = {\n title: \"Error\",\n text: error.message,\n type: \"danger\"\n };\n });\n } finally {\n runInAction(() => {\n this.formLoading = false;\n });\n }\n }\n\n async requestPasswordReset(username: string): Promise<void> {\n runInAction(() => {\n this.formLoading = true;\n this.message = null;\n });\n\n try {\n await Auth.forgotPassword(username);\n } catch {\n // We ignore errors and pretend that everything went fine.\n // Showing an error would give a potential attacker information about which usernames exist (or not).\n // This way it's more difficult to exploit the process.\n } finally {\n runInAction(() => {\n this.authState = \"passwordResetCodeSent\";\n this.authData = { username };\n this.formLoading = false;\n });\n }\n }\n\n async resendPasswordResetCode(): Promise<void> {\n const username = this.authData?.username;\n if (this.authState !== \"passwordResetCodeSent\" || !username) {\n return;\n }\n\n await this.requestPasswordReset(username!);\n runInAction(() => {\n this.message = {\n title: \"Code Resent\",\n text: \"Password reset code has been resent to your email address. Please check your inbox!\",\n type: \"success\"\n };\n });\n }\n\n async confirmPasswordReset(code: string, password: string): Promise<void> {\n const username = this.authData?.username;\n if (!username) {\n return;\n }\n\n runInAction(() => {\n this.formLoading = true;\n this.message = null;\n });\n\n try {\n await Auth.forgotPasswordSubmit(username, code, password);\n runInAction(() => {\n this.authState = \"signIn\";\n this.message = {\n title: \"Password Reset\",\n text: \"You can now sign in with your new password\",\n type: \"success\"\n };\n });\n } catch (error) {\n runInAction(() => {\n this.message = {\n title: \"Error\",\n text: error.message,\n type: \"danger\"\n };\n });\n } finally {\n runInAction(() => {\n this.formLoading = false;\n });\n }\n }\n\n showSignIn(): void {\n this.authState = \"signIn\";\n this.authData = null;\n this.message = null;\n }\n\n showRequestPasswordResetCode(): void {\n this.authState = \"requestPasswordResetCode\";\n this.message = null;\n }\n\n showSetNewPassword(): void {\n this.authState = \"setNewPassword\";\n this.message = null;\n }\n\n // Private/internal methods\n private async handleSignedIn(): Promise<void> {\n runInAction(() => {\n this.isLoggingIn = true;\n });\n\n try {\n await this.logInUseCase.execute({\n idTokenProvider: async () => {\n const currentSession = await Auth.currentSession();\n return currentSession.getIdToken().getJwtToken();\n },\n logoutCallback: () => {\n Auth.signOut();\n runInAction(() => {\n this.authState = \"signIn\";\n this.authData = null;\n });\n }\n });\n\n runInAction(() => {\n this.authState = \"signedIn\";\n });\n } catch (error) {\n console.error(\"Error during sign in:\", error);\n runInAction(() => {\n this.authState = \"signIn\";\n });\n } finally {\n runInAction(() => {\n this.isLoggingIn = false;\n });\n }\n }\n\n private async checkUrl(): Promise<void> {\n const query = new URLSearchParams(window.location.search);\n const queryData: Record<string, string> = {};\n query.forEach((value, key) => (queryData[key] = value));\n const { state } = queryData;\n\n if (state) {\n // Handle state from URL if needed\n return;\n }\n\n return this.checkSession();\n }\n\n private async checkSession(): Promise<void> {\n runInAction(() => {\n this.checkingSession = true;\n });\n\n try {\n const cognitoUser = await Auth.currentSession();\n if (cognitoUser) {\n // We don't need to `await`, we simply start a separate \"branch\" of execution.\n this.handleSignedIn();\n }\n } catch {\n // Not authenticated, stay on signIn\n } finally {\n runInAction(() => {\n this.checkingSession = false;\n });\n }\n }\n}\n\nexport const CognitoPresenter = CognitoPresenterAbstraction.createImplementation({\n implementation: CognitoPresenterImpl,\n dependencies: [IdentityContext, LogInUseCase]\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["makeAutoObservable","runInAction","Amplify","signIn","signOut","confirmSignIn","resetPassword","confirmResetPassword","fetchAuthSession","CognitoPresenter","CognitoPresenterAbstraction","LogInUseCase","IdentityContext","CognitoPresenterImpl","authState","authData","message","checkingSession","isLoggingIn","formLoading","initialized","constructor","identity","logInUseCase","vm","getIdentity","isAuthenticated","isLoading","requestPasswordResetCode","passwordResetCodeSent","setNewPassword","requireNewPassword","requiredAttributes","init","params","configure","Auth","Cognito","userPoolId","userPoolClientId","clientId","checkUrl","username","password","usernameOrPassword","result","nextStep","signInStep","missingAttributes","handleSignedIn","error","includes","name","title","text","type","confirmNewPassword","challengeResponse","options","userAttributes","requestPasswordReset","resendPasswordResetCode","confirmPasswordReset","code","confirmationCode","newPassword","showSignIn","showRequestPasswordResetCode","showSetNewPassword","execute","idTokenProvider","session","idToken","tokens","Error","toString","logoutCallback","console","query","URLSearchParams","window","location","search","queryData","forEach","value","key","state","checkSession","createImplementation","implementation","dependencies"],"sources":["CognitoPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction } from \"mobx\";\nimport { Amplify } from \"aws-amplify\";\nimport {\n signIn,\n signOut,\n confirmSignIn,\n resetPassword,\n confirmResetPassword,\n fetchAuthSession\n} from \"aws-amplify/auth\";\nimport {\n CognitoPresenter as CognitoPresenterAbstraction,\n AuthState,\n AuthData,\n AuthMessage,\n ICognitoInitParams\n} from \"./abstractions.js\";\nimport { LogInUseCase } from \"@webiny/app-admin/features/security/LogIn/index.js\";\nimport { IdentityContext } from \"@webiny/app-admin/features/security/IdentityContext/index.js\";\n\nclass CognitoPresenterImpl implements CognitoPresenterAbstraction.Interface {\n private authState: AuthState = \"signIn\";\n private authData: AuthData | null = null;\n private message: AuthMessage | null = null;\n private checkingSession = false;\n private isLoggingIn = false;\n private formLoading = false;\n private initialized = false;\n\n constructor(\n private identity: IdentityContext.Interface,\n private logInUseCase: LogInUseCase.Interface\n ) {\n makeAutoObservable(this);\n }\n\n get vm() {\n const identity = this.identity.getIdentity();\n\n return {\n authState: this.authState,\n checkingSession: this.checkingSession,\n isLoggingIn: this.isLoggingIn,\n isAuthenticated: identity.isAuthenticated,\n\n // View-specific VMs\n signIn: {\n isLoading: this.formLoading,\n message: this.message\n },\n requestPasswordResetCode: {\n isLoading: this.formLoading,\n message: this.message\n },\n passwordResetCodeSent: {\n isLoading: this.formLoading,\n message: this.message\n },\n setNewPassword: {\n isLoading: this.formLoading,\n message: this.message\n },\n requireNewPassword: {\n isLoading: this.formLoading,\n requiredAttributes: (this.authData && this.authData.requiredAttributes) || []\n }\n };\n }\n\n async init(params: ICognitoInitParams): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n Amplify.configure({\n Auth: {\n Cognito: {\n userPoolId: params.userPoolId,\n userPoolClientId: params.clientId\n }\n }\n });\n this.initialized = true;\n\n await this.checkUrl();\n }\n\n // Public API\n async signIn(username: string, password: string): Promise<void> {\n runInAction(() => {\n this.formLoading = true;\n this.message = null;\n });\n\n const usernameOrPassword = [\"UserNotFoundException\", \"NotAuthorizedException\"];\n\n try {\n const result = await signIn({ username, password });\n const { nextStep } = result;\n\n if (nextStep.signInStep === \"CONFIRM_SIGN_IN_WITH_NEW_PASSWORD_REQUIRED\") {\n runInAction(() => {\n this.authState = \"requireNewPassword\";\n this.authData = {\n requiredAttributes: nextStep.missingAttributes || []\n };\n this.formLoading = false;\n });\n } else {\n await this.handleSignedIn();\n runInAction(() => {\n this.formLoading = false;\n });\n }\n } catch (error) {\n let message = error.message;\n\n if (usernameOrPassword.includes(error.name)) {\n message = \"Incorrect username or password.\";\n }\n runInAction(() => {\n this.message = {\n title: \"Login Failed\",\n text: message,\n type: \"danger\"\n };\n this.formLoading = false;\n });\n }\n }\n\n async confirmNewPassword(password: string, requiredAttributes: any): Promise<void> {\n runInAction(() => {\n this.formLoading = true;\n this.message = null;\n });\n\n try {\n await confirmSignIn({\n challengeResponse: password,\n options: { userAttributes: requiredAttributes }\n });\n await this.handleSignedIn();\n } catch (error) {\n runInAction(() => {\n this.message = {\n title: \"Error\",\n text: error.message,\n type: \"danger\"\n };\n });\n } finally {\n runInAction(() => {\n this.formLoading = false;\n });\n }\n }\n\n async requestPasswordReset(username: string): Promise<void> {\n runInAction(() => {\n this.formLoading = true;\n this.message = null;\n });\n\n try {\n await resetPassword({ username });\n } catch {\n // We ignore errors and pretend that everything went fine.\n // Showing an error would give a potential attacker information about which usernames exist (or not).\n // This way it's more difficult to exploit the process.\n } finally {\n runInAction(() => {\n this.authState = \"passwordResetCodeSent\";\n this.authData = { username };\n this.formLoading = false;\n });\n }\n }\n\n async resendPasswordResetCode(): Promise<void> {\n const username = this.authData?.username;\n if (this.authState !== \"passwordResetCodeSent\" || !username) {\n return;\n }\n\n await this.requestPasswordReset(username!);\n runInAction(() => {\n this.message = {\n title: \"Code Resent\",\n text: \"Password reset code has been resent to your email address. Please check your inbox!\",\n type: \"success\"\n };\n });\n }\n\n async confirmPasswordReset(code: string, password: string): Promise<void> {\n const username = this.authData?.username;\n if (!username) {\n return;\n }\n\n runInAction(() => {\n this.formLoading = true;\n this.message = null;\n });\n\n try {\n await confirmResetPassword({\n username,\n confirmationCode: code,\n newPassword: password\n });\n runInAction(() => {\n this.authState = \"signIn\";\n this.message = {\n title: \"Password Reset\",\n text: \"You can now sign in with your new password\",\n type: \"success\"\n };\n });\n } catch (error) {\n runInAction(() => {\n this.message = {\n title: \"Error\",\n text: error.message,\n type: \"danger\"\n };\n });\n } finally {\n runInAction(() => {\n this.formLoading = false;\n });\n }\n }\n\n showSignIn(): void {\n this.authState = \"signIn\";\n this.authData = null;\n this.message = null;\n }\n\n showRequestPasswordResetCode(): void {\n this.authState = \"requestPasswordResetCode\";\n this.message = null;\n }\n\n showSetNewPassword(): void {\n this.authState = \"setNewPassword\";\n this.message = null;\n }\n\n // Private/internal methods\n private async handleSignedIn(): Promise<void> {\n runInAction(() => {\n this.isLoggingIn = true;\n });\n\n try {\n await this.logInUseCase.execute({\n idTokenProvider: async () => {\n const session = await fetchAuthSession();\n const idToken = session.tokens?.idToken;\n if (!idToken) {\n throw new Error(\"No ID token available.\");\n }\n return idToken.toString();\n },\n logoutCallback: () => {\n signOut();\n runInAction(() => {\n this.authState = \"signIn\";\n this.authData = null;\n });\n }\n });\n\n runInAction(() => {\n this.authState = \"signedIn\";\n });\n } catch (error) {\n console.error(\"Error during sign in:\", error);\n runInAction(() => {\n this.authState = \"signIn\";\n });\n } finally {\n runInAction(() => {\n this.isLoggingIn = false;\n });\n }\n }\n\n private async checkUrl(): Promise<void> {\n const query = new URLSearchParams(window.location.search);\n const queryData: Record<string, string> = {};\n query.forEach((value, key) => (queryData[key] = value));\n const { state } = queryData;\n\n if (state) {\n // Handle state from URL if needed\n return;\n }\n\n return this.checkSession();\n }\n\n private async checkSession(): Promise<void> {\n runInAction(() => {\n this.checkingSession = true;\n });\n\n try {\n const session = await fetchAuthSession();\n if (session.tokens) {\n // We don't need to `await`, we simply start a separate \"branch\" of execution.\n this.handleSignedIn();\n }\n } catch {\n // Not authenticated, stay on signIn\n } finally {\n runInAction(() => {\n this.checkingSession = false;\n });\n }\n }\n}\n\nexport const CognitoPresenter = CognitoPresenterAbstraction.createImplementation({\n implementation: CognitoPresenterImpl,\n dependencies: [IdentityContext, LogInUseCase]\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
2
|
+
import { signInWithRedirect } from "aws-amplify/auth";
|
|
3
3
|
import { federatedIdentityProviders } from "../../../federatedIdentityProviders.js";
|
|
4
4
|
import { FederatedProviders } from "./FederatedProviders.js";
|
|
5
|
+
const builtInProviders = new Set(["Amazon", "Apple", "Facebook", "Google"]);
|
|
5
6
|
export const FederatedLogin = ({
|
|
6
7
|
providers
|
|
7
8
|
}) => {
|
|
@@ -10,15 +11,17 @@ export const FederatedLogin = ({
|
|
|
10
11
|
component: Component
|
|
11
12
|
}) => {
|
|
12
13
|
const cognitoProviderName = federatedIdentityProviders[name] ?? name;
|
|
13
|
-
const
|
|
14
|
+
const isBuiltIn = builtInProviders.has(cognitoProviderName);
|
|
14
15
|
const signIn = () => {
|
|
15
|
-
if (
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
if (isBuiltIn) {
|
|
17
|
+
signInWithRedirect({
|
|
18
|
+
provider: cognitoProviderName
|
|
18
19
|
});
|
|
19
20
|
} else {
|
|
20
|
-
|
|
21
|
-
provider:
|
|
21
|
+
signInWithRedirect({
|
|
22
|
+
provider: {
|
|
23
|
+
custom: cognitoProviderName
|
|
24
|
+
}
|
|
22
25
|
});
|
|
23
26
|
}
|
|
24
27
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","
|
|
1
|
+
{"version":3,"names":["React","signInWithRedirect","federatedIdentityProviders","FederatedProviders","builtInProviders","Set","FederatedLogin","providers","createElement","Container","map","name","component","Component","cognitoProviderName","isBuiltIn","has","signIn","provider","custom","key"],"sources":["FederatedLogin.tsx"],"sourcesContent":["import React from \"react\";\nimport { signInWithRedirect } from \"aws-amplify/auth\";\nimport type { FederatedIdentityProvider } from \"~/admin/federatedIdentityProviders.js\";\nimport { federatedIdentityProviders } from \"~/admin/federatedIdentityProviders.js\";\nimport { FederatedProviders } from \"./FederatedProviders.js\";\n\ntype AuthProvider = \"Amazon\" | \"Apple\" | \"Facebook\" | \"Google\";\n\nconst builtInProviders = new Set<string>([\"Amazon\", \"Apple\", \"Facebook\", \"Google\"]);\n\ninterface FederatedLoginProps {\n providers: FederatedIdentityProvider[];\n}\n\nexport const FederatedLogin = ({ providers }: FederatedLoginProps) => {\n return (\n <FederatedProviders.Container>\n {providers.map(({ name, component: Component }) => {\n const cognitoProviderName = federatedIdentityProviders[name] ?? name;\n const isBuiltIn = builtInProviders.has(cognitoProviderName);\n\n const signIn = () => {\n if (isBuiltIn) {\n signInWithRedirect({\n provider: cognitoProviderName as AuthProvider\n });\n } else {\n signInWithRedirect({\n provider: { custom: cognitoProviderName }\n });\n }\n };\n\n return <Component key={name} signIn={signIn} />;\n })}\n </FederatedProviders.Container>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,kBAAkB,QAAQ,kBAAkB;AAErD,SAASC,0BAA0B;AACnC,SAASC,kBAAkB;AAI3B,MAAMC,gBAAgB,GAAG,IAAIC,GAAG,CAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAMnF,OAAO,MAAMC,cAAc,GAAGA,CAAC;EAAEC;AAA+B,CAAC,KAAK;EAClE,oBACIP,KAAA,CAAAQ,aAAA,CAACL,kBAAkB,CAACM,SAAS,QACxBF,SAAS,CAACG,GAAG,CAAC,CAAC;IAAEC,IAAI;IAAEC,SAAS,EAAEC;EAAU,CAAC,KAAK;IAC/C,MAAMC,mBAAmB,GAAGZ,0BAA0B,CAACS,IAAI,CAAC,IAAIA,IAAI;IACpE,MAAMI,SAAS,GAAGX,gBAAgB,CAACY,GAAG,CAACF,mBAAmB,CAAC;IAE3D,MAAMG,MAAM,GAAGA,CAAA,KAAM;MACjB,IAAIF,SAAS,EAAE;QACXd,kBAAkB,CAAC;UACfiB,QAAQ,EAAEJ;QACd,CAAC,CAAC;MACN,CAAC,MAAM;QACHb,kBAAkB,CAAC;UACfiB,QAAQ,EAAE;YAAEC,MAAM,EAAEL;UAAoB;QAC5C,CAAC,CAAC;MACN;IACJ,CAAC;IAED,oBAAOd,KAAA,CAAAQ,aAAA,CAACK,SAAS;MAACO,GAAG,EAAET,IAAK;MAACM,MAAM,EAAEA;IAAO,CAAE,CAAC;EACnD,CAAC,CACyB,CAAC;AAEvC,CAAC","ignoreList":[]}
|
|
@@ -3,7 +3,7 @@ export const createPasswordValidator = policy => value => {
|
|
|
3
3
|
if (!value) {
|
|
4
4
|
return;
|
|
5
5
|
}
|
|
6
|
-
const requireSymbols = /([
|
|
6
|
+
const requireSymbols = /([=+\-^$*.[\]{}()?"!@#%&/,><':;|_~`])+/;
|
|
7
7
|
const requireNumber = /[0-9]/;
|
|
8
8
|
const requireLowercase = /[a-z]/;
|
|
9
9
|
const requireUppercase = /[A-Z]/;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ValidationError","createPasswordValidator","policy","value","requireSymbols","requireNumber","requireLowercase","requireUppercase","minimumLength","undefined","length","test","requireNumbers"],"sources":["createPasswordValidator.ts"],"sourcesContent":["import { ValidationError } from \"@webiny/validation\";\n\nexport interface PasswordPolicy {\n minimumLength?: number;\n requireLowercase?: boolean;\n requireNumbers?: boolean;\n requireSymbols?: boolean;\n requireUppercase?: boolean;\n}\n\nexport const createPasswordValidator =\n (policy: PasswordPolicy) =>\n (value?: string): void => {\n if (!value) {\n return;\n }\n\n const requireSymbols = /([
|
|
1
|
+
{"version":3,"names":["ValidationError","createPasswordValidator","policy","value","requireSymbols","requireNumber","requireLowercase","requireUppercase","minimumLength","undefined","length","test","requireNumbers"],"sources":["createPasswordValidator.ts"],"sourcesContent":["import { ValidationError } from \"@webiny/validation\";\n\nexport interface PasswordPolicy {\n minimumLength?: number;\n requireLowercase?: boolean;\n requireNumbers?: boolean;\n requireSymbols?: boolean;\n requireUppercase?: boolean;\n}\n\nexport const createPasswordValidator =\n (policy: PasswordPolicy) =>\n (value?: string): void => {\n if (!value) {\n return;\n }\n\n const requireSymbols = /([=+\\-^$*.[\\]{}()?\"!@#%&/,><':;|_~`])+/;\n const requireNumber = /[0-9]/;\n const requireLowercase = /[a-z]/;\n const requireUppercase = /[A-Z]/;\n\n if (policy.minimumLength !== undefined && value.length < policy.minimumLength) {\n throw new ValidationError(\n `Value requires at least ${policy.minimumLength} characters.`\n );\n }\n\n if (policy.requireLowercase && !requireLowercase.test(value)) {\n throw new ValidationError(\"Value must contain a lowercase character.\");\n }\n\n if (policy.requireNumbers && !requireNumber.test(value)) {\n throw new ValidationError(\"Value must contain a number.\");\n }\n\n if (policy.requireUppercase && !requireUppercase.test(value)) {\n throw new ValidationError(\"Value must contain an uppercase character.\");\n }\n\n if (policy.requireSymbols && !requireSymbols.test(value)) {\n throw new ValidationError(\"Value must contain a special character.\");\n }\n };\n"],"mappings":"AAAA,SAASA,eAAe,QAAQ,oBAAoB;AAUpD,OAAO,MAAMC,uBAAuB,GAC/BC,MAAsB,IACtBC,KAAc,IAAW;EACtB,IAAI,CAACA,KAAK,EAAE;IACR;EACJ;EAEA,MAAMC,cAAc,GAAG,wCAAwC;EAC/D,MAAMC,aAAa,GAAG,OAAO;EAC7B,MAAMC,gBAAgB,GAAG,OAAO;EAChC,MAAMC,gBAAgB,GAAG,OAAO;EAEhC,IAAIL,MAAM,CAACM,aAAa,KAAKC,SAAS,IAAIN,KAAK,CAACO,MAAM,GAAGR,MAAM,CAACM,aAAa,EAAE;IAC3E,MAAM,IAAIR,eAAe,CACrB,2BAA2BE,MAAM,CAACM,aAAa,cACnD,CAAC;EACL;EAEA,IAAIN,MAAM,CAACI,gBAAgB,IAAI,CAACA,gBAAgB,CAACK,IAAI,CAACR,KAAK,CAAC,EAAE;IAC1D,MAAM,IAAIH,eAAe,CAAC,2CAA2C,CAAC;EAC1E;EAEA,IAAIE,MAAM,CAACU,cAAc,IAAI,CAACP,aAAa,CAACM,IAAI,CAACR,KAAK,CAAC,EAAE;IACrD,MAAM,IAAIH,eAAe,CAAC,8BAA8B,CAAC;EAC7D;EAEA,IAAIE,MAAM,CAACK,gBAAgB,IAAI,CAACA,gBAAgB,CAACI,IAAI,CAACR,KAAK,CAAC,EAAE;IAC1D,MAAM,IAAIH,eAAe,CAAC,4CAA4C,CAAC;EAC3E;EAEA,IAAIE,MAAM,CAACE,cAAc,IAAI,CAACA,cAAc,CAACO,IAAI,CAACR,KAAK,CAAC,EAAE;IACtD,MAAM,IAAIH,eAAe,CAAC,yCAAyC,CAAC;EACxE;AACJ,CAAC","ignoreList":[]}
|