1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-15 15:53:27 +00:00

Added create-client-organization.component (#8767)

This commit is contained in:
Alex Morask
2024-04-18 08:36:38 -04:00
committed by GitHub
parent cbaf3462c1
commit 1e0ad09757
17 changed files with 409 additions and 26 deletions

View File

@@ -1,6 +1,9 @@
import { SubscriptionCancellationRequest } from "../../billing/models/request/subscription-cancellation.request";
import { OrganizationBillingStatusResponse } from "../../billing/models/response/organization-billing-status.response";
import { ProviderSubscriptionUpdateRequest } from "../models/request/provider-subscription-update.request";
import { PlanResponse } from "../../billing/models/response/plan.response";
import { ListResponse } from "../../models/response/list.response";
import { CreateClientOrganizationRequest } from "../models/request/create-client-organization.request";
import { UpdateClientOrganizationRequest } from "../models/request/update-client-organization.request";
import { ProviderSubscriptionResponse } from "../models/response/provider-subscription-response";
export abstract class BillingApiServiceAbstraction {
@@ -9,11 +12,16 @@ export abstract class BillingApiServiceAbstraction {
request: SubscriptionCancellationRequest,
) => Promise<void>;
cancelPremiumUserSubscription: (request: SubscriptionCancellationRequest) => Promise<void>;
createClientOrganization: (
providerId: string,
request: CreateClientOrganizationRequest,
) => Promise<void>;
getBillingStatus: (id: string) => Promise<OrganizationBillingStatusResponse>;
getProviderClientSubscriptions: (providerId: string) => Promise<ProviderSubscriptionResponse>;
putProviderClientSubscriptions: (
getPlans: () => Promise<ListResponse<PlanResponse>>;
getProviderSubscription: (providerId: string) => Promise<ProviderSubscriptionResponse>;
updateClientOrganization: (
providerId: string,
organizationId: string,
request: ProviderSubscriptionUpdateRequest,
request: UpdateClientOrganizationRequest,
) => Promise<any>;
}

View File

@@ -0,0 +1,12 @@
import { OrganizationKeysRequest } from "../../../admin-console/models/request/organization-keys.request";
import { PlanType } from "../../../billing/enums";
export class CreateClientOrganizationRequest {
name: string;
ownerEmail: string;
planType: PlanType;
seats: number;
key: string;
keyPair: OrganizationKeysRequest;
collectionName: string;
}

View File

@@ -1,3 +0,0 @@
export class ProviderSubscriptionUpdateRequest {
assignedSeats: number;
}

View File

@@ -0,0 +1,3 @@
export class UpdateClientOrganizationRequest {
assignedSeats: number;
}

View File

@@ -2,7 +2,10 @@ import { ApiService } from "../../abstractions/api.service";
import { BillingApiServiceAbstraction } from "../../billing/abstractions/billilng-api.service.abstraction";
import { SubscriptionCancellationRequest } from "../../billing/models/request/subscription-cancellation.request";
import { OrganizationBillingStatusResponse } from "../../billing/models/response/organization-billing-status.response";
import { ProviderSubscriptionUpdateRequest } from "../models/request/provider-subscription-update.request";
import { PlanResponse } from "../../billing/models/response/plan.response";
import { ListResponse } from "../../models/response/list.response";
import { CreateClientOrganizationRequest } from "../models/request/create-client-organization.request";
import { UpdateClientOrganizationRequest } from "../models/request/update-client-organization.request";
import { ProviderSubscriptionResponse } from "../models/response/provider-subscription-response";
export class BillingApiService implements BillingApiServiceAbstraction {
@@ -25,6 +28,19 @@ export class BillingApiService implements BillingApiServiceAbstraction {
return this.apiService.send("POST", "/accounts/cancel", request, true, false);
}
createClientOrganization(
providerId: string,
request: CreateClientOrganizationRequest,
): Promise<void> {
return this.apiService.send(
"POST",
"/providers/" + providerId + "/clients",
request,
true,
false,
);
}
async getBillingStatus(id: string): Promise<OrganizationBillingStatusResponse> {
const r = await this.apiService.send(
"GET",
@@ -37,7 +53,12 @@ export class BillingApiService implements BillingApiServiceAbstraction {
return new OrganizationBillingStatusResponse(r);
}
async getProviderClientSubscriptions(providerId: string): Promise<ProviderSubscriptionResponse> {
async getPlans(): Promise<ListResponse<PlanResponse>> {
const r = await this.apiService.send("GET", "/plans", null, false, true);
return new ListResponse(r, PlanResponse);
}
async getProviderSubscription(providerId: string): Promise<ProviderSubscriptionResponse> {
const r = await this.apiService.send(
"GET",
"/providers/" + providerId + "/billing/subscription",
@@ -48,14 +69,14 @@ export class BillingApiService implements BillingApiServiceAbstraction {
return new ProviderSubscriptionResponse(r);
}
async putProviderClientSubscriptions(
async updateClientOrganization(
providerId: string,
organizationId: string,
request: ProviderSubscriptionUpdateRequest,
request: UpdateClientOrganizationRequest,
): Promise<any> {
return await this.apiService.send(
"PUT",
"/providers/" + providerId + "/organizations/" + organizationId,
"/providers/" + providerId + "/clients/" + organizationId,
request,
true,
false,

View File

@@ -1,3 +1,4 @@
import { ApiService } from "../../abstractions/api.service";
import { OrganizationApiServiceAbstraction as OrganizationApiService } from "../../admin-console/abstractions/organization/organization-api.service.abstraction";
import { OrganizationCreateRequest } from "../../admin-console/models/request/organization-create.request";
import { OrganizationKeysRequest } from "../../admin-console/models/request/organization-keys.request";
@@ -7,6 +8,7 @@ import { EncryptService } from "../../platform/abstractions/encrypt.service";
import { I18nService } from "../../platform/abstractions/i18n.service";
import { EncString } from "../../platform/models/domain/enc-string";
import { OrgKey } from "../../types/key";
import { SyncService } from "../../vault/abstractions/sync/sync.service.abstraction";
import {
OrganizationBillingServiceAbstraction,
OrganizationInformation,
@@ -25,10 +27,12 @@ interface OrganizationKeys {
export class OrganizationBillingService implements OrganizationBillingServiceAbstraction {
constructor(
private apiService: ApiService,
private cryptoService: CryptoService,
private encryptService: EncryptService,
private i18nService: I18nService,
private organizationApiService: OrganizationApiService,
private syncService: SyncService,
) {}
async purchaseSubscription(subscription: SubscriptionInformation): Promise<OrganizationResponse> {
@@ -44,7 +48,13 @@ export class OrganizationBillingService implements OrganizationBillingServiceAbs
this.setPaymentInformation(request, subscription.payment);
return await this.organizationApiService.create(request);
const response = await this.organizationApiService.create(request);
await this.apiService.refreshIdentityToken();
await this.syncService.fullSync(true);
return response;
}
async startFree(subscription: SubscriptionInformation): Promise<OrganizationResponse> {
@@ -58,7 +68,13 @@ export class OrganizationBillingService implements OrganizationBillingServiceAbs
this.setPlanInformation(request, subscription.plan);
return await this.organizationApiService.create(request);
const response = await this.organizationApiService.create(request);
await this.apiService.refreshIdentityToken();
await this.syncService.fullSync(true);
return response;
}
private async makeOrganizationKeys(): Promise<OrganizationKeys> {