@webiny/cognito 0.0.0-unstable.3c5210ad37
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 +8 -0
- package/Cognito.js +29 -0
- package/Cognito.js.map +1 -0
- package/LICENSE +21 -0
- package/README.md +11 -0
- package/admin/Cognito.d.ts +6 -0
- package/admin/Cognito.js +51 -0
- package/admin/Cognito.js.map +1 -0
- package/admin/CognitoLogin.d.ts +7 -0
- package/admin/CognitoLogin.js +18 -0
- package/admin/CognitoLogin.js.map +1 -0
- package/admin/Extension.d.ts +2 -0
- package/admin/Extension.js +20 -0
- package/admin/Extension.js.map +1 -0
- package/admin/SecurityPermission.d.ts +2 -0
- package/admin/SecurityPermission.js +26 -0
- package/admin/SecurityPermission.js.map +1 -0
- package/admin/federatedIdentityProviders.d.ts +9 -0
- package/admin/federatedIdentityProviders.js +9 -0
- package/admin/federatedIdentityProviders.js.map +1 -0
- package/admin/plugins/constants.d.ts +3 -0
- package/admin/plugins/constants.js +6 -0
- package/admin/plugins/constants.js.map +1 -0
- package/admin/plugins/userMenu/AccountDetails.d.ts +6 -0
- package/admin/plugins/userMenu/AccountDetails.js +23 -0
- package/admin/plugins/userMenu/AccountDetails.js.map +1 -0
- package/admin/plugins/userMenu/useIsDefaultTenant.d.ts +1 -0
- package/admin/plugins/userMenu/useIsDefaultTenant.js +15 -0
- package/admin/plugins/userMenu/useIsDefaultTenant.js.map +1 -0
- package/admin/presentation/Cognito/CognitoLoginScreen.d.ts +10 -0
- package/admin/presentation/Cognito/CognitoLoginScreen.js +54 -0
- package/admin/presentation/Cognito/CognitoLoginScreen.js.map +1 -0
- package/admin/presentation/Cognito/CognitoPresenter.d.ts +58 -0
- package/admin/presentation/Cognito/CognitoPresenter.js +277 -0
- package/admin/presentation/Cognito/CognitoPresenter.js.map +1 -0
- package/admin/presentation/Cognito/abstractions.d.ts +72 -0
- package/admin/presentation/Cognito/abstractions.js +4 -0
- package/admin/presentation/Cognito/abstractions.js.map +1 -0
- package/admin/presentation/Cognito/components/Divider.d.ts +2 -0
- package/admin/presentation/Cognito/components/Divider.js +16 -0
- package/admin/presentation/Cognito/components/Divider.js.map +1 -0
- package/admin/presentation/Cognito/components/FederatedLogin.d.ts +7 -0
- package/admin/presentation/Cognito/components/FederatedLogin.js +32 -0
- package/admin/presentation/Cognito/components/FederatedLogin.js.map +1 -0
- package/admin/presentation/Cognito/components/FederatedProviders.d.ts +44 -0
- package/admin/presentation/Cognito/components/FederatedProviders.js +14 -0
- package/admin/presentation/Cognito/components/FederatedProviders.js.map +1 -0
- package/admin/presentation/Cognito/components/FooterSignIn.d.ts +6 -0
- package/admin/presentation/Cognito/components/FooterSignIn.js +15 -0
- package/admin/presentation/Cognito/components/FooterSignIn.js.map +1 -0
- package/admin/presentation/Cognito/components/PasswordResetCodeSent.d.ts +9 -0
- package/admin/presentation/Cognito/components/PasswordResetCodeSent.js +43 -0
- package/admin/presentation/Cognito/components/PasswordResetCodeSent.js.map +1 -0
- package/admin/presentation/Cognito/components/RequestPasswordResetCode.d.ts +8 -0
- package/admin/presentation/Cognito/components/RequestPasswordResetCode.js +45 -0
- package/admin/presentation/Cognito/components/RequestPasswordResetCode.js.map +1 -0
- package/admin/presentation/Cognito/components/RequireNewPassword.d.ts +8 -0
- package/admin/presentation/Cognito/components/RequireNewPassword.js +55 -0
- package/admin/presentation/Cognito/components/RequireNewPassword.js.map +1 -0
- package/admin/presentation/Cognito/components/SetNewPassword.d.ts +8 -0
- package/admin/presentation/Cognito/components/SetNewPassword.js +79 -0
- package/admin/presentation/Cognito/components/SetNewPassword.js.map +1 -0
- package/admin/presentation/Cognito/components/SignIn.d.ts +10 -0
- package/admin/presentation/Cognito/components/SignIn.js +64 -0
- package/admin/presentation/Cognito/components/SignIn.js.map +1 -0
- package/admin/presentation/Cognito/components/View.d.ts +98 -0
- package/admin/presentation/Cognito/components/View.js +67 -0
- package/admin/presentation/Cognito/components/View.js.map +1 -0
- package/admin/presentation/Cognito/feature.d.ts +3 -0
- package/admin/presentation/Cognito/feature.js +16 -0
- package/admin/presentation/Cognito/feature.js.map +1 -0
- package/admin/presentation/shared/createPasswordValidator.d.ts +8 -0
- package/admin/presentation/shared/createPasswordValidator.js +27 -0
- package/admin/presentation/shared/createPasswordValidator.js.map +1 -0
- package/admin/presentation/shared/usePasswordValidator.d.ts +1 -0
- package/admin/presentation/shared/usePasswordValidator.js +15 -0
- package/admin/presentation/shared/usePasswordValidator.js.map +1 -0
- package/admin/routes.d.ts +10 -0
- package/admin/routes.js +21 -0
- package/admin/routes.js.map +1 -0
- package/admin/ui/UserItem.d.ts +10 -0
- package/admin/ui/UserItem.js +3 -0
- package/admin/ui/UserItem.js.map +1 -0
- package/admin/ui/components/AvatarImage/AvatarImage.d.ts +3 -0
- package/admin/ui/components/AvatarImage/AvatarImage.js +43 -0
- package/admin/ui/components/AvatarImage/AvatarImage.js.map +1 -0
- package/admin/ui/components/AvatarImage/AvatarImagePreview.d.ts +10 -0
- package/admin/ui/components/AvatarImage/AvatarImagePreview.js +55 -0
- package/admin/ui/components/AvatarImage/AvatarImagePreview.js.map +1 -0
- package/admin/ui/components/AvatarImage/AvatarImageTrigger.d.ts +7 -0
- package/admin/ui/components/AvatarImage/AvatarImageTrigger.js +29 -0
- package/admin/ui/components/AvatarImage/AvatarImageTrigger.js.map +1 -0
- package/admin/ui/components/AvatarImage/index.d.ts +1 -0
- package/admin/ui/components/AvatarImage/index.js +3 -0
- package/admin/ui/components/AvatarImage/index.js.map +1 -0
- package/admin/ui/views/Account/Account.d.ts +2 -0
- package/admin/ui/views/Account/Account.js +142 -0
- package/admin/ui/views/Account/Account.js.map +1 -0
- package/admin/ui/views/Account/graphql.d.ts +2 -0
- package/admin/ui/views/Account/graphql.js +40 -0
- package/admin/ui/views/Account/graphql.js.map +1 -0
- package/admin/ui/views/Account/index.d.ts +1 -0
- package/admin/ui/views/Account/index.js +3 -0
- package/admin/ui/views/Account/index.js.map +1 -0
- package/admin/ui/views/Users/UsersDataList.d.ts +3 -0
- package/admin/ui/views/Users/UsersDataList.js +172 -0
- package/admin/ui/views/Users/UsersDataList.js.map +1 -0
- package/admin/ui/views/Users/UsersForm.d.ts +5 -0
- package/admin/ui/views/Users/UsersForm.js +174 -0
- package/admin/ui/views/Users/UsersForm.js.map +1 -0
- package/admin/ui/views/Users/UsersView.d.ts +2 -0
- package/admin/ui/views/Users/UsersView.js +14 -0
- package/admin/ui/views/Users/UsersView.js.map +1 -0
- package/admin/ui/views/Users/components/DeleteAction.d.ts +7 -0
- package/admin/ui/views/Users/components/DeleteAction.js +36 -0
- package/admin/ui/views/Users/components/DeleteAction.js.map +1 -0
- package/admin/ui/views/Users/graphql.d.ts +5 -0
- package/admin/ui/views/Users/graphql.js +99 -0
- package/admin/ui/views/Users/graphql.js.map +1 -0
- package/admin/ui/views/Users/hooks/useUserForm.d.ts +27 -0
- package/admin/ui/views/Users/hooks/useUserForm.js +127 -0
- package/admin/ui/views/Users/hooks/useUserForm.js.map +1 -0
- package/admin/ui/views/Users/search.svg +20 -0
- package/admin/ui/views/utils.d.ts +3 -0
- package/admin/ui/views/utils.js +10 -0
- package/admin/ui/views/utils.js.map +1 -0
- package/api/CognitoApiFeature.d.ts +1 -0
- package/api/CognitoApiFeature.js +28 -0
- package/api/CognitoApiFeature.js.map +1 -0
- package/api/domain/Username.d.ts +4 -0
- package/api/domain/Username.js +7 -0
- package/api/domain/Username.js.map +1 -0
- package/api/domain/errors.d.ts +37 -0
- package/api/domain/errors.js +63 -0
- package/api/domain/errors.js.map +1 -0
- package/api/features/CognitoIdp/CognitoIdentityProvider.d.ts +15 -0
- package/api/features/CognitoIdp/CognitoIdentityProvider.js +61 -0
- package/api/features/CognitoIdp/CognitoIdentityProvider.js.map +1 -0
- package/api/features/CognitoIdp/abstractions.d.ts +15 -0
- package/api/features/CognitoIdp/abstractions.js +4 -0
- package/api/features/CognitoIdp/abstractions.js.map +1 -0
- package/api/features/CognitoIdp/feature.d.ts +1 -0
- package/api/features/CognitoIdp/feature.js +10 -0
- package/api/features/CognitoIdp/feature.js.map +1 -0
- package/api/features/CognitoIdp/index.d.ts +2 -0
- package/api/features/CognitoIdp/index.js +4 -0
- package/api/features/CognitoIdp/index.js.map +1 -0
- package/api/features/CognitoService/CognitoService.d.ts +20 -0
- package/api/features/CognitoService/CognitoService.js +90 -0
- package/api/features/CognitoService/CognitoService.js.map +1 -0
- package/api/features/CognitoService/abstractions.d.ts +54 -0
- package/api/features/CognitoService/abstractions.js +8 -0
- package/api/features/CognitoService/abstractions.js.map +1 -0
- package/api/features/CognitoService/feature.d.ts +5 -0
- package/api/features/CognitoService/feature.js +12 -0
- package/api/features/CognitoService/feature.js.map +1 -0
- package/api/features/CognitoService/index.d.ts +1 -0
- package/api/features/CognitoService/index.js +3 -0
- package/api/features/CognitoService/index.js.map +1 -0
- package/api/features/CreateUser/CreateUserUseCase.d.ts +22 -0
- package/api/features/CreateUser/CreateUserUseCase.js +106 -0
- package/api/features/CreateUser/CreateUserUseCase.js.map +1 -0
- package/api/features/CreateUser/abstractions.d.ts +35 -0
- package/api/features/CreateUser/abstractions.js +4 -0
- package/api/features/CreateUser/abstractions.js.map +1 -0
- package/api/features/CreateUser/feature.d.ts +1 -0
- package/api/features/CreateUser/feature.js +10 -0
- package/api/features/CreateUser/feature.js.map +1 -0
- package/api/features/CreateUser/index.d.ts +2 -0
- package/api/features/CreateUser/index.js +4 -0
- package/api/features/CreateUser/index.js.map +1 -0
- package/api/features/CreateUser/schema.d.ts +47 -0
- package/api/features/CreateUser/schema.js +17 -0
- package/api/features/CreateUser/schema.js.map +1 -0
- package/api/features/DeleteUser/DeleteUserUseCase.d.ts +16 -0
- package/api/features/DeleteUser/DeleteUserUseCase.js +54 -0
- package/api/features/DeleteUser/DeleteUserUseCase.js.map +1 -0
- package/api/features/DeleteUser/abstractions.d.ts +19 -0
- package/api/features/DeleteUser/abstractions.js +4 -0
- package/api/features/DeleteUser/abstractions.js.map +1 -0
- package/api/features/DeleteUser/feature.d.ts +1 -0
- package/api/features/DeleteUser/feature.js +10 -0
- package/api/features/DeleteUser/feature.js.map +1 -0
- package/api/features/DeleteUser/index.d.ts +2 -0
- package/api/features/DeleteUser/index.js +4 -0
- package/api/features/DeleteUser/index.js.map +1 -0
- package/api/features/UpdateUser/UpdateUserUseCase.d.ts +21 -0
- package/api/features/UpdateUser/UpdateUserUseCase.js +88 -0
- package/api/features/UpdateUser/UpdateUserUseCase.js.map +1 -0
- package/api/features/UpdateUser/abstractions.d.ts +33 -0
- package/api/features/UpdateUser/abstractions.js +4 -0
- package/api/features/UpdateUser/abstractions.js.map +1 -0
- package/api/features/UpdateUser/feature.d.ts +1 -0
- package/api/features/UpdateUser/feature.js +10 -0
- package/api/features/UpdateUser/feature.js.map +1 -0
- package/api/features/UpdateUser/index.d.ts +2 -0
- package/api/features/UpdateUser/index.js +4 -0
- package/api/features/UpdateUser/index.js.map +1 -0
- package/api/features/UpdateUser/schema.d.ts +44 -0
- package/api/features/UpdateUser/schema.js +16 -0
- package/api/features/UpdateUser/schema.js.map +1 -0
- package/api/features/UserInstaller/UserInstaller.d.ts +27 -0
- package/api/features/UserInstaller/UserInstaller.js +48 -0
- package/api/features/UserInstaller/UserInstaller.js.map +1 -0
- package/api/features/UserInstaller/feature.d.ts +1 -0
- package/api/features/UserInstaller/feature.js +10 -0
- package/api/features/UserInstaller/feature.js.map +1 -0
- package/api/graphql/user.gql.d.ts +8 -0
- package/api/graphql/user.gql.js +167 -0
- package/api/graphql/user.gql.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.js +4 -0
- package/index.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { makeAutoObservable, runInAction } from "mobx";
|
|
2
|
+
import { Auth } from "@aws-amplify/auth";
|
|
3
|
+
import { CognitoPresenter as CognitoPresenterAbstraction } from "./abstractions.js";
|
|
4
|
+
import { LogInUseCase } from "@webiny/app-admin/features/security/LogIn/index.js";
|
|
5
|
+
import { IdentityContext } from "@webiny/app-admin/features/security/IdentityContext/index.js";
|
|
6
|
+
class CognitoPresenterImpl {
|
|
7
|
+
authState = "signIn";
|
|
8
|
+
authData = null;
|
|
9
|
+
message = null;
|
|
10
|
+
checkingSession = false;
|
|
11
|
+
isLoggingIn = false;
|
|
12
|
+
formLoading = false;
|
|
13
|
+
cognitoUser = null;
|
|
14
|
+
initialized = false;
|
|
15
|
+
constructor(identity, logInUseCase) {
|
|
16
|
+
this.identity = identity;
|
|
17
|
+
this.logInUseCase = logInUseCase;
|
|
18
|
+
makeAutoObservable(this);
|
|
19
|
+
}
|
|
20
|
+
get vm() {
|
|
21
|
+
const identity = this.identity.getIdentity();
|
|
22
|
+
return {
|
|
23
|
+
authState: this.authState,
|
|
24
|
+
checkingSession: this.checkingSession,
|
|
25
|
+
isLoggingIn: this.isLoggingIn,
|
|
26
|
+
isAuthenticated: identity.isAuthenticated,
|
|
27
|
+
// View-specific VMs
|
|
28
|
+
signIn: {
|
|
29
|
+
isLoading: this.formLoading,
|
|
30
|
+
message: this.message
|
|
31
|
+
},
|
|
32
|
+
requestPasswordResetCode: {
|
|
33
|
+
isLoading: this.formLoading,
|
|
34
|
+
message: this.message
|
|
35
|
+
},
|
|
36
|
+
passwordResetCodeSent: {
|
|
37
|
+
isLoading: this.formLoading,
|
|
38
|
+
message: this.message
|
|
39
|
+
},
|
|
40
|
+
setNewPassword: {
|
|
41
|
+
isLoading: this.formLoading,
|
|
42
|
+
message: this.message
|
|
43
|
+
},
|
|
44
|
+
requireNewPassword: {
|
|
45
|
+
isLoading: this.formLoading,
|
|
46
|
+
requiredAttributes: this.authData && this.authData.requiredAttributes || []
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
async init(params) {
|
|
51
|
+
if (this.initialized) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const authConfig = {
|
|
55
|
+
region: params.region,
|
|
56
|
+
userPoolId: params.userPoolId,
|
|
57
|
+
userPoolWebClientId: params.clientId
|
|
58
|
+
};
|
|
59
|
+
Auth.configure(authConfig);
|
|
60
|
+
this.initialized = true;
|
|
61
|
+
await this.checkUrl();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Public API
|
|
65
|
+
async signIn(username, password) {
|
|
66
|
+
runInAction(() => {
|
|
67
|
+
this.formLoading = true;
|
|
68
|
+
this.message = null;
|
|
69
|
+
});
|
|
70
|
+
const usernameOrPassword = ["UserNotFoundException", "NotAuthorizedException"];
|
|
71
|
+
try {
|
|
72
|
+
const user = await Auth.signIn(username, password);
|
|
73
|
+
if (user.challengeName === "NEW_PASSWORD_REQUIRED") {
|
|
74
|
+
runInAction(() => {
|
|
75
|
+
this.cognitoUser = user;
|
|
76
|
+
this.authState = "requireNewPassword";
|
|
77
|
+
this.authData = {
|
|
78
|
+
requiredAttributes: user.challengeParam.requiredAttributes || []
|
|
79
|
+
};
|
|
80
|
+
this.formLoading = false;
|
|
81
|
+
});
|
|
82
|
+
} else {
|
|
83
|
+
await this.handleSignedIn();
|
|
84
|
+
runInAction(() => {
|
|
85
|
+
this.formLoading = false;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
} catch (error) {
|
|
89
|
+
let message = error.message;
|
|
90
|
+
if (usernameOrPassword.includes(error.code)) {
|
|
91
|
+
message = "Incorrect username or password.";
|
|
92
|
+
}
|
|
93
|
+
runInAction(() => {
|
|
94
|
+
this.message = {
|
|
95
|
+
title: "Login Failed",
|
|
96
|
+
text: message,
|
|
97
|
+
type: "danger"
|
|
98
|
+
};
|
|
99
|
+
this.formLoading = false;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async confirmNewPassword(password, requiredAttributes) {
|
|
104
|
+
runInAction(() => {
|
|
105
|
+
this.formLoading = true;
|
|
106
|
+
this.message = null;
|
|
107
|
+
});
|
|
108
|
+
try {
|
|
109
|
+
await Auth.completeNewPassword(this.cognitoUser, password, requiredAttributes);
|
|
110
|
+
await this.handleSignedIn();
|
|
111
|
+
} catch (error) {
|
|
112
|
+
runInAction(() => {
|
|
113
|
+
this.message = {
|
|
114
|
+
title: "Error",
|
|
115
|
+
text: error.message,
|
|
116
|
+
type: "danger"
|
|
117
|
+
};
|
|
118
|
+
});
|
|
119
|
+
} finally {
|
|
120
|
+
runInAction(() => {
|
|
121
|
+
this.formLoading = false;
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async requestPasswordReset(username) {
|
|
126
|
+
runInAction(() => {
|
|
127
|
+
this.formLoading = true;
|
|
128
|
+
this.message = null;
|
|
129
|
+
});
|
|
130
|
+
try {
|
|
131
|
+
await Auth.forgotPassword(username);
|
|
132
|
+
} catch {
|
|
133
|
+
// We ignore errors and pretend that everything went fine.
|
|
134
|
+
// Showing an error would give a potential attacker information about which usernames exist (or not).
|
|
135
|
+
// This way it's more difficult to exploit the process.
|
|
136
|
+
} finally {
|
|
137
|
+
runInAction(() => {
|
|
138
|
+
this.authState = "passwordResetCodeSent";
|
|
139
|
+
this.authData = {
|
|
140
|
+
username
|
|
141
|
+
};
|
|
142
|
+
this.formLoading = false;
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async resendPasswordResetCode() {
|
|
147
|
+
const username = this.authData?.username;
|
|
148
|
+
if (this.authState !== "passwordResetCodeSent" || !username) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
await this.requestPasswordReset(username);
|
|
152
|
+
runInAction(() => {
|
|
153
|
+
this.message = {
|
|
154
|
+
title: "Code Resent",
|
|
155
|
+
text: "Password reset code has been resent to your email address. Please check your inbox!",
|
|
156
|
+
type: "success"
|
|
157
|
+
};
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
async confirmPasswordReset(code, password) {
|
|
161
|
+
const username = this.authData?.username;
|
|
162
|
+
if (!username) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
runInAction(() => {
|
|
166
|
+
this.formLoading = true;
|
|
167
|
+
this.message = null;
|
|
168
|
+
});
|
|
169
|
+
try {
|
|
170
|
+
await Auth.forgotPasswordSubmit(username, code, password);
|
|
171
|
+
runInAction(() => {
|
|
172
|
+
this.authState = "signIn";
|
|
173
|
+
this.message = {
|
|
174
|
+
title: "Password Reset",
|
|
175
|
+
text: "You can now sign in with your new password",
|
|
176
|
+
type: "success"
|
|
177
|
+
};
|
|
178
|
+
});
|
|
179
|
+
} catch (error) {
|
|
180
|
+
runInAction(() => {
|
|
181
|
+
this.message = {
|
|
182
|
+
title: "Error",
|
|
183
|
+
text: error.message,
|
|
184
|
+
type: "danger"
|
|
185
|
+
};
|
|
186
|
+
});
|
|
187
|
+
} finally {
|
|
188
|
+
runInAction(() => {
|
|
189
|
+
this.formLoading = false;
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
showSignIn() {
|
|
194
|
+
this.authState = "signIn";
|
|
195
|
+
this.authData = null;
|
|
196
|
+
this.message = null;
|
|
197
|
+
}
|
|
198
|
+
showRequestPasswordResetCode() {
|
|
199
|
+
this.authState = "requestPasswordResetCode";
|
|
200
|
+
this.message = null;
|
|
201
|
+
}
|
|
202
|
+
showSetNewPassword() {
|
|
203
|
+
this.authState = "setNewPassword";
|
|
204
|
+
this.message = null;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Private/internal methods
|
|
208
|
+
async handleSignedIn() {
|
|
209
|
+
runInAction(() => {
|
|
210
|
+
this.isLoggingIn = true;
|
|
211
|
+
});
|
|
212
|
+
try {
|
|
213
|
+
await this.logInUseCase.execute({
|
|
214
|
+
idTokenProvider: async () => {
|
|
215
|
+
const currentSession = await Auth.currentSession();
|
|
216
|
+
return currentSession.getIdToken().getJwtToken();
|
|
217
|
+
},
|
|
218
|
+
logoutCallback: () => {
|
|
219
|
+
Auth.signOut();
|
|
220
|
+
runInAction(() => {
|
|
221
|
+
this.authState = "signIn";
|
|
222
|
+
this.authData = null;
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
runInAction(() => {
|
|
227
|
+
this.authState = "signedIn";
|
|
228
|
+
});
|
|
229
|
+
} catch (error) {
|
|
230
|
+
console.error("Error during sign in:", error);
|
|
231
|
+
runInAction(() => {
|
|
232
|
+
this.authState = "signIn";
|
|
233
|
+
});
|
|
234
|
+
} finally {
|
|
235
|
+
runInAction(() => {
|
|
236
|
+
this.isLoggingIn = false;
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
async checkUrl() {
|
|
241
|
+
const query = new URLSearchParams(window.location.search);
|
|
242
|
+
const queryData = {};
|
|
243
|
+
query.forEach((value, key) => queryData[key] = value);
|
|
244
|
+
const {
|
|
245
|
+
state
|
|
246
|
+
} = queryData;
|
|
247
|
+
if (state) {
|
|
248
|
+
// Handle state from URL if needed
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
return this.checkSession();
|
|
252
|
+
}
|
|
253
|
+
async checkSession() {
|
|
254
|
+
runInAction(() => {
|
|
255
|
+
this.checkingSession = true;
|
|
256
|
+
});
|
|
257
|
+
try {
|
|
258
|
+
const cognitoUser = await Auth.currentSession();
|
|
259
|
+
if (cognitoUser) {
|
|
260
|
+
// We don't need to `await`, we simply start a separate "branch" of execution.
|
|
261
|
+
this.handleSignedIn();
|
|
262
|
+
}
|
|
263
|
+
} catch {
|
|
264
|
+
// Not authenticated, stay on signIn
|
|
265
|
+
} finally {
|
|
266
|
+
runInAction(() => {
|
|
267
|
+
this.checkingSession = false;
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
export const CognitoPresenter = CognitoPresenterAbstraction.createImplementation({
|
|
273
|
+
implementation: CognitoPresenterImpl,
|
|
274
|
+
dependencies: [IdentityContext, LogInUseCase]
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
//# sourceMappingURL=CognitoPresenter.js.map
|
|
@@ -0,0 +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":[]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export type AuthState = "signIn" | "signedIn" | "signedOut" | "requestPasswordResetCode" | "passwordResetCodeSent" | "setNewPassword" | "requireNewPassword";
|
|
2
|
+
export interface AuthDataVerified {
|
|
3
|
+
email?: string;
|
|
4
|
+
phone_number?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface AuthDataUnverified {
|
|
7
|
+
email?: string;
|
|
8
|
+
phone_number?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface AuthData {
|
|
11
|
+
username?: string;
|
|
12
|
+
verified?: AuthDataVerified;
|
|
13
|
+
unverified?: AuthDataUnverified;
|
|
14
|
+
requiredAttributes?: string[];
|
|
15
|
+
[key: string]: string | null | boolean | undefined | string[] | AuthDataVerified | AuthDataUnverified;
|
|
16
|
+
}
|
|
17
|
+
export interface AuthMessage {
|
|
18
|
+
title: string;
|
|
19
|
+
text: string;
|
|
20
|
+
type: "success" | "info" | "warning" | "danger";
|
|
21
|
+
}
|
|
22
|
+
export interface ICognitoInitParams {
|
|
23
|
+
region: string;
|
|
24
|
+
userPoolId: string;
|
|
25
|
+
clientId: string;
|
|
26
|
+
}
|
|
27
|
+
export interface SignInVM {
|
|
28
|
+
isLoading: boolean;
|
|
29
|
+
message: AuthMessage | null;
|
|
30
|
+
}
|
|
31
|
+
export interface RequireNewPasswordVM {
|
|
32
|
+
isLoading: boolean;
|
|
33
|
+
requiredAttributes: string[];
|
|
34
|
+
}
|
|
35
|
+
export interface RequestPasswordResetCodeVM {
|
|
36
|
+
isLoading: boolean;
|
|
37
|
+
message: AuthMessage | null;
|
|
38
|
+
}
|
|
39
|
+
export interface PasswordResetCodeSentVM {
|
|
40
|
+
isLoading: boolean;
|
|
41
|
+
message: AuthMessage | null;
|
|
42
|
+
}
|
|
43
|
+
export interface SetNewPasswordVM {
|
|
44
|
+
isLoading: boolean;
|
|
45
|
+
message: AuthMessage | null;
|
|
46
|
+
}
|
|
47
|
+
export interface ICognitoPresenter {
|
|
48
|
+
vm: {
|
|
49
|
+
authState: AuthState;
|
|
50
|
+
checkingSession: boolean;
|
|
51
|
+
isLoggingIn: boolean;
|
|
52
|
+
isAuthenticated: boolean;
|
|
53
|
+
signIn: SignInVM;
|
|
54
|
+
requireNewPassword: RequireNewPasswordVM;
|
|
55
|
+
requestPasswordResetCode: RequestPasswordResetCodeVM;
|
|
56
|
+
passwordResetCodeSent: PasswordResetCodeSentVM;
|
|
57
|
+
setNewPassword: SetNewPasswordVM;
|
|
58
|
+
};
|
|
59
|
+
init(params: ICognitoInitParams): Promise<void>;
|
|
60
|
+
signIn(username: string, password: string): Promise<void>;
|
|
61
|
+
confirmNewPassword(password: string, requiredAttributes: any): Promise<void>;
|
|
62
|
+
requestPasswordReset(username: string): Promise<void>;
|
|
63
|
+
resendPasswordResetCode(): Promise<void>;
|
|
64
|
+
confirmPasswordReset(code: string, password: string): Promise<void>;
|
|
65
|
+
showSignIn(): void;
|
|
66
|
+
showRequestPasswordResetCode(): void;
|
|
67
|
+
showSetNewPassword(): void;
|
|
68
|
+
}
|
|
69
|
+
export declare const CognitoPresenter: import("@webiny/di").Abstraction<ICognitoPresenter>;
|
|
70
|
+
export declare namespace CognitoPresenter {
|
|
71
|
+
type Interface = ICognitoPresenter;
|
|
72
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createAbstraction","CognitoPresenter"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\n\nexport type AuthState =\n | \"signIn\"\n | \"signedIn\"\n | \"signedOut\"\n | \"requestPasswordResetCode\"\n | \"passwordResetCodeSent\"\n | \"setNewPassword\"\n | \"requireNewPassword\";\n\nexport interface AuthDataVerified {\n email?: string;\n phone_number?: string;\n}\n\nexport interface AuthDataUnverified {\n email?: string;\n phone_number?: string;\n}\n\nexport interface AuthData {\n username?: string;\n verified?: AuthDataVerified;\n unverified?: AuthDataUnverified;\n requiredAttributes?: string[];\n [key: string]:\n | string\n | null\n | boolean\n | undefined\n | string[]\n | AuthDataVerified\n | AuthDataUnverified;\n}\n\nexport interface AuthMessage {\n title: string;\n text: string;\n type: \"success\" | \"info\" | \"warning\" | \"danger\";\n}\n\nexport interface ICognitoInitParams {\n region: string;\n userPoolId: string;\n clientId: string;\n}\n\nexport interface SignInVM {\n isLoading: boolean;\n message: AuthMessage | null;\n}\n\nexport interface RequireNewPasswordVM {\n isLoading: boolean;\n requiredAttributes: string[];\n}\n\nexport interface RequestPasswordResetCodeVM {\n isLoading: boolean;\n message: AuthMessage | null;\n}\n\nexport interface PasswordResetCodeSentVM {\n isLoading: boolean;\n message: AuthMessage | null;\n}\n\nexport interface SetNewPasswordVM {\n isLoading: boolean;\n message: AuthMessage | null;\n}\n\nexport interface ICognitoPresenter {\n vm: {\n authState: AuthState;\n checkingSession: boolean;\n isLoggingIn: boolean;\n isAuthenticated: boolean;\n signIn: SignInVM;\n requireNewPassword: RequireNewPasswordVM;\n requestPasswordResetCode: RequestPasswordResetCodeVM;\n passwordResetCodeSent: PasswordResetCodeSentVM;\n setNewPassword: SetNewPasswordVM;\n };\n\n // Lifecycle\n init(params: ICognitoInitParams): Promise<void>;\n\n // Authentication actions\n signIn(username: string, password: string): Promise<void>;\n confirmNewPassword(password: string, requiredAttributes: any): Promise<void>;\n requestPasswordReset(username: string): Promise<void>;\n resendPasswordResetCode(): Promise<void>;\n confirmPasswordReset(code: string, password: string): Promise<void>;\n\n // Navigation actions\n showSignIn(): void;\n showRequestPasswordResetCode(): void;\n showSetNewPassword(): void;\n}\n\nexport const CognitoPresenter = createAbstraction<ICognitoPresenter>(\"CognitoPresenter\");\n\nexport namespace CognitoPresenter {\n export type Interface = ICognitoPresenter;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,uBAAuB;AAsGzD,OAAO,MAAMC,gBAAgB,GAAGD,iBAAiB,CAAoB,kBAAkB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Separator, Text } from "@webiny/admin-ui";
|
|
3
|
+
export const Divider = () => {
|
|
4
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
5
|
+
className: "relative my-lg"
|
|
6
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
7
|
+
className: "absolute inset-0 flex items-center"
|
|
8
|
+
}, /*#__PURE__*/React.createElement(Separator, null)), /*#__PURE__*/React.createElement("div", {
|
|
9
|
+
className: "relative flex justify-center"
|
|
10
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
11
|
+
size: "sm",
|
|
12
|
+
className: "text-neutral-strong px-sm bg-neutral-base uppercase"
|
|
13
|
+
}, "Or continue with")));
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=Divider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Separator","Text","Divider","createElement","className","size"],"sources":["Divider.tsx"],"sourcesContent":["import React from \"react\";\nimport { Separator, Text } from \"@webiny/admin-ui\";\n\nexport const Divider = () => {\n return (\n <div className={\"relative my-lg\"}>\n <div className={\"absolute inset-0 flex items-center\"}>\n <Separator />\n </div>\n <div className={\"relative flex justify-center\"}>\n <Text size={\"sm\"} className={\"text-neutral-strong px-sm bg-neutral-base uppercase\"}>\n {\"Or continue with\"}\n </Text>\n </div>\n </div>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,SAAS,EAAEC,IAAI,QAAQ,kBAAkB;AAElD,OAAO,MAAMC,OAAO,GAAGA,CAAA,KAAM;EACzB,oBACIH,KAAA,CAAAI,aAAA;IAAKC,SAAS,EAAE;EAAiB,gBAC7BL,KAAA,CAAAI,aAAA;IAAKC,SAAS,EAAE;EAAqC,gBACjDL,KAAA,CAAAI,aAAA,CAACH,SAAS,MAAE,CACX,CAAC,eACND,KAAA,CAAAI,aAAA;IAAKC,SAAS,EAAE;EAA+B,gBAC3CL,KAAA,CAAAI,aAAA,CAACF,IAAI;IAACI,IAAI,EAAE,IAAK;IAACD,SAAS,EAAE;EAAsD,GAC9E,kBACC,CACL,CACJ,CAAC;AAEd,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { FederatedIdentityProvider } from "../../../../admin/federatedIdentityProviders.js";
|
|
3
|
+
interface FederatedLoginProps {
|
|
4
|
+
providers: FederatedIdentityProvider[];
|
|
5
|
+
}
|
|
6
|
+
export declare const FederatedLogin: ({ providers }: FederatedLoginProps) => React.JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Auth } from "@aws-amplify/auth";
|
|
3
|
+
import { federatedIdentityProviders } from "../../../federatedIdentityProviders.js";
|
|
4
|
+
import { FederatedProviders } from "./FederatedProviders.js";
|
|
5
|
+
export const FederatedLogin = ({
|
|
6
|
+
providers
|
|
7
|
+
}) => {
|
|
8
|
+
return /*#__PURE__*/React.createElement(FederatedProviders.Container, null, providers.map(({
|
|
9
|
+
name,
|
|
10
|
+
component: Component
|
|
11
|
+
}) => {
|
|
12
|
+
const cognitoProviderName = federatedIdentityProviders[name] ?? name;
|
|
13
|
+
const isCustomProvider = !(name in federatedIdentityProviders);
|
|
14
|
+
const signIn = () => {
|
|
15
|
+
if (isCustomProvider) {
|
|
16
|
+
Auth.federatedSignIn({
|
|
17
|
+
customProvider: cognitoProviderName
|
|
18
|
+
});
|
|
19
|
+
} else {
|
|
20
|
+
Auth.federatedSignIn({
|
|
21
|
+
provider: cognitoProviderName
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
return /*#__PURE__*/React.createElement(Component, {
|
|
26
|
+
key: name,
|
|
27
|
+
signIn: signIn
|
|
28
|
+
});
|
|
29
|
+
}));
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=FederatedLogin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Auth","federatedIdentityProviders","FederatedProviders","FederatedLogin","providers","createElement","Container","map","name","component","Component","cognitoProviderName","isCustomProvider","signIn","federatedSignIn","customProvider","provider","key"],"sources":["FederatedLogin.tsx"],"sourcesContent":["import React from \"react\";\nimport { Auth } from \"@aws-amplify/auth\";\nimport type { CognitoHostedUIIdentityProvider } from \"@aws-amplify/auth/lib-esm/types/Auth.js\";\nimport type { FederatedIdentityProvider } from \"~/admin/federatedIdentityProviders.js\";\nimport { federatedIdentityProviders } from \"~/admin/federatedIdentityProviders.js\";\nimport { FederatedProviders } from \"./FederatedProviders.js\";\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 isCustomProvider = !(name in federatedIdentityProviders);\n\n const signIn = () => {\n if (isCustomProvider) {\n Auth.federatedSignIn({\n customProvider: cognitoProviderName\n });\n } else {\n Auth.federatedSignIn({\n provider: cognitoProviderName as CognitoHostedUIIdentityProvider\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,IAAI,QAAQ,mBAAmB;AAGxC,SAASC,0BAA0B;AACnC,SAASC,kBAAkB;AAM3B,OAAO,MAAMC,cAAc,GAAGA,CAAC;EAAEC;AAA+B,CAAC,KAAK;EAClE,oBACIL,KAAA,CAAAM,aAAA,CAACH,kBAAkB,CAACI,SAAS,QACxBF,SAAS,CAACG,GAAG,CAAC,CAAC;IAAEC,IAAI;IAAEC,SAAS,EAAEC;EAAU,CAAC,KAAK;IAC/C,MAAMC,mBAAmB,GAAGV,0BAA0B,CAACO,IAAI,CAAC,IAAIA,IAAI;IACpE,MAAMI,gBAAgB,GAAG,EAAEJ,IAAI,IAAIP,0BAA0B,CAAC;IAE9D,MAAMY,MAAM,GAAGA,CAAA,KAAM;MACjB,IAAID,gBAAgB,EAAE;QAClBZ,IAAI,CAACc,eAAe,CAAC;UACjBC,cAAc,EAAEJ;QACpB,CAAC,CAAC;MACN,CAAC,MAAM;QACHX,IAAI,CAACc,eAAe,CAAC;UACjBE,QAAQ,EAAEL;QACd,CAAC,CAAC;MACN;IACJ,CAAC;IAED,oBAAOZ,KAAA,CAAAM,aAAA,CAACK,SAAS;MAACO,GAAG,EAAET,IAAK;MAACK,MAAM,EAAEA;IAAO,CAAE,CAAC;EACnD,CAAC,CACyB,CAAC;AAEvC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface ContainerProps {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
}
|
|
5
|
+
export declare const Container: (({ children }: ContainerProps) => React.JSX.Element) & {
|
|
6
|
+
original: ({ children }: ContainerProps) => React.JSX.Element;
|
|
7
|
+
originalName: string;
|
|
8
|
+
displayName: string;
|
|
9
|
+
} & {
|
|
10
|
+
original: (({ children }: ContainerProps) => React.JSX.Element) & {
|
|
11
|
+
original: ({ children }: ContainerProps) => React.JSX.Element;
|
|
12
|
+
originalName: string;
|
|
13
|
+
displayName: string;
|
|
14
|
+
};
|
|
15
|
+
originalName: string;
|
|
16
|
+
displayName: string;
|
|
17
|
+
} & {
|
|
18
|
+
createDecorator: (decorator: import("@webiny/app-admin").ComponentDecorator<(({ children }: ContainerProps) => React.JSX.Element) & {
|
|
19
|
+
original: ({ children }: ContainerProps) => React.JSX.Element;
|
|
20
|
+
originalName: string;
|
|
21
|
+
displayName: string;
|
|
22
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
23
|
+
};
|
|
24
|
+
export declare const FederatedProviders: {
|
|
25
|
+
Container: (({ children }: ContainerProps) => React.JSX.Element) & {
|
|
26
|
+
original: ({ children }: ContainerProps) => React.JSX.Element;
|
|
27
|
+
originalName: string;
|
|
28
|
+
displayName: string;
|
|
29
|
+
} & {
|
|
30
|
+
original: (({ children }: ContainerProps) => React.JSX.Element) & {
|
|
31
|
+
original: ({ children }: ContainerProps) => React.JSX.Element;
|
|
32
|
+
originalName: string;
|
|
33
|
+
displayName: string;
|
|
34
|
+
};
|
|
35
|
+
originalName: string;
|
|
36
|
+
displayName: string;
|
|
37
|
+
} & {
|
|
38
|
+
createDecorator: (decorator: import("@webiny/app-admin").ComponentDecorator<(({ children }: ContainerProps) => React.JSX.Element) & {
|
|
39
|
+
original: ({ children }: ContainerProps) => React.JSX.Element;
|
|
40
|
+
originalName: string;
|
|
41
|
+
displayName: string;
|
|
42
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { makeDecoratable } from "@webiny/app-admin";
|
|
3
|
+
export const Container = makeDecoratable("FederatedProvidersContainer", ({
|
|
4
|
+
children
|
|
5
|
+
}) => {
|
|
6
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
7
|
+
className: "flex flex-col gap-xs"
|
|
8
|
+
}, children);
|
|
9
|
+
});
|
|
10
|
+
export const FederatedProviders = {
|
|
11
|
+
Container
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=FederatedProviders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","makeDecoratable","Container","children","createElement","className","FederatedProviders"],"sources":["FederatedProviders.tsx"],"sourcesContent":["import React from \"react\";\nimport { makeDecoratable } from \"@webiny/app-admin\";\n\nexport interface ContainerProps {\n children: React.ReactNode;\n}\n\nexport const Container = makeDecoratable(\n \"FederatedProvidersContainer\",\n ({ children }: ContainerProps) => {\n return <div className={\"flex flex-col gap-xs\"}>{children}</div>;\n }\n);\n\nexport const FederatedProviders = {\n Container\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,eAAe,QAAQ,mBAAmB;AAMnD,OAAO,MAAMC,SAAS,GAAGD,eAAe,CACpC,6BAA6B,EAC7B,CAAC;EAAEE;AAAyB,CAAC,KAAK;EAC9B,oBAAOH,KAAA,CAAAI,aAAA;IAAKC,SAAS,EAAE;EAAuB,GAAEF,QAAc,CAAC;AACnE,CACJ,CAAC;AAED,OAAO,MAAMG,kBAAkB,GAAG;EAC9BJ;AACJ,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Link, Text } from "@webiny/admin-ui";
|
|
3
|
+
export const FooterSignIn = ({
|
|
4
|
+
onSignIn
|
|
5
|
+
}) => {
|
|
6
|
+
return /*#__PURE__*/React.createElement(Text, {
|
|
7
|
+
as: "div",
|
|
8
|
+
size: "sm"
|
|
9
|
+
}, "Want to sign in?\xA0", /*#__PURE__*/React.createElement(Link, {
|
|
10
|
+
to: "#",
|
|
11
|
+
onClick: onSignIn
|
|
12
|
+
}, "Sign in"), ".");
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=FooterSignIn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Link","Text","FooterSignIn","onSignIn","createElement","as","size","to","onClick"],"sources":["FooterSignIn.tsx"],"sourcesContent":["import React from \"react\";\nimport { Link, Text } from \"@webiny/admin-ui\";\n\ninterface FooterSignInProps {\n onSignIn: () => void;\n}\n\nexport const FooterSignIn = ({ onSignIn }: FooterSignInProps) => {\n return (\n <Text as={\"div\"} size={\"sm\"}>\n Want to sign in? \n <Link to=\"#\" onClick={onSignIn}>\n Sign in\n </Link>\n .\n </Text>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,IAAI,QAAQ,kBAAkB;AAM7C,OAAO,MAAMC,YAAY,GAAGA,CAAC;EAAEC;AAA4B,CAAC,KAAK;EAC7D,oBACIJ,KAAA,CAAAK,aAAA,CAACH,IAAI;IAACI,EAAE,EAAE,KAAM;IAACC,IAAI,EAAE;EAAK,GAAC,sBAEzB,eAAAP,KAAA,CAAAK,aAAA,CAACJ,IAAI;IAACO,EAAE,EAAC,GAAG;IAACC,OAAO,EAAEL;EAAS,GAAC,SAE1B,CAAC,KAEL,CAAC;AAEf,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { PasswordResetCodeSentVM } from "../../../../admin/presentation/Cognito/abstractions.js";
|
|
3
|
+
export interface PasswordResetCodeSentProps {
|
|
4
|
+
vm: PasswordResetCodeSentVM;
|
|
5
|
+
onResendCode: () => void;
|
|
6
|
+
onCodeAcquired: () => void;
|
|
7
|
+
onCancel: () => void;
|
|
8
|
+
}
|
|
9
|
+
export declare const PasswordResetCodeSent: (props: PasswordResetCodeSentProps) => React.JSX.Element;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Alert, Button, Grid, Text } from "@webiny/admin-ui";
|
|
3
|
+
import { View } from "./View.js";
|
|
4
|
+
import { FooterSignIn } from "./FooterSignIn.js";
|
|
5
|
+
export const PasswordResetCodeSent = props => {
|
|
6
|
+
const {
|
|
7
|
+
vm,
|
|
8
|
+
onResendCode,
|
|
9
|
+
onCodeAcquired,
|
|
10
|
+
onCancel
|
|
11
|
+
} = props;
|
|
12
|
+
return /*#__PURE__*/React.createElement(View.Container, null, /*#__PURE__*/React.createElement(View.Content, null, /*#__PURE__*/React.createElement(View.Title, {
|
|
13
|
+
title: "Password recovery",
|
|
14
|
+
description: "Request a password reset code."
|
|
15
|
+
}), vm.message && /*#__PURE__*/React.createElement("div", {
|
|
16
|
+
className: "mb-lg"
|
|
17
|
+
}, /*#__PURE__*/React.createElement(Alert, {
|
|
18
|
+
title: vm.message.title,
|
|
19
|
+
type: vm.message.type
|
|
20
|
+
}, vm.message.text)), /*#__PURE__*/React.createElement(Grid, null, /*#__PURE__*/React.createElement(Grid.Column, {
|
|
21
|
+
span: 12
|
|
22
|
+
}, /*#__PURE__*/React.createElement(Text, null, "We have sent you a code to reset your password.")), /*#__PURE__*/React.createElement(Grid.Column, {
|
|
23
|
+
span: 12
|
|
24
|
+
}, /*#__PURE__*/React.createElement(Text, null, "Click the \"Resend code\" button below to resend the code in case you haven't received it the first time.")), /*#__PURE__*/React.createElement(Grid.Column, {
|
|
25
|
+
span: 12
|
|
26
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
27
|
+
className: "flex items-center justify-between"
|
|
28
|
+
}, /*#__PURE__*/React.createElement(FooterSignIn, {
|
|
29
|
+
onSignIn: onCancel
|
|
30
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
31
|
+
className: "flex gap-x-sm"
|
|
32
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
33
|
+
variant: "secondary",
|
|
34
|
+
text: "Resend code",
|
|
35
|
+
onClick: onResendCode
|
|
36
|
+
}), /*#__PURE__*/React.createElement(Button, {
|
|
37
|
+
variant: "primary",
|
|
38
|
+
text: "I got the code!",
|
|
39
|
+
onClick: onCodeAcquired
|
|
40
|
+
})))))));
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=PasswordResetCodeSent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Alert","Button","Grid","Text","View","FooterSignIn","PasswordResetCodeSent","props","vm","onResendCode","onCodeAcquired","onCancel","createElement","Container","Content","Title","title","description","message","className","type","text","Column","span","onSignIn","variant","onClick"],"sources":["PasswordResetCodeSent.tsx"],"sourcesContent":["import React from \"react\";\nimport { Alert, Button, Grid, Text } from \"@webiny/admin-ui\";\nimport { View } from \"./View.js\";\nimport type { PasswordResetCodeSentVM } from \"~/admin/presentation/Cognito/abstractions.js\";\nimport { FooterSignIn } from \"~/admin/presentation/Cognito/components/FooterSignIn.js\";\n\nexport interface PasswordResetCodeSentProps {\n vm: PasswordResetCodeSentVM;\n onResendCode: () => void;\n onCodeAcquired: () => void;\n onCancel: () => void;\n}\n\nexport const PasswordResetCodeSent = (props: PasswordResetCodeSentProps) => {\n const { vm, onResendCode, onCodeAcquired, onCancel } = props;\n\n return (\n <View.Container>\n <View.Content>\n <View.Title\n title={\"Password recovery\"}\n description={\"Request a password reset code.\"}\n />\n\n {vm.message && (\n <div className={\"mb-lg\"}>\n <Alert title={vm.message.title} type={vm.message.type}>\n {vm.message.text}\n </Alert>\n </div>\n )}\n\n <Grid>\n <Grid.Column span={12}>\n <Text>We have sent you a code to reset your password.</Text>\n </Grid.Column>\n <Grid.Column span={12}>\n <Text>\n Click the "Resend code" button below to resend the code in\n case you haven't received it the first time.\n </Text>\n </Grid.Column>\n\n <Grid.Column span={12}>\n <div className={\"flex items-center justify-between\"}>\n <FooterSignIn onSignIn={onCancel} />\n <div className={\"flex gap-x-sm\"}>\n <Button\n variant={\"secondary\"}\n text={\"Resend code\"}\n onClick={onResendCode}\n />\n <Button\n variant={\"primary\"}\n text={\"I got the code!\"}\n onClick={onCodeAcquired}\n />\n </div>\n </div>\n </Grid.Column>\n </Grid>\n </View.Content>\n </View.Container>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,KAAK,EAAEC,MAAM,EAAEC,IAAI,EAAEC,IAAI,QAAQ,kBAAkB;AAC5D,SAASC,IAAI;AAEb,SAASC,YAAY;AASrB,OAAO,MAAMC,qBAAqB,GAAIC,KAAiC,IAAK;EACxE,MAAM;IAAEC,EAAE;IAAEC,YAAY;IAAEC,cAAc;IAAEC;EAAS,CAAC,GAAGJ,KAAK;EAE5D,oBACIR,KAAA,CAAAa,aAAA,CAACR,IAAI,CAACS,SAAS,qBACXd,KAAA,CAAAa,aAAA,CAACR,IAAI,CAACU,OAAO,qBACTf,KAAA,CAAAa,aAAA,CAACR,IAAI,CAACW,KAAK;IACPC,KAAK,EAAE,mBAAoB;IAC3BC,WAAW,EAAE;EAAiC,CACjD,CAAC,EAEDT,EAAE,CAACU,OAAO,iBACPnB,KAAA,CAAAa,aAAA;IAAKO,SAAS,EAAE;EAAQ,gBACpBpB,KAAA,CAAAa,aAAA,CAACZ,KAAK;IAACgB,KAAK,EAAER,EAAE,CAACU,OAAO,CAACF,KAAM;IAACI,IAAI,EAAEZ,EAAE,CAACU,OAAO,CAACE;EAAK,GACjDZ,EAAE,CAACU,OAAO,CAACG,IACT,CACN,CACR,eAEDtB,KAAA,CAAAa,aAAA,CAACV,IAAI,qBACDH,KAAA,CAAAa,aAAA,CAACV,IAAI,CAACoB,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClBxB,KAAA,CAAAa,aAAA,CAACT,IAAI,QAAC,iDAAqD,CAClD,CAAC,eACdJ,KAAA,CAAAa,aAAA,CAACV,IAAI,CAACoB,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClBxB,KAAA,CAAAa,aAAA,CAACT,IAAI,QAAC,2GAGA,CACG,CAAC,eAEdJ,KAAA,CAAAa,aAAA,CAACV,IAAI,CAACoB,MAAM;IAACC,IAAI,EAAE;EAAG,gBAClBxB,KAAA,CAAAa,aAAA;IAAKO,SAAS,EAAE;EAAoC,gBAChDpB,KAAA,CAAAa,aAAA,CAACP,YAAY;IAACmB,QAAQ,EAAEb;EAAS,CAAE,CAAC,eACpCZ,KAAA,CAAAa,aAAA;IAAKO,SAAS,EAAE;EAAgB,gBAC5BpB,KAAA,CAAAa,aAAA,CAACX,MAAM;IACHwB,OAAO,EAAE,WAAY;IACrBJ,IAAI,EAAE,aAAc;IACpBK,OAAO,EAAEjB;EAAa,CACzB,CAAC,eACFV,KAAA,CAAAa,aAAA,CAACX,MAAM;IACHwB,OAAO,EAAE,SAAU;IACnBJ,IAAI,EAAE,iBAAkB;IACxBK,OAAO,EAAEhB;EAAe,CAC3B,CACA,CACJ,CACI,CACX,CACI,CACF,CAAC;AAEzB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { RequestPasswordResetCodeVM } from "../../../../admin/presentation/Cognito/abstractions.js";
|
|
3
|
+
export interface ForgotPasswordProps {
|
|
4
|
+
vm: RequestPasswordResetCodeVM;
|
|
5
|
+
onRequestCode: (username: string) => void;
|
|
6
|
+
onCancel: () => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const RequestPasswordResetCode: (props: ForgotPasswordProps) => React.JSX.Element;
|