From e5d4d4ad00d43bf1c1e9b19745329e212816b6cb Mon Sep 17 00:00:00 2001 From: Ike <137194738+ike-kottlowski@users.noreply.github.com> Date: Wed, 14 Feb 2024 09:06:04 -0800 Subject: [PATCH] [PM-4612] [PM-6218] [PM-6219] Enable Duo redirect on Desktop Client (#7798) * enable duo for desktop * added missing return path in main.ts * updated logic in component * removed switch added await; updated logic in main. * addressed subscription concerns in main; updated formatting in 2fa component * Update Duo case in locales --- apps/browser/src/_locales/en/messages.json | 6 +- .../src/auth/two-factor.component.html | 325 ++++++++++-------- apps/desktop/src/auth/two-factor.component.ts | 29 +- apps/desktop/src/images/yubikey.avif | Bin 0 -> 5340 bytes apps/desktop/src/images/yubikey.webp | Bin 0 -> 12884 bytes apps/desktop/src/locales/en/messages.json | 9 + apps/desktop/src/main.ts | 19 +- apps/web/src/locales/en/messages.json | 6 +- 8 files changed, 234 insertions(+), 160 deletions(-) create mode 100644 apps/desktop/src/images/yubikey.avif create mode 100644 apps/desktop/src/images/yubikey.webp diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json index 988c9b0a247..31b02def8a9 100644 --- a/apps/browser/src/_locales/en/messages.json +++ b/apps/browser/src/_locales/en/messages.json @@ -2696,10 +2696,10 @@ } }, "launchDuoAndFollowStepsToFinishLoggingIn": { - "message": "Launch DUO and follow the steps to finish logging in." + "message": "Launch Duo and follow the steps to finish logging in." }, "duoRequiredByOrgForAccount": { - "message": "DUO two-step login is required for your account." + "message": "Duo two-step login is required for your account." }, "openExtensionInNewWindowToCompleteLogin": { "message": "Open the extension in a new window to complete login" @@ -2708,7 +2708,7 @@ "message": "Popout extension" }, "launchDuo": { - "message": "Launch DUO" + "message": "Launch Duo" }, "importFormatError": { "message": "Data is not formatted correctly. Please check your import file and try again." diff --git a/apps/desktop/src/auth/two-factor.component.html b/apps/desktop/src/auth/two-factor.component.html index 44c4b1b60f6..afd866e1d54 100644 --- a/apps/desktop/src/auth/two-factor.component.html +++ b/apps/desktop/src/auth/two-factor.component.html @@ -1,157 +1,186 @@ -
-
-

{{ title }}

-

- {{ "enterVerificationCodeApp" | i18n }} -

-

- {{ "enterVerificationCodeEmail" | i18n: twoFactorEmail }} -

-
-
-
- +
+ +
+ Bitwarden +

{{ title }}

+ +
+ + +

+ {{ "enterVerificationCodeApp" | i18n }} +

+

+ {{ "enterVerificationCodeEmail" | i18n: twoFactorEmail }} +

+
+
+ + +
+
+ + + {{ "sendVerificationCodeEmailAgain" | i18n }} + + +
+ + + +

{{ "insertYubiKey" | i18n }}

+ + + + + +
+
+
+ + +
+
+
+
+ + + +
+
+ +
+
+
+ + + + +
+ + {{ "duoRequiredByOrgForAccount" | i18n }} + + {{ "launchDuoAndFollowStepsToFinishLoggingIn" | i18n }} +
+
+ + + +
+
+ +
+
+
+

{{ "noTwoStepProviders" | i18n }}

+

{{ "noTwoStepProviders2" | i18n }}

+
+
+
+ +
+
+
+ + +
+
+
+ + +
+ +
+ + +
+
+
-
- - +
+
-
-
- -

{{ "insertYubiKey" | i18n }}

- -
-
-
- - -
-
- - -
-
-
-
- -
- -
-
-
-
- - -
-
-
-
- -
- -
-
-
-
- - -
-
-
-
-
-
-
-

{{ "noTwoStepProviders" | i18n }}

-

{{ "noTwoStepProviders2" | i18n }}

-
-
-
-
-
-
- -
+
+ +
-
- - -
-
- - -
-
- + +
diff --git a/apps/desktop/src/auth/two-factor.component.ts b/apps/desktop/src/auth/two-factor.component.ts index 00cb7f52ac2..531e4fb13c7 100644 --- a/apps/desktop/src/auth/two-factor.component.ts +++ b/apps/desktop/src/auth/two-factor.component.ts @@ -1,4 +1,4 @@ -import { Component, Inject, ViewChild, ViewContainerRef } from "@angular/core"; +import { Component, Inject, NgZone, ViewChild, ViewContainerRef } from "@angular/core"; import { ActivatedRoute, Router } from "@angular/router"; import { TwoFactorComponent as BaseTwoFactorComponent } from "@bitwarden/angular/auth/components/two-factor.component"; @@ -11,6 +11,7 @@ import { SsoLoginServiceAbstraction } from "@bitwarden/common/auth/abstractions/ import { TwoFactorService } from "@bitwarden/common/auth/abstractions/two-factor.service"; import { TwoFactorProviderType } from "@bitwarden/common/auth/enums/two-factor-provider-type"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; +import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; import { ConfigServiceAbstraction } from "@bitwarden/common/platform/abstractions/config/config.service.abstraction"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; @@ -21,6 +22,8 @@ import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.serv import { TwoFactorOptionsComponent } from "./two-factor-options.component"; +const BroadcasterSubscriptionId = "TwoFactorComponent"; + @Component({ selector: "app-two-factor", templateUrl: "two-factor.component.html", @@ -31,6 +34,7 @@ export class TwoFactorComponent extends BaseTwoFactorComponent { twoFactorOptionsModal: ViewContainerRef; showingModal = false; + duoCallbackSubscriptionEnabled: boolean = false; constructor( loginStrategyService: LoginStrategyServiceAbstraction, @@ -40,8 +44,10 @@ export class TwoFactorComponent extends BaseTwoFactorComponent { platformUtilsService: PlatformUtilsService, syncService: SyncService, environmentService: EnvironmentService, + private broadcasterService: BroadcasterService, private modalService: ModalService, stateService: StateService, + private ngZone: NgZone, route: ActivatedRoute, logService: LogService, twoFactorService: TwoFactorService, @@ -115,4 +121,25 @@ export class TwoFactorComponent extends BaseTwoFactorComponent { content.setAttribute("style", "width:335px"); } } + + protected override setupDuoResultListener() { + if (!this.duoCallbackSubscriptionEnabled) { + this.broadcasterService.subscribe(BroadcasterSubscriptionId, async (message: any) => { + await this.ngZone.run(async () => { + if (message.command === "duoCallback") { + this.token = message.code; + await this.submit(); + } + }); + }); + this.duoCallbackSubscriptionEnabled = true; + } + } + + ngOnDestroy(): void { + if (this.duoCallbackSubscriptionEnabled) { + this.broadcasterService.unsubscribe(BroadcasterSubscriptionId); + this.duoCallbackSubscriptionEnabled = false; + } + } } diff --git a/apps/desktop/src/images/yubikey.avif b/apps/desktop/src/images/yubikey.avif new file mode 100644 index 0000000000000000000000000000000000000000..ca67e1a25cb82f3ad09bed29d57c36564a144726 GIT binary patch literal 5340 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src/images/yubikey.webp b/apps/desktop/src/images/yubikey.webp new file mode 100644 index 0000000000000000000000000000000000000000..8d3908768246dfa9a2db318c3906c2fbda57d282 GIT binary patch literal 12884 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/src/locales/en/messages.json b/apps/desktop/src/locales/en/messages.json index 2319bc3e41d..d86d1773c92 100644 --- a/apps/desktop/src/locales/en/messages.json +++ b/apps/desktop/src/locales/en/messages.json @@ -2525,6 +2525,15 @@ } } }, + "launchDuoAndFollowStepsToFinishLoggingIn": { + "message": "Launch Duo and follow the steps to finish logging in." + }, + "duoRequiredByOrgForAccount": { + "message": "Duo two-step login is required for your account." + }, + "launchDuo": { + "message": "Launch Duo in Browser" + }, "importFormatError": { "message": "Data is not formatted correctly. Please check your import file and try again." }, diff --git a/apps/desktop/src/main.ts b/apps/desktop/src/main.ts index 6d4b2db19d0..d98bd88e0e4 100644 --- a/apps/desktop/src/main.ts +++ b/apps/desktop/src/main.ts @@ -277,15 +277,24 @@ export class Main { const url = new URL(s); const code = url.searchParams.get("code"); const receivedState = url.searchParams.get("state"); + let message = ""; - if (code == null || receivedState == null) { + if (code === null) { return; } - const message = - s.indexOf("bitwarden://import-callback-lp") === 0 - ? "importCallbackLastPass" - : "ssoCallback"; + if (s.indexOf("bitwarden://duo-callback") === 0) { + message = "duoCallback"; + } else if (receivedState === null) { + return; + } + + if (s.indexOf("bitwarden://import-callback-lp") === 0) { + message = "importCallbackLastPass"; + } else if (s.indexOf("bitwarden://sso-callback") === 0) { + message = "ssoCallback"; + } + this.messagingService.send(message, { code: code, state: receivedState }); }); } diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json index b965a176ab0..f9bbd0031bf 100644 --- a/apps/web/src/locales/en/messages.json +++ b/apps/web/src/locales/en/messages.json @@ -5928,13 +5928,13 @@ } }, "launchDuoAndFollowStepsToFinishLoggingIn": { - "message": "Launch DUO and follow the steps to finish logging in." + "message": "Launch Duo and follow the steps to finish logging in." }, "duoRequiredByOrgForAccount": { - "message": "DUO two-step login is required for your account." + "message": "Duo two-step login is required for your account." }, "launchDuo": { - "message": "Launch DUO" + "message": "Launch Duo" }, "turnOn": { "message": "Turn on"