@adminforth/open-signup 2.0.1 → 2.0.2
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/build.log +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +14 -9
- package/index.ts +17 -12
- package/package.json +1 -1
package/build.log
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
11
11
|
constructor(options: PluginOptions);
|
|
12
12
|
modifyResourceConfig(adminforth: IAdminForth, resourceConfig: AdminForthResource): Promise<void>;
|
|
13
13
|
getAllowedOrigins(): string[];
|
|
14
|
+
normalizeUsername(email: string): string;
|
|
14
15
|
validateConfigAfterDiscover(adminforth: IAdminForth, resourceConfig: AdminForthResource): void;
|
|
15
16
|
instanceUniqueRepresentation(pluginOptions: any): string;
|
|
16
17
|
doLogin(email: string, response: any, extra: HttpExtra): Promise<{
|
package/dist/index.js
CHANGED
|
@@ -115,6 +115,13 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
115
115
|
const originList = Array.isArray(rawOrigins) ? rawOrigins : [rawOrigins];
|
|
116
116
|
return originList.map(o => new URL(o).origin);
|
|
117
117
|
}
|
|
118
|
+
normalizeUsername(email) {
|
|
119
|
+
if (this.adminforth.config.auth.usernameField !== this.emailField.name) {
|
|
120
|
+
return email;
|
|
121
|
+
}
|
|
122
|
+
const normalize = this.emailField.normalize;
|
|
123
|
+
return normalize ? normalize(email) : email;
|
|
124
|
+
}
|
|
118
125
|
validateConfigAfterDiscover(adminforth, resourceConfig) {
|
|
119
126
|
if (this.options.confirmEmails) {
|
|
120
127
|
this.options.confirmEmails.adapter.validate();
|
|
@@ -133,8 +140,8 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
133
140
|
}
|
|
134
141
|
doLogin(email, response, extra) {
|
|
135
142
|
return __awaiter(this, void 0, void 0, function* () {
|
|
136
|
-
const username = email;
|
|
137
|
-
const userRecord = yield this.adminforth.resource(this.authResource.resourceId).get(Filters.EQ(this.emailField.name,
|
|
143
|
+
const username = this.normalizeUsername(email);
|
|
144
|
+
const userRecord = yield this.adminforth.resource(this.authResource.resourceId).get(Filters.EQ(this.emailField.name, username));
|
|
138
145
|
const adminUser = {
|
|
139
146
|
dbUser: userRecord,
|
|
140
147
|
pk: userRecord[this.authResource.columns.find((col) => col.primaryKey).name],
|
|
@@ -189,7 +196,7 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
189
196
|
if (!decoded || !decoded.email) {
|
|
190
197
|
return { error: yield tr('Invalid token', 'opensignup'), ok: false };
|
|
191
198
|
}
|
|
192
|
-
const
|
|
199
|
+
const email = this.normalizeUsername(decoded.email);
|
|
193
200
|
if (!password) {
|
|
194
201
|
return { error: yield tr('Password is required', 'opensignup'), ok: false };
|
|
195
202
|
}
|
|
@@ -219,6 +226,7 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
219
226
|
if (!email || typeof email !== 'string') {
|
|
220
227
|
return { error: yield tr('Email is required', 'opensignup'), ok: false };
|
|
221
228
|
}
|
|
229
|
+
const normalizedEmail = this.normalizeUsername(email);
|
|
222
230
|
if (!this.options.confirmEmails && !password) {
|
|
223
231
|
return { error: yield tr('Password is required', 'opensignup'), ok: false };
|
|
224
232
|
}
|
|
@@ -238,7 +246,7 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
238
246
|
// validate email
|
|
239
247
|
if (this.emailField.validation) {
|
|
240
248
|
for (const { regExp, message } of this.emailField.validation) {
|
|
241
|
-
if (!new RegExp(regExp).test(
|
|
249
|
+
if (!new RegExp(regExp).test(normalizedEmail)) {
|
|
242
250
|
return { error: yield tr(message, 'opensignup'), ok: false };
|
|
243
251
|
}
|
|
244
252
|
}
|
|
@@ -265,9 +273,6 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
265
273
|
}
|
|
266
274
|
}
|
|
267
275
|
}
|
|
268
|
-
// This is not needed when right email validator is set on email field because
|
|
269
|
-
// it will not allow to create such email, but if user forgot to set it it might save situation
|
|
270
|
-
const normalizedEmail = email.toLowerCase(); // normalize email
|
|
271
276
|
// first check again if email already exists
|
|
272
277
|
const existingUser = yield this.adminforth.resource(this.authResource.resourceId).get(Filters.EQ(this.emailField.name, normalizedEmail));
|
|
273
278
|
if ((!this.options.confirmEmails && existingUser) || (this.options.confirmEmails && (existingUser === null || existingUser === void 0 ? void 0 : existingUser[this.emailConfirmedField.name]))) {
|
|
@@ -315,7 +320,7 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
315
320
|
}
|
|
316
321
|
// send confirmation email
|
|
317
322
|
const brandName = this.adminforth.config.customization.brandName;
|
|
318
|
-
const verifyToken = this.adminforth.auth.issueJWT({ email, issuer: brandName }, 'tempVerifyEmailToken', '2h');
|
|
323
|
+
const verifyToken = this.adminforth.auth.issueJWT({ email: normalizedEmail, issuer: brandName }, 'tempVerifyEmailToken', '2h');
|
|
319
324
|
process.env.HEAVY_DEBUG && console.log('🐛Sending reset tok to', verifyToken);
|
|
320
325
|
const emailText = yield tr(`
|
|
321
326
|
Dear user,
|
|
@@ -359,7 +364,7 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
359
364
|
`;
|
|
360
365
|
const emailSubject = yield tr(`Signup request at {brandName}`, 'opensignup', { brandName });
|
|
361
366
|
// send email with AWS SES this.options.providerOptions.AWS_SES
|
|
362
|
-
this.options.confirmEmails.adapter.sendEmail(this.options.confirmEmails.sendFrom,
|
|
367
|
+
this.options.confirmEmails.adapter.sendEmail(this.options.confirmEmails.sendFrom, normalizedEmail, emailText, emailHtml, emailSubject);
|
|
363
368
|
return { ok: true };
|
|
364
369
|
})
|
|
365
370
|
});
|
package/index.ts
CHANGED
|
@@ -129,6 +129,15 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
129
129
|
const originList = Array.isArray(rawOrigins) ? rawOrigins : [rawOrigins];
|
|
130
130
|
return originList.map(o => new URL(o).origin);
|
|
131
131
|
}
|
|
132
|
+
|
|
133
|
+
normalizeUsername(email: string): string {
|
|
134
|
+
if (this.adminforth.config.auth.usernameField !== this.emailField.name) {
|
|
135
|
+
return email;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const normalize = (this.emailField as AdminForthResourceColumn & { normalize?: (value: any) => any }).normalize;
|
|
139
|
+
return normalize ? normalize(email) : email;
|
|
140
|
+
}
|
|
132
141
|
|
|
133
142
|
validateConfigAfterDiscover(adminforth: IAdminForth, resourceConfig: AdminForthResource) {
|
|
134
143
|
if (this.options.confirmEmails) {
|
|
@@ -151,9 +160,8 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
151
160
|
}
|
|
152
161
|
|
|
153
162
|
async doLogin(email: string, response: any, extra: HttpExtra): Promise<{ error?: string; allowedLogin: boolean; redirectTo?: string; }> {
|
|
154
|
-
|
|
155
|
-
const
|
|
156
|
-
const userRecord = await this.adminforth.resource(this.authResource.resourceId).get(Filters.EQ(this.emailField.name, email));
|
|
163
|
+
const username = this.normalizeUsername(email);
|
|
164
|
+
const userRecord = await this.adminforth.resource(this.authResource.resourceId).get(Filters.EQ(this.emailField.name, username));
|
|
157
165
|
const adminUser = {
|
|
158
166
|
dbUser: userRecord,
|
|
159
167
|
pk: userRecord[this.authResource.columns.find((col) => col.primaryKey).name],
|
|
@@ -218,7 +226,7 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
218
226
|
if (!decoded || !decoded.email) {
|
|
219
227
|
return { error: await tr('Invalid token', 'opensignup'), ok: false };
|
|
220
228
|
}
|
|
221
|
-
const
|
|
229
|
+
const email = this.normalizeUsername(decoded.email);
|
|
222
230
|
|
|
223
231
|
if(!password) {
|
|
224
232
|
return { error: await tr('Password is required', 'opensignup'), ok: false };
|
|
@@ -251,6 +259,7 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
251
259
|
if (!email || typeof email !== 'string') {
|
|
252
260
|
return { error: await tr('Email is required', 'opensignup'), ok: false };
|
|
253
261
|
}
|
|
262
|
+
const normalizedEmail = this.normalizeUsername(email);
|
|
254
263
|
if (!this.options.confirmEmails && !password) {
|
|
255
264
|
return { error: await tr('Password is required', 'opensignup'), ok: false };
|
|
256
265
|
}
|
|
@@ -271,7 +280,7 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
271
280
|
// validate email
|
|
272
281
|
if (this.emailField.validation) {
|
|
273
282
|
for (const { regExp, message } of this.emailField.validation) {
|
|
274
|
-
if (!new RegExp(regExp).test(
|
|
283
|
+
if (!new RegExp(regExp).test(normalizedEmail)) {
|
|
275
284
|
return { error: await tr(message, 'opensignup'), ok: false };
|
|
276
285
|
}
|
|
277
286
|
}
|
|
@@ -299,10 +308,6 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
299
308
|
}
|
|
300
309
|
}
|
|
301
310
|
|
|
302
|
-
// This is not needed when right email validator is set on email field because
|
|
303
|
-
// it will not allow to create such email, but if user forgot to set it it might save situation
|
|
304
|
-
const normalizedEmail = email.toLowerCase(); // normalize email
|
|
305
|
-
|
|
306
311
|
// first check again if email already exists
|
|
307
312
|
const existingUser = await this.adminforth.resource(this.authResource.resourceId).get(Filters.EQ(this.emailField.name, normalizedEmail));
|
|
308
313
|
if ((!this.options.confirmEmails && existingUser) || (this.options.confirmEmails && existingUser?.[this.emailConfirmedField.name])) {
|
|
@@ -365,7 +370,7 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
365
370
|
|
|
366
371
|
const brandName = this.adminforth.config.customization.brandName;
|
|
367
372
|
|
|
368
|
-
const verifyToken = this.adminforth.auth.issueJWT({email, issuer: brandName }, 'tempVerifyEmailToken', '2h');
|
|
373
|
+
const verifyToken = this.adminforth.auth.issueJWT({ email: normalizedEmail, issuer: brandName }, 'tempVerifyEmailToken', '2h');
|
|
369
374
|
process.env.HEAVY_DEBUG && console.log('🐛Sending reset tok to', verifyToken);
|
|
370
375
|
const emailText = await tr(`
|
|
371
376
|
Dear user,
|
|
@@ -413,7 +418,7 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
413
418
|
const emailSubject = await tr(`Signup request at {brandName}`, 'opensignup', { brandName });
|
|
414
419
|
|
|
415
420
|
// send email with AWS SES this.options.providerOptions.AWS_SES
|
|
416
|
-
this.options.confirmEmails.adapter.sendEmail(this.options.confirmEmails.sendFrom,
|
|
421
|
+
this.options.confirmEmails.adapter.sendEmail(this.options.confirmEmails.sendFrom, normalizedEmail, emailText, emailHtml, emailSubject);
|
|
417
422
|
|
|
418
423
|
return { ok: true };
|
|
419
424
|
}
|
|
@@ -423,4 +428,4 @@ export default class OpenSignupPlugin extends AdminForthPlugin {
|
|
|
423
428
|
|
|
424
429
|
}
|
|
425
430
|
|
|
426
|
-
}
|
|
431
|
+
}
|