@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 CHANGED
@@ -8,5 +8,5 @@ custom/SignupPage.vue
8
8
  custom/SignupUnderLogin.vue
9
9
  custom/tsconfig.json
10
10
 
11
- sent 14,167 bytes received 77 bytes 28,488.00 bytes/sec
11
+ sent 14,163 bytes received 77 bytes 28,480.00 bytes/sec
12
12
  total size is 13,884 speedup is 0.97
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, email));
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 { email } = decoded;
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(email)) {
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, email, emailText, emailHtml, emailSubject);
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 username = email;
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 { email } = decoded;
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(email)) {
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, email, emailText, emailHtml, emailSubject);
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
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adminforth/open-signup",
3
- "version": "2.0.1",
3
+ "version": "2.0.2",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",