From 04e278249e048d76ccd5feefb5c03601880fdecf Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Mon, 22 Jun 2020 10:28:06 -0400 Subject: [PATCH] add support for email coming from username prop (#47) * add support for email coming from username prop * feedback adjustments --- jslib | 2 +- src/app/tabs/settings.component.html | 5 +++-- src/services/onelogin-directory.service.ts | 23 +++++++++++++++++++++- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/jslib b/jslib index 28d21ca5..7f6d7424 160000 --- a/jslib +++ b/jslib @@ -1 +1 @@ -Subproject commit 28d21ca5dfacd1487cd92345d8be9554079fbd96 +Subproject commit 7f6d7424e77bccd68b63506b1205ef0dfa7c21bd diff --git a/src/app/tabs/settings.component.html b/src/app/tabs/settings.component.html index fb3b3edc..8f9b8e87 100644 --- a/src/app/tabs/settings.component.html +++ b/src/app/tabs/settings.component.html @@ -271,7 +271,8 @@ {{'ex' | i18n}} whenChanged - + +
-
+
diff --git a/src/services/onelogin-directory.service.ts b/src/services/onelogin-directory.service.ts index 484ef140..3977c028 100644 --- a/src/services/onelogin-directory.service.ts +++ b/src/services/onelogin-directory.service.ts @@ -12,6 +12,9 @@ import { DirectoryService } from './directory.service'; import { I18nService } from 'jslib/abstractions/i18n.service'; import { LogService } from 'jslib/abstractions/log.service'; +// Basic email validation: something@something.something +const ValidEmailRegex = /^\S+@\S+\.\S+$/; + export class OneLoginDirectoryService extends BaseDirectoryService implements DirectoryService { private dirConfig: OneLoginConfiguration; private syncConfig: SyncConfiguration; @@ -82,9 +85,23 @@ export class OneLoginDirectoryService extends BaseDirectoryService implements Di const entry = new UserEntry(); entry.externalId = user.id; entry.referenceId = user.id; - entry.email = user.email != null ? user.email.trim().toLowerCase() : null; entry.deleted = false; entry.disabled = user.status === 2; + entry.email = user.email; + const emailInvalid = (ue: UserEntry) => ue.email == null || ue.email === ''; + if (emailInvalid(entry) && user.username != null && user.username !== '') { + if (this.validEmailAddress(user.username)) { + entry.email = user.username; + } else if (this.syncConfig.useEmailPrefixSuffix && this.syncConfig.emailSuffix != null) { + entry.email = user.username + this.syncConfig.emailSuffix; + } + } + if (entry.email != null) { + entry.email = entry.email.trim().toLowerCase(); + } + if (emailInvalid(entry) || !this.validEmailAddress(entry.email)) { + return null; + } return entry; } @@ -173,4 +190,8 @@ export class OneLoginDirectoryService extends BaseDirectoryService implements Di } return this.apiGetMany(response.pagination.next_link, currentData); } + + private validEmailAddress(email: string) { + return ValidEmailRegex.test(email); + } }