Skip to content

Commit

Permalink
Migrate OrganizationService methods to use StateProvider
Browse files Browse the repository at this point in the history
  • Loading branch information
addisonbeck committed Feb 15, 2024
1 parent ba845b9 commit d7d26e8
Show file tree
Hide file tree
Showing 37 changed files with 186 additions and 247 deletions.
Expand Up @@ -6,10 +6,7 @@ import {
factory,
} from "../../../platform/background/service-factories/factory-options";
import { stateProviderFactory } from "../../../platform/background/service-factories/state-provider.factory";
import {
stateServiceFactory,
StateServiceInitOptions,
} from "../../../platform/background/service-factories/state-service.factory";
import { StateServiceInitOptions } from "../../../platform/background/service-factories/state-service.factory";
import { BrowserOrganizationService } from "../../services/browser-organization.service";

type OrganizationServiceFactoryOptions = FactoryOptions;
Expand All @@ -25,10 +22,6 @@ export function organizationServiceFactory(
cache,
"organizationService",
opts,
async () =>
new BrowserOrganizationService(
await stateServiceFactory(cache, opts),
await stateProviderFactory(cache, opts),
),
async () => new BrowserOrganizationService(await stateProviderFactory(cache, opts)),

Check warning on line 25 in apps/browser/src/admin-console/background/service-factories/organization-service.factory.ts

View check run for this annotation

Codecov / codecov/patch

apps/browser/src/admin-console/background/service-factories/organization-service.factory.ts#L25

Added line #L25 was not covered by tests
);
}
4 changes: 2 additions & 2 deletions apps/browser/src/popup/services/services.module.ts
Expand Up @@ -421,9 +421,9 @@ function getBgService<T>(service: keyof MainBackground) {
{
provide: OrganizationService,
useFactory: (stateService: StateServiceAbstraction, stateProvider: StateProvider) => {
return new BrowserOrganizationService(stateService, stateProvider);
return new BrowserOrganizationService(stateProvider);
},
deps: [StateServiceAbstraction, StateProvider],
deps: [StateProvider],
},
{
provide: VaultFilterService,
Expand Down
Expand Up @@ -256,7 +256,7 @@ export class CurrentTabComponent implements OnInit, OnDestroy {
const otherTypes: CipherType[] = [];
const dontShowCards = await this.stateService.getDontShowCardsCurrentTab();
const dontShowIdentities = await this.stateService.getDontShowIdentitiesCurrentTab();
this.showOrganizations = this.organizationService.hasOrganizations();
this.showOrganizations = await this.organizationService.hasOrganizations();
if (!dontShowCards) {
otherTypes.push(CipherType.Card);
}
Expand Down
Expand Up @@ -74,7 +74,7 @@ export class VaultItemsComponent extends BaseVaultItemsComponent implements OnIn

async ngOnInit() {
this.searchTypeSearch = !this.platformUtilsService.isSafari();
this.showOrganizations = this.organizationService.hasOrganizations();
this.showOrganizations = await this.organizationService.hasOrganizations();
this.vaultFilter = this.vaultFilterService.getVaultFilter();
// eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe
this.route.queryParams.pipe(first()).subscribe(async (params) => {
Expand Down
2 changes: 1 addition & 1 deletion apps/cli/src/bw.ts
Expand Up @@ -364,7 +364,7 @@ export class Main {

this.providerService = new ProviderService(this.stateService);

this.organizationService = new OrganizationService(this.stateService, this.stateProvider);
this.organizationService = new OrganizationService(this.stateProvider);

this.organizationUserService = new OrganizationUserServiceImplementation(this.apiService);

Expand Down
Expand Up @@ -17,7 +17,7 @@ export class IsPaidOrgGuard implements CanActivate {
) {}

async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const org = this.organizationService.get(route.params.organizationId);
const org = await this.organizationService.get(route.params.organizationId);

if (org == null) {
return this.router.createUrlTree(["/"]);
Expand Down
Expand Up @@ -57,7 +57,7 @@ describe("Organization Permissions Guard", () => {
});

it("blocks navigation if organization does not exist", async () => {
organizationService.get.mockReturnValue(null);
organizationService.get.mockResolvedValue(null);

const actual = await organizationPermissionsGuard.canActivate(route, state);

Expand All @@ -66,7 +66,7 @@ describe("Organization Permissions Guard", () => {

it("permits navigation if no permissions are specified", async () => {
const org = orgFactory();
organizationService.get.calledWith(org.id).mockReturnValue(org);
organizationService.get.calledWith(org.id).mockResolvedValue(org);

const actual = await organizationPermissionsGuard.canActivate(route, state);

Expand All @@ -81,7 +81,7 @@ describe("Organization Permissions Guard", () => {
};

const org = orgFactory();
organizationService.get.calledWith(org.id).mockReturnValue(org);
organizationService.get.calledWith(org.id).mockResolvedValue(org);

const actual = await organizationPermissionsGuard.canActivate(route, state);

Expand All @@ -104,7 +104,7 @@ describe("Organization Permissions Guard", () => {
});

const org = orgFactory();
organizationService.get.calledWith(org.id).mockReturnValue(org);
organizationService.get.calledWith(org.id).mockResolvedValue(org);

const actual = await organizationPermissionsGuard.canActivate(route, state);

Expand All @@ -124,7 +124,7 @@ describe("Organization Permissions Guard", () => {
}),
});
const org = orgFactory();
organizationService.get.calledWith(org.id).mockReturnValue(org);
organizationService.get.calledWith(org.id).mockResolvedValue(org);

const actual = await organizationPermissionsGuard.canActivate(route, state);

Expand All @@ -141,7 +141,7 @@ describe("Organization Permissions Guard", () => {
type: OrganizationUserType.Admin,
enabled: false,
});
organizationService.get.calledWith(org.id).mockReturnValue(org);
organizationService.get.calledWith(org.id).mockResolvedValue(org);

const actual = await organizationPermissionsGuard.canActivate(route, state);

Expand All @@ -153,7 +153,7 @@ describe("Organization Permissions Guard", () => {
type: OrganizationUserType.Owner,
enabled: false,
});
organizationService.get.calledWith(org.id).mockReturnValue(org);
organizationService.get.calledWith(org.id).mockResolvedValue(org);

const actual = await organizationPermissionsGuard.canActivate(route, state);

Expand Down
Expand Up @@ -28,7 +28,7 @@ export class OrganizationPermissionsGuard implements CanActivate {
await this.syncService.fullSync(false);
}

const org = this.organizationService.get(route.params.organizationId);
const org = await this.organizationService.get(route.params.organizationId);
if (org == null) {
return this.router.createUrlTree(["/"]);
}
Expand Down
Expand Up @@ -16,7 +16,7 @@ export class OrganizationRedirectGuard implements CanActivate {
) {}

async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const org = this.organizationService.get(route.params.organizationId);
const org = await this.organizationService.get(route.params.organizationId);

const customRedirect = route.data?.autoRedirectCallback;
if (customRedirect) {
Expand Down
Expand Up @@ -146,7 +146,7 @@ export class MemberDialogComponent implements OnInit, OnDestroy {
this.tabIndex = this.params.initialTab ?? MemberDialogTab.Role;
this.title = this.i18nService.t(this.editMode ? "editMember" : "inviteMember");

const organization$ = of(this.organizationService.get(this.params.organizationId)).pipe(
const organization$ = of(await this.organizationService.get(this.params.organizationId)).pipe(
shareReplay({ refCount: true, bufferSize: 1 }),
);
const groups$ = organization$.pipe(
Expand Down
Expand Up @@ -143,7 +143,7 @@ export class PeopleComponent

async ngOnInit() {
const organization$ = this.route.params.pipe(
map((params) => this.organizationService.get(params.organizationId)),
concatMap(async (params) => await this.organizationService.get(params.organizationId)),
shareReplay({ refCount: true, bufferSize: 1 }),
);

Expand Down
@@ -1,6 +1,6 @@
import { Component, OnInit } from "@angular/core";
import { ActivatedRoute, NavigationEnd, Router } from "@angular/router";
import { filter, map, Observable, startWith } from "rxjs";
import { filter, map, Observable, startWith, concatMap } from "rxjs";

import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { StateService } from "@bitwarden/common/platform/abstractions/state.service";
Expand Down Expand Up @@ -30,7 +30,7 @@ export class ReportsHomeComponent implements OnInit {
);

this.reports$ = this.route.params.pipe(
map((params) => this.organizationService.get(params.organizationId)),
concatMap(async (params) => await this.organizationService.get(params.organizationId)),
map((org) => this.buildReports(org.isFreeOrg)),
);
}
Expand Down
Expand Up @@ -36,9 +36,9 @@ export class TwoFactorSetupComponent extends BaseTwoFactorSetupComponent {
async ngOnInit() {
this.route.params
.pipe(
tap((params) => {
tap(async (params) => {
this.organizationId = params.organizationId;
this.organization = this.organizationService.get(this.organizationId);
this.organization = await this.organizationService.get(this.organizationId);
}),
concatMap(async () => await super.ngOnInit()),
takeUntil(this.destroy$),
Expand Down
Expand Up @@ -150,7 +150,7 @@ export class OrganizationPlansComponent implements OnInit, OnDestroy {

async ngOnInit() {
if (this.organizationId) {
this.organization = this.organizationService.get(this.organizationId);
this.organization = await this.organizationService.get(this.organizationId);
this.billing = await this.organizationApiService.getBilling(this.organizationId);
this.sub = await this.organizationApiService.getSubscription(this.organizationId);
}
Expand Down
Expand Up @@ -94,7 +94,7 @@ export class OrganizationSubscriptionCloudComponent implements OnInit, OnDestroy
return;
}
this.loading = true;
this.userOrg = this.organizationService.get(this.organizationId);
this.userOrg = await this.organizationService.get(this.organizationId);
if (this.userOrg.canViewSubscription) {
this.sub = await this.organizationApiService.getSubscription(this.organizationId);
this.lineItems = this.sub?.subscription?.items;
Expand Down
Expand Up @@ -110,7 +110,7 @@ export class OrganizationSubscriptionSelfhostComponent implements OnInit, OnDest
return;
}
this.loading = true;
this.userOrg = this.organizationService.get(this.organizationId);
this.userOrg = await this.organizationService.get(this.organizationId);
if (this.userOrg.canViewSubscription) {
const subscriptionResponse = await this.organizationApiService.getSubscription(
this.organizationId,
Expand Down
Expand Up @@ -139,7 +139,7 @@ export class CollectionDialogComponent implements OnInit, OnDestroy {
}

async loadOrg(orgId: string, collectionIds: string[]) {
const organization$ = of(this.organizationService.get(orgId)).pipe(
const organization$ = of(await this.organizationService.get(orgId)).pipe(
shareReplay({ refCount: true, bufferSize: 1 }),
);
const groups$ = organization$.pipe(
Expand Down
4 changes: 2 additions & 2 deletions apps/web/src/app/vault/individual-vault/vault.component.ts
Expand Up @@ -520,7 +520,7 @@ export class VaultComponent implements OnInit, OnDestroy {
this.messagingService.send("premiumRequired");
return;
} else if (cipher.organizationId != null) {
const org = this.organizationService.get(cipher.organizationId);
const org = await this.organizationService.get(cipher.organizationId);
if (org != null && (org.maxStorageGb == null || org.maxStorageGb === 0)) {
this.messagingService.send("upgradeOrganization", {
organizationId: cipher.organizationId,
Expand Down Expand Up @@ -699,7 +699,7 @@ export class VaultComponent implements OnInit, OnDestroy {
}

async deleteCollection(collection: CollectionView): Promise<void> {
const organization = this.organizationService.get(collection.organizationId);
const organization = await this.organizationService.get(collection.organizationId);
if (!collection.canDelete(organization)) {
this.platformUtilsService.showToast(
"error",
Expand Down
Expand Up @@ -16,7 +16,7 @@ export const organizationEnabledGuard: CanActivateFn = async (route: ActivatedRo
await syncService.fullSync(false);
}

const org = orgService.get(route.params.organizationId);
const org = await orgService.get(route.params.organizationId);
if (org == null || !org.canAccessSecretsManager) {
return createUrlTreeFromSnapshot(route, ["/"]);
}
Expand Down
Expand Up @@ -14,7 +14,7 @@ export class NavigationComponent {
protected readonly logo = SecretsManagerLogo;
protected orgFilter = (org: Organization) => org.canAccessSecretsManager;
protected isAdmin$ = this.route.params.pipe(
map((params) => this.organizationService.get(params.organizationId)?.isAdmin),
map(async (params) => (await this.organizationService.get(params.organizationId))?.isAdmin),
);

constructor(
Expand Down
Expand Up @@ -11,6 +11,7 @@ import {
distinctUntilChanged,
take,
share,
concatMap,
} from "rxjs";

import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
Expand Down Expand Up @@ -100,7 +101,7 @@ export class OverviewComponent implements OnInit, OnDestroy {

orgId$
.pipe(
map((orgId) => this.organizationService.get(orgId)),
concatMap(async (orgId) => await this.organizationService.get(orgId)),
takeUntil(this.destroy$),
)
.subscribe((org) => {
Expand Down
Expand Up @@ -63,7 +63,9 @@ export class ProjectSecretsComponent {
switchMap(async ([_, params]) => {
this.organizationId = params.organizationId;
this.projectId = params.projectId;
this.organizationEnabled = this.organizationService.get(params.organizationId)?.enabled;
this.organizationEnabled = (
await this.organizationService.get(params.organizationId)
)?.enabled;
return await this.getSecretsByProject();
}),
);
Expand Down
Expand Up @@ -13,6 +13,7 @@ import {
} from "rxjs";

import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { DialogService } from "@bitwarden/components";
Expand All @@ -34,6 +35,7 @@ export class ProjectComponent implements OnInit, OnDestroy {

private organizationId: string;
private projectId: string;
private organizations: Organization[];
private organizationEnabled: boolean;
private destroy$ = new Subject<void>();

Expand Down Expand Up @@ -70,10 +72,14 @@ export class ProjectComponent implements OnInit, OnDestroy {
}),
);

this.organizationService.organizations$.pipe(takeUntil(this.destroy$)).subscribe((orgs) => {
this.organizations = orgs;
});

this.route.params.pipe(takeUntil(this.destroy$)).subscribe((params) => {
this.organizationId = params.organizationId;
this.projectId = params.projectId;
this.organizationEnabled = this.organizationService.get(params.organizationId)?.enabled;
this.organizationEnabled = this.organizations[params.organizationId]?.enabled;
});
}

Expand Down
Expand Up @@ -51,7 +51,9 @@ export class ProjectsComponent implements OnInit {
]).pipe(
switchMap(async ([params]) => {
this.organizationId = params.organizationId;
this.organizationEnabled = this.organizationService.get(params.organizationId)?.enabled;
this.organizationEnabled = (
await this.organizationService.get(params.organizationId)
)?.enabled;

return await this.getProjects();
}),
Expand Down
Expand Up @@ -87,7 +87,7 @@ export class SecretDialogComponent implements OnInit {
this.formGroup.get("project").setValue(this.data.projectId);
}

if (this.organizationService.get(this.data.organizationId)?.isAdmin) {
if ((await this.organizationService.get(this.data.organizationId))?.isAdmin) {
this.formGroup.get("project").removeValidators(Validators.required);
this.formGroup.get("project").updateValueAndValidity();
}
Expand Down
Expand Up @@ -47,7 +47,9 @@ export class SecretsComponent implements OnInit {
combineLatestWith(this.route.params),
switchMap(async ([_, params]) => {
this.organizationId = params.organizationId;
this.organizationEnabled = this.organizationService.get(params.organizationId)?.enabled;
this.organizationEnabled = (
await this.organizationService.get(params.organizationId)
)?.enabled;

return await this.getSecrets();
}),
Expand Down
Expand Up @@ -46,7 +46,9 @@ export class ServiceAccountsComponent implements OnInit {
]).pipe(
switchMap(async ([params]) => {
this.organizationId = params.organizationId;
this.organizationEnabled = this.organizationService.get(params.organizationId)?.enabled;
this.organizationEnabled = (
await this.organizationService.get(params.organizationId)
)?.enabled;

return await this.getServiceAccounts();
}),
Expand Down

0 comments on commit d7d26e8

Please sign in to comment.