diff --git a/apps/browser/src/auth/popup/sso-v1.component.html b/apps/browser/src/auth/popup/sso-v1.component.html deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/apps/browser/src/auth/popup/sso-v1.component.ts b/apps/browser/src/auth/popup/sso-v1.component.ts deleted file mode 100644 index f56fe697e70..00000000000 --- a/apps/browser/src/auth/popup/sso-v1.component.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { Component, Inject } from "@angular/core"; -import { takeUntilDestroyed } from "@angular/core/rxjs-interop"; -import { ActivatedRoute, Router } from "@angular/router"; - -import { SsoComponent as BaseSsoComponent } from "@bitwarden/angular/auth/components/sso.component"; -import { WINDOW } from "@bitwarden/angular/services/injection-tokens"; -import { - LoginStrategyServiceAbstraction, - UserDecryptionOptionsServiceAbstraction, -} from "@bitwarden/auth/common"; -import { ApiService } from "@bitwarden/common/abstractions/api.service"; -import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; -import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; -import { SsoLoginServiceAbstraction } from "@bitwarden/common/auth/abstractions/sso-login.service.abstraction"; -import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; -import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/key-management/master-password/abstractions/master-password.service.abstraction"; -import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; -import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; -import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; -import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; -import { ToastService } from "@bitwarden/components"; -import { PasswordGenerationServiceAbstraction } from "@bitwarden/generator-legacy"; - -import { BrowserApi } from "../../platform/browser/browser-api"; - -@Component({ - selector: "app-sso", - templateUrl: "sso-v1.component.html", -}) -export class SsoComponentV1 extends BaseSsoComponent { - constructor( - ssoLoginService: SsoLoginServiceAbstraction, - loginStrategyService: LoginStrategyServiceAbstraction, - router: Router, - i18nService: I18nService, - route: ActivatedRoute, - stateService: StateService, - platformUtilsService: PlatformUtilsService, - apiService: ApiService, - cryptoFunctionService: CryptoFunctionService, - passwordGenerationService: PasswordGenerationServiceAbstraction, - syncService: SyncService, - environmentService: EnvironmentService, - logService: LogService, - userDecryptionOptionsService: UserDecryptionOptionsServiceAbstraction, - configService: ConfigService, - masterPasswordService: InternalMasterPasswordServiceAbstraction, - accountService: AccountService, - private authService: AuthService, - @Inject(WINDOW) private win: Window, - toastService: ToastService, - ) { - super( - ssoLoginService, - loginStrategyService, - router, - i18nService, - route, - stateService, - platformUtilsService, - apiService, - cryptoFunctionService, - environmentService, - passwordGenerationService, - logService, - userDecryptionOptionsService, - configService, - masterPasswordService, - accountService, - toastService, - ); - - environmentService.environment$.pipe(takeUntilDestroyed()).subscribe((env) => { - this.redirectUri = env.getWebVaultUrl() + "/sso-connector.html"; - }); - this.clientId = "browser"; - - this.onSuccessfulLogin = async () => { - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - syncService.fullSync(true); - - // If the vault is unlocked then this will clear keys from memory, which we don't want to do - if ((await this.authService.getAuthStatus()) !== AuthenticationStatus.Unlocked) { - BrowserApi.reloadOpenWindows(); - } - - this.win.close(); - }; - - this.onSuccessfulLoginTde = async () => { - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - syncService.fullSync(true); - }; - - this.onSuccessfulLoginTdeNavigate = async () => { - this.win.close(); - }; - } -} diff --git a/apps/browser/src/popup/app.module.ts b/apps/browser/src/popup/app.module.ts index b2542679e06..71e310ad335 100644 --- a/apps/browser/src/popup/app.module.ts +++ b/apps/browser/src/popup/app.module.ts @@ -24,7 +24,6 @@ import { RemovePasswordComponent } from "../auth/popup/remove-password.component import { SetPasswordComponent } from "../auth/popup/set-password.component"; import { AccountSecurityComponent } from "../auth/popup/settings/account-security.component"; import { VaultTimeoutInputComponent } from "../auth/popup/settings/vault-timeout-input.component"; -import { SsoComponentV1 } from "../auth/popup/sso-v1.component"; import { UpdateTempPasswordComponent } from "../auth/popup/update-temp-password.component"; import { AutofillComponent } from "../autofill/popup/settings/autofill.component"; import { NotificationsSettingsComponent } from "../autofill/popup/settings/notifications.component"; @@ -89,7 +88,6 @@ import "../platform/popup/locales"; ColorPasswordPipe, ColorPasswordCountPipe, SetPasswordComponent, - SsoComponentV1, TabsV2Component, UpdateTempPasswordComponent, UserVerificationComponent, diff --git a/apps/desktop/src/app/app.module.ts b/apps/desktop/src/app/app.module.ts index b717afe4a41..fdc25ed642e 100644 --- a/apps/desktop/src/app/app.module.ts +++ b/apps/desktop/src/app/app.module.ts @@ -15,7 +15,6 @@ import { DeleteAccountComponent } from "../auth/delete-account.component"; import { LoginModule } from "../auth/login/login.module"; import { RemovePasswordComponent } from "../auth/remove-password.component"; import { SetPasswordComponent } from "../auth/set-password.component"; -import { SsoComponentV1 } from "../auth/sso-v1.component"; import { UpdateTempPasswordComponent } from "../auth/update-temp-password.component"; import { SshAgentService } from "../autofill/services/ssh-agent.service"; import { PremiumComponent } from "../billing/app/accounts/premium.component"; @@ -76,7 +75,6 @@ import { SharedModule } from "./shared/shared.module"; SetPasswordComponent, SettingsComponent, ShareComponent, - SsoComponentV1, UpdateTempPasswordComponent, VaultComponent, VaultTimeoutInputComponent, diff --git a/apps/desktop/src/auth/sso-v1.component.html b/apps/desktop/src/auth/sso-v1.component.html deleted file mode 100644 index cb5bba9dc66..00000000000 --- a/apps/desktop/src/auth/sso-v1.component.html +++ /dev/null @@ -1,9 +0,0 @@ -
diff --git a/apps/desktop/src/auth/sso-v1.component.ts b/apps/desktop/src/auth/sso-v1.component.ts deleted file mode 100644 index 1bb6d8362a1..00000000000 --- a/apps/desktop/src/auth/sso-v1.component.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Component } from "@angular/core"; -import { ActivatedRoute, Router } from "@angular/router"; - -import { SsoComponent as BaseSsoComponent } from "@bitwarden/angular/auth/components/sso.component"; -import { - LoginStrategyServiceAbstraction, - UserDecryptionOptionsServiceAbstraction, -} from "@bitwarden/auth/common"; -import { ApiService } from "@bitwarden/common/abstractions/api.service"; -import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; -import { SsoLoginServiceAbstraction } from "@bitwarden/common/auth/abstractions/sso-login.service.abstraction"; -import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/key-management/master-password/abstractions/master-password.service.abstraction"; -import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; -import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; -import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; -import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; -import { ToastService } from "@bitwarden/components"; -import { PasswordGenerationServiceAbstraction } from "@bitwarden/generator-legacy"; - -@Component({ - selector: "app-sso", - templateUrl: "sso-v1.component.html", -}) -export class SsoComponentV1 extends BaseSsoComponent { - constructor( - ssoLoginService: SsoLoginServiceAbstraction, - loginStrategyService: LoginStrategyServiceAbstraction, - router: Router, - i18nService: I18nService, - syncService: SyncService, - route: ActivatedRoute, - stateService: StateService, - platformUtilsService: PlatformUtilsService, - apiService: ApiService, - cryptoFunctionService: CryptoFunctionService, - environmentService: EnvironmentService, - passwordGenerationService: PasswordGenerationServiceAbstraction, - logService: LogService, - userDecryptionOptionsService: UserDecryptionOptionsServiceAbstraction, - configService: ConfigService, - masterPasswordService: InternalMasterPasswordServiceAbstraction, - accountService: AccountService, - toastService: ToastService, - ) { - super( - ssoLoginService, - loginStrategyService, - router, - i18nService, - route, - stateService, - platformUtilsService, - apiService, - cryptoFunctionService, - environmentService, - passwordGenerationService, - logService, - userDecryptionOptionsService, - configService, - masterPasswordService, - accountService, - toastService, - ); - this.onSuccessfulLogin = async () => { - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - syncService.fullSync(true); - }; - - this.onSuccessfulLoginTde = async () => { - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - syncService.fullSync(true); - }; - - this.redirectUri = "bitwarden://sso-callback"; - this.clientId = "desktop"; - } -} diff --git a/apps/desktop/src/scss/pages.scss b/apps/desktop/src/scss/pages.scss index ecb36aae662..155ffaf0ad1 100644 --- a/apps/desktop/src/scss/pages.scss +++ b/apps/desktop/src/scss/pages.scss @@ -1,7 +1,6 @@ @import "variables.scss"; #lock-page, -#sso-page, #set-password-page, #remove-password-page { display: flex; @@ -106,18 +105,6 @@ } } -#sso-page { - .content { - width: 325px; - - .box { - margin-top: 30px; - margin-bottom: 30px; - text-align: center; - } - } -} - #set-password-page, #remove-password-page { .content { diff --git a/apps/web/src/app/auth/sso-v1.component.html b/apps/web/src/app/auth/sso-v1.component.html deleted file mode 100644 index 59abc92e872..00000000000 --- a/apps/web/src/app/auth/sso-v1.component.html +++ /dev/null @@ -1,22 +0,0 @@ - diff --git a/apps/web/src/app/auth/sso-v1.component.ts b/apps/web/src/app/auth/sso-v1.component.ts deleted file mode 100644 index d664f5b890b..00000000000 --- a/apps/web/src/app/auth/sso-v1.component.ts +++ /dev/null @@ -1,186 +0,0 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -import { Component, OnInit } from "@angular/core"; -import { FormControl, FormGroup, Validators } from "@angular/forms"; -import { ActivatedRoute, Router } from "@angular/router"; -import { firstValueFrom } from "rxjs"; -import { first } from "rxjs/operators"; - -import { SsoComponent as BaseSsoComponent } from "@bitwarden/angular/auth/components/sso.component"; -import { - LoginStrategyServiceAbstraction, - UserDecryptionOptionsServiceAbstraction, -} from "@bitwarden/auth/common"; -import { ApiService } from "@bitwarden/common/abstractions/api.service"; -import { OrgDomainApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization-domain/org-domain-api.service.abstraction"; -import { OrganizationDomainSsoDetailsResponse } from "@bitwarden/common/admin-console/abstractions/organization-domain/responses/organization-domain-sso-details.response"; -import { VerifiedOrganizationDomainSsoDetailsResponse } from "@bitwarden/common/admin-console/abstractions/organization-domain/responses/verified-organization-domain-sso-details.response"; -import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; -import { SsoLoginServiceAbstraction } from "@bitwarden/common/auth/abstractions/sso-login.service.abstraction"; -import { HttpStatusCode } from "@bitwarden/common/enums"; -import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; -import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/key-management/master-password/abstractions/master-password.service.abstraction"; -import { ErrorResponse } from "@bitwarden/common/models/response/error.response"; -import { ListResponse } from "@bitwarden/common/models/response/list.response"; -import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; -import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; -import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; -import { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service"; -import { ToastService } from "@bitwarden/components"; -import { PasswordGenerationServiceAbstraction } from "@bitwarden/generator-legacy"; - -@Component({ - selector: "app-sso", - templateUrl: "sso-v1.component.html", -}) -export class SsoComponentV1 extends BaseSsoComponent implements OnInit { - protected formGroup = new FormGroup({ - identifier: new FormControl(null, [Validators.required]), - }); - - get identifierFormControl() { - return this.formGroup.controls.identifier; - } - - constructor( - ssoLoginService: SsoLoginServiceAbstraction, - loginStrategyService: LoginStrategyServiceAbstraction, - router: Router, - i18nService: I18nService, - route: ActivatedRoute, - stateService: StateService, - platformUtilsService: PlatformUtilsService, - apiService: ApiService, - cryptoFunctionService: CryptoFunctionService, - environmentService: EnvironmentService, - passwordGenerationService: PasswordGenerationServiceAbstraction, - logService: LogService, - private orgDomainApiService: OrgDomainApiServiceAbstraction, - private validationService: ValidationService, - userDecryptionOptionsService: UserDecryptionOptionsServiceAbstraction, - configService: ConfigService, - masterPasswordService: InternalMasterPasswordServiceAbstraction, - accountService: AccountService, - toastService: ToastService, - ) { - super( - ssoLoginService, - loginStrategyService, - router, - i18nService, - route, - stateService, - platformUtilsService, - apiService, - cryptoFunctionService, - environmentService, - passwordGenerationService, - logService, - userDecryptionOptionsService, - configService, - masterPasswordService, - accountService, - toastService, - ); - this.redirectUri = window.location.origin + "/sso-connector.html"; - this.clientId = "web"; - } - - async ngOnInit() { - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - super.ngOnInit(); - - // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe - this.route.queryParams.pipe(first()).subscribe(async (qParams) => { - if (qParams.identifier != null) { - // SSO Org Identifier in query params takes precedence over claimed domains - this.identifierFormControl.setValue(qParams.identifier); - this.loggingIn = true; - await this.submit(); - } else { - // Note: this flow is written for web but both browser and desktop - // redirect here on SSO button click. - - // Check if email matches any claimed domains - if (qParams.email) { - // show loading spinner - this.loggingIn = true; - try { - if (await this.configService.getFeatureFlag(FeatureFlag.VerifiedSsoDomainEndpoint)) { - const response: ListResponse