mirror of
https://github.com/bitwarden/browser
synced 2025-12-11 22:03:36 +00:00
refactor(auth): [PM-9698] remove deprecated SSO components
Removes v1 SSO components in favor of new implementation as well as related orphaned styles/translations. Refs: PM-9698
This commit is contained in:
@@ -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();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -24,7 +24,6 @@ import { RemovePasswordComponent } from "../auth/popup/remove-password.component
|
|||||||
import { SetPasswordComponent } from "../auth/popup/set-password.component";
|
import { SetPasswordComponent } from "../auth/popup/set-password.component";
|
||||||
import { AccountSecurityComponent } from "../auth/popup/settings/account-security.component";
|
import { AccountSecurityComponent } from "../auth/popup/settings/account-security.component";
|
||||||
import { VaultTimeoutInputComponent } from "../auth/popup/settings/vault-timeout-input.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 { UpdateTempPasswordComponent } from "../auth/popup/update-temp-password.component";
|
||||||
import { AutofillComponent } from "../autofill/popup/settings/autofill.component";
|
import { AutofillComponent } from "../autofill/popup/settings/autofill.component";
|
||||||
import { NotificationsSettingsComponent } from "../autofill/popup/settings/notifications.component";
|
import { NotificationsSettingsComponent } from "../autofill/popup/settings/notifications.component";
|
||||||
@@ -89,7 +88,6 @@ import "../platform/popup/locales";
|
|||||||
ColorPasswordPipe,
|
ColorPasswordPipe,
|
||||||
ColorPasswordCountPipe,
|
ColorPasswordCountPipe,
|
||||||
SetPasswordComponent,
|
SetPasswordComponent,
|
||||||
SsoComponentV1,
|
|
||||||
TabsV2Component,
|
TabsV2Component,
|
||||||
UpdateTempPasswordComponent,
|
UpdateTempPasswordComponent,
|
||||||
UserVerificationComponent,
|
UserVerificationComponent,
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import { DeleteAccountComponent } from "../auth/delete-account.component";
|
|||||||
import { LoginModule } from "../auth/login/login.module";
|
import { LoginModule } from "../auth/login/login.module";
|
||||||
import { RemovePasswordComponent } from "../auth/remove-password.component";
|
import { RemovePasswordComponent } from "../auth/remove-password.component";
|
||||||
import { SetPasswordComponent } from "../auth/set-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 { UpdateTempPasswordComponent } from "../auth/update-temp-password.component";
|
||||||
import { SshAgentService } from "../autofill/services/ssh-agent.service";
|
import { SshAgentService } from "../autofill/services/ssh-agent.service";
|
||||||
import { PremiumComponent } from "../billing/app/accounts/premium.component";
|
import { PremiumComponent } from "../billing/app/accounts/premium.component";
|
||||||
@@ -76,7 +75,6 @@ import { SharedModule } from "./shared/shared.module";
|
|||||||
SetPasswordComponent,
|
SetPasswordComponent,
|
||||||
SettingsComponent,
|
SettingsComponent,
|
||||||
ShareComponent,
|
ShareComponent,
|
||||||
SsoComponentV1,
|
|
||||||
UpdateTempPasswordComponent,
|
UpdateTempPasswordComponent,
|
||||||
VaultComponent,
|
VaultComponent,
|
||||||
VaultTimeoutInputComponent,
|
VaultTimeoutInputComponent,
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
<form id="sso-page" (ngSubmit)="submit()">
|
|
||||||
<div class="content">
|
|
||||||
<img class="logo-image" alt="Bitwarden" />
|
|
||||||
<div class="box">
|
|
||||||
<i class="bwi bwi-spinner bwi-spin" title="{{ 'loading' | i18n }}" aria-hidden="true"></i>
|
|
||||||
{{ "loading" | i18n }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
@@ -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";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
@import "variables.scss";
|
@import "variables.scss";
|
||||||
|
|
||||||
#lock-page,
|
#lock-page,
|
||||||
#sso-page,
|
|
||||||
#set-password-page,
|
#set-password-page,
|
||||||
#remove-password-page {
|
#remove-password-page {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -106,18 +105,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#sso-page {
|
|
||||||
.content {
|
|
||||||
width: 325px;
|
|
||||||
|
|
||||||
.box {
|
|
||||||
margin-top: 30px;
|
|
||||||
margin-bottom: 30px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#set-password-page,
|
#set-password-page,
|
||||||
#remove-password-page {
|
#remove-password-page {
|
||||||
.content {
|
.content {
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
<form [formGroup]="formGroup" [bitSubmit]="submit" class="tw-container">
|
|
||||||
<div *ngIf="loggingIn">
|
|
||||||
<i class="bwi bwi-spinner bwi-spin" title="{{ 'loading' | i18n }}" aria-hidden="true"></i>
|
|
||||||
{{ "loading" | i18n }}
|
|
||||||
</div>
|
|
||||||
<div *ngIf="!loggingIn">
|
|
||||||
<p bitTypography="body1">{{ "ssoLogInWithOrgIdentifier" | i18n }}</p>
|
|
||||||
<bit-form-field>
|
|
||||||
<bit-label>{{ "ssoIdentifier" | i18n }}</bit-label>
|
|
||||||
<input bitInput type="text" formControlName="identifier" appAutofocus />
|
|
||||||
</bit-form-field>
|
|
||||||
<hr />
|
|
||||||
<div class="tw-flex tw-gap-2">
|
|
||||||
<button type="submit" bitButton bitFormButton buttonType="primary" [block]="true">
|
|
||||||
{{ "logIn" | i18n }}
|
|
||||||
</button>
|
|
||||||
<a bitButton buttonType="secondary" routerLink="/login" [block]="true">
|
|
||||||
{{ "cancel" | i18n }}
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
@@ -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<VerifiedOrganizationDomainSsoDetailsResponse> =
|
|
||||||
await this.orgDomainApiService.getVerifiedOrgDomainsByEmail(qParams.email);
|
|
||||||
|
|
||||||
if (response.data.length > 0) {
|
|
||||||
this.identifierFormControl.setValue(response.data[0].organizationIdentifier);
|
|
||||||
await this.submit();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const response: OrganizationDomainSsoDetailsResponse =
|
|
||||||
await this.orgDomainApiService.getClaimedOrgDomainByEmail(qParams.email);
|
|
||||||
|
|
||||||
if (response?.ssoAvailable && response?.verifiedDate) {
|
|
||||||
this.identifierFormControl.setValue(response.organizationIdentifier);
|
|
||||||
await this.submit();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
this.handleGetClaimedDomainByEmailError(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.loggingIn = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fallback to state svc if domain is unclaimed
|
|
||||||
const storedIdentifier = await this.ssoLoginService.getOrganizationSsoIdentifier();
|
|
||||||
if (storedIdentifier != null) {
|
|
||||||
this.identifierFormControl.setValue(storedIdentifier);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private handleGetClaimedDomainByEmailError(error: any): void {
|
|
||||||
if (error instanceof ErrorResponse) {
|
|
||||||
const errorResponse: ErrorResponse = error as ErrorResponse;
|
|
||||||
switch (errorResponse.statusCode) {
|
|
||||||
case HttpStatusCode.NotFound:
|
|
||||||
//this is a valid case for a domain not found
|
|
||||||
return;
|
|
||||||
|
|
||||||
default:
|
|
||||||
this.validationService.showError(errorResponse);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
submit = async () => {
|
|
||||||
if (this.formGroup.invalid) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const autoSubmit = (await firstValueFrom(this.route.queryParams)).identifier != null;
|
|
||||||
|
|
||||||
this.identifier = this.identifierFormControl.value;
|
|
||||||
await this.ssoLoginService.setOrganizationSsoIdentifier(this.identifier);
|
|
||||||
if (this.clientId === "browser") {
|
|
||||||
document.cookie = `ssoHandOffMessage=${this.i18nService.t("ssoHandOff")};SameSite=strict`;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
await Object.getPrototypeOf(this).submit.call(this);
|
|
||||||
} catch (error) {
|
|
||||||
if (autoSubmit) {
|
|
||||||
await this.router.navigate(["/login"]);
|
|
||||||
} else {
|
|
||||||
this.validationService.showError(error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -42,7 +42,6 @@ import { TwoFactorSetupYubiKeyComponent } from "../auth/settings/two-factor/two-
|
|||||||
import { TwoFactorSetupComponent } from "../auth/settings/two-factor/two-factor-setup.component";
|
import { TwoFactorSetupComponent } from "../auth/settings/two-factor/two-factor-setup.component";
|
||||||
import { TwoFactorVerifyComponent } from "../auth/settings/two-factor/two-factor-verify.component";
|
import { TwoFactorVerifyComponent } from "../auth/settings/two-factor/two-factor-verify.component";
|
||||||
import { UserVerificationModule } from "../auth/shared/components/user-verification";
|
import { UserVerificationModule } from "../auth/shared/components/user-verification";
|
||||||
import { SsoComponentV1 } from "../auth/sso-v1.component";
|
|
||||||
import { UpdatePasswordComponent } from "../auth/update-password.component";
|
import { UpdatePasswordComponent } from "../auth/update-password.component";
|
||||||
import { UpdateTempPasswordComponent } from "../auth/update-temp-password.component";
|
import { UpdateTempPasswordComponent } from "../auth/update-temp-password.component";
|
||||||
import { VerifyEmailTokenComponent } from "../auth/verify-email-token.component";
|
import { VerifyEmailTokenComponent } from "../auth/verify-email-token.component";
|
||||||
@@ -146,7 +145,6 @@ import { SharedModule } from "./shared.module";
|
|||||||
SetPasswordComponent,
|
SetPasswordComponent,
|
||||||
SponsoredFamiliesComponent,
|
SponsoredFamiliesComponent,
|
||||||
SponsoringOrgRowComponent,
|
SponsoringOrgRowComponent,
|
||||||
SsoComponentV1,
|
|
||||||
TwoFactorSetupAuthenticatorComponent,
|
TwoFactorSetupAuthenticatorComponent,
|
||||||
TwoFactorSetupDuoComponent,
|
TwoFactorSetupDuoComponent,
|
||||||
TwoFactorSetupEmailComponent,
|
TwoFactorSetupEmailComponent,
|
||||||
@@ -206,7 +204,6 @@ import { SharedModule } from "./shared.module";
|
|||||||
SetPasswordComponent,
|
SetPasswordComponent,
|
||||||
SponsoredFamiliesComponent,
|
SponsoredFamiliesComponent,
|
||||||
SponsoringOrgRowComponent,
|
SponsoringOrgRowComponent,
|
||||||
SsoComponentV1,
|
|
||||||
TwoFactorSetupAuthenticatorComponent,
|
TwoFactorSetupAuthenticatorComponent,
|
||||||
TwoFactorSetupDuoComponent,
|
TwoFactorSetupDuoComponent,
|
||||||
TwoFactorSetupEmailComponent,
|
TwoFactorSetupEmailComponent,
|
||||||
|
|||||||
Reference in New Issue
Block a user