1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-20 02:03:39 +00:00

fill out webOnInit

This commit is contained in:
rr-bw
2024-08-27 09:31:17 -07:00
parent fcf01fee74
commit 688a24bd52
13 changed files with 109 additions and 20 deletions

View File

@@ -1,21 +1,66 @@
import { inject } from "@angular/core";
import { UrlTree } from "@angular/router";
import { firstValueFrom } from "rxjs";
import { DefaultLoginService, LoginService } from "@bitwarden/auth/angular";
import { DefaultLoginService, LoginService, PasswordPolicies } from "@bitwarden/auth/angular";
import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction";
import { InternalPolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
import { Policy } from "@bitwarden/common/admin-console/models/domain/policy";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { OrganizationInvite } from "../../../../../../../../libs/auth/src/common/models/domain/organization-invite";
import { RouterService } from "../../../../core/router.service";
import { AcceptOrganizationInviteService } from "../../../organization-invite/accept-organization.service";
export class WebLoginService extends DefaultLoginService implements LoginService {
acceptOrganizationInviteService = inject(AcceptOrganizationInviteService);
logService = inject(LogService);
policyApiService = inject(PolicyApiServiceAbstraction);
policyService = inject(InternalPolicyService);
routerService = inject(RouterService);
setPreviousUrl(route: UrlTree): void | null {
this.routerService.setPreviousUrl(route.toString());
}
async handleExistingOrgInvite(): Promise<void | null> {
const orgInvite = await this.acceptOrganizationInviteService.getOrganizationInvite();
if (orgInvite != null) {
await this.initPasswordPolicies(orgInvite);
async getOrganizationInvite(): Promise<OrganizationInvite | null> {
return await this.acceptOrganizationInviteService.getOrganizationInvite();
}
async getPasswordPolicies(invite: OrganizationInvite): Promise<PasswordPolicies> {
let policies: Policy[];
try {
policies = await this.policyApiService.getPoliciesByToken(
invite.organizationId,
invite.token,
invite.email,
invite.organizationUserId,
);
} catch (e) {
this.logService.error(e);
}
if (policies == null) {
return;
}
const resetPasswordPolicy = this.policyService.getResetPasswordPolicyOptions(
policies,
invite.organizationId,
);
const isPolicyAndAutoEnrollEnabled =
resetPasswordPolicy[1] && resetPasswordPolicy[0].autoEnrollEnabled;
const enforcedPasswordPolicyOptions = await firstValueFrom(
this.policyService.masterPasswordPolicyOptions$(policies),
);
return {
policies,
isPolicyAndAutoEnrollEnabled,
enforcedPasswordPolicyOptions,
};
}
}

View File

@@ -15,8 +15,8 @@ import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/sym
import { CsprngArray } from "@bitwarden/common/types/csprng";
import { MasterKey, UserKey } from "@bitwarden/common/types/key";
import { OrganizationInvite } from "../../../../../../../../libs/auth/src/common/models/domain/organization-invite";
import { AcceptOrganizationInviteService } from "../../../organization-invite/accept-organization.service";
import { OrganizationInvite } from "../../../organization-invite/organization-invite";
import { WebRegistrationFinishService } from "./web-registration-finish.service";

View File

@@ -30,10 +30,10 @@ import { StateService } from "@bitwarden/common/platform/abstractions/state.serv
import { PasswordStrengthServiceAbstraction } from "@bitwarden/common/tools/password-strength";
import { PasswordGenerationServiceAbstraction } from "@bitwarden/generator-legacy";
import { OrganizationInvite } from "../../../../../../libs/auth/src/common/models/domain/organization-invite";
import { flagEnabled } from "../../../utils/flags";
import { RouterService } from "../../core";
import { AcceptOrganizationInviteService } from "../organization-invite/accept-organization.service";
import { OrganizationInvite } from "../organization-invite/organization-invite";
@Component({
selector: "app-login",

View File

@@ -7,10 +7,10 @@ import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { OrganizationInvite } from "../../../../../../libs/auth/src/common/models/domain/organization-invite";
import { BaseAcceptComponent } from "../../common/base.accept.component";
import { AcceptOrganizationInviteService } from "./accept-organization.service";
import { OrganizationInvite } from "./organization-invite";
@Component({
templateUrl: "accept-organization.component.html",

View File

@@ -17,13 +17,13 @@ import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
import { FakeGlobalState } from "@bitwarden/common/spec/fake-state";
import { OrgKey } from "@bitwarden/common/types/key";
import { OrganizationInvite } from "../../../../../../libs/auth/src/common/models/domain/organization-invite";
import { I18nService } from "../../core/i18n.service";
import {
AcceptOrganizationInviteService,
ORGANIZATION_INVITE,
} from "./accept-organization.service";
import { OrganizationInvite } from "./organization-invite";
describe("AcceptOrganizationInviteService", () => {
let sut: AcceptOrganizationInviteService;

View File

@@ -27,7 +27,7 @@ import {
} from "@bitwarden/common/platform/state";
import { OrgKey } from "@bitwarden/common/types/key";
import { OrganizationInvite } from "./organization-invite";
import { OrganizationInvite } from "../../../../../../libs/auth/src/common/models/domain/organization-invite";
// We're storing the organization invite for 2 reasons:
// 1. If the org requires a MP policy check, we need to keep track that the user has already been redirected when they return.

View File

@@ -1,38 +0,0 @@
import { Params } from "@angular/router";
import { Jsonify } from "type-fest";
export class OrganizationInvite {
email: string;
initOrganization: boolean;
orgSsoIdentifier: string;
orgUserHasExistingUser: boolean;
organizationId: string;
organizationName: string;
organizationUserId: string;
token: string;
static fromJSON(json: Jsonify<OrganizationInvite>): OrganizationInvite | null {
if (json == null) {
return null;
}
return Object.assign(new OrganizationInvite(), json);
}
static fromParams(params: Params): OrganizationInvite | null {
if (params == null) {
return null;
}
return Object.assign(new OrganizationInvite(), {
email: params.email,
initOrganization: params.initOrganization?.toLocaleLowerCase() === "true",
orgSsoIdentifier: params.orgSsoIdentifier,
orgUserHasExistingUser: params.orgUserHasExistingUser?.toLocaleLowerCase() === "true",
organizationId: params.organizationId,
organizationName: params.organizationName,
organizationUserId: params.organizationUserId,
token: params.token,
});
}
}

View File

@@ -18,10 +18,10 @@ import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.servic
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { StateService } from "@bitwarden/common/platform/abstractions/state.service";
import { OrganizationInvite } from "../../../../../../libs/auth/src/common/models/domain/organization-invite";
import { RouterService } from "../../core";
import { SharedModule } from "../../shared";
import { AcceptOrganizationInviteService } from "../organization-invite/accept-organization.service";
import { OrganizationInvite } from "../organization-invite/organization-invite";
import { TrialInitiationComponent } from "./trial-initiation.component";
import { VerticalStepperComponent } from "./vertical-stepper/vertical-stepper.component";

View File

@@ -14,13 +14,13 @@ import { ReferenceEventRequest } from "@bitwarden/common/models/request/referenc
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { LogService } from "@bitwarden/common/platform/abstractions/log.service";
import { OrganizationInvite } from "../../../../../../libs/auth/src/common/models/domain/organization-invite";
import {
OrganizationCreatedEvent,
SubscriptionProduct,
TrialOrganizationType,
} from "../../billing/accounts/trial-initiation/trial-billing-step.component";
import { AcceptOrganizationInviteService } from "../organization-invite/accept-organization.service";
import { OrganizationInvite } from "../organization-invite/organization-invite";
import { RouterService } from "./../../core/router.service";
import { VerticalStepperComponent } from "./vertical-stepper/vertical-stepper.component";