1
0
mirror of https://github.com/bitwarden/browser synced 2026-02-18 18:33:50 +00:00

[EC-86] Add GroupApiService

Add a new GroupApiService to replace Group Api calls in the ApiService.
This commit is contained in:
Shane Melton
2022-10-11 11:55:38 -07:00
parent fb8214e6a3
commit 3e3583269e
11 changed files with 112 additions and 79 deletions

View File

@@ -1,5 +1,3 @@
import { OrganizationGroupBulkRequest } from "@bitwarden/common/models/request/OrganizationGroupBulkRequest";
import { OrganizationConnectionType } from "../enums/organizationConnectionType";
import { SetKeyConnectorKeyRequest } from "../models/request/account/setKeyConnectorKeyRequest";
import { AttachmentRequest } from "../models/request/attachmentRequest";
@@ -106,7 +104,6 @@ import {
EmergencyAccessViewResponse,
} from "../models/response/emergencyAccessResponse";
import { EventResponse } from "../models/response/eventResponse";
import { GroupDetailsResponse, GroupResponse } from "../models/response/groupResponse";
import { IdentityCaptchaResponse } from "../models/response/identityCaptchaResponse";
import { IdentityTokenResponse } from "../models/response/identityTokenResponse";
import { IdentityTwoFactorResponse } from "../models/response/identityTwoFactorResponse";
@@ -164,6 +161,8 @@ import { TwoFactorYubiKeyResponse } from "../models/response/twoFactorYubiKeyRes
import { UserKeyResponse } from "../models/response/userKeyResponse";
import { SendAccessView } from "../models/view/sendAccessView";
import { GroupResponse } from "./group/responses/groupResponse";
export abstract class ApiService {
send: (
method: "GET" | "POST" | "PUT" | "DELETE",
@@ -341,17 +340,10 @@ export abstract class ApiService {
organizationUserId: string
) => Promise<any>;
getGroupDetails: (organizationId: string, id: string) => Promise<GroupDetailsResponse>;
getGroups: (organizationId: string) => Promise<ListResponse<GroupDetailsResponse>>;
getGroupUsers: (organizationId: string, id: string) => Promise<string[]>;
postGroup: (organizationId: string, request: GroupRequest) => Promise<GroupResponse>;
putGroup: (organizationId: string, id: string, request: GroupRequest) => Promise<GroupResponse>;
putGroupUsers: (organizationId: string, id: string, request: string[]) => Promise<any>;
deleteGroup: (organizationId: string, id: string) => Promise<any>;
deleteManyGroups: (
organizationId: string,
request: OrganizationGroupBulkRequest
) => Promise<ListResponse<GroupResponse>>;
deleteGroupUser: (organizationId: string, id: string, organizationUserId: string) => Promise<any>;
getOrganizationUser: (

View File

@@ -0,0 +1,13 @@
import {
GroupDetailsResponse,
GroupResponse,
} from "@bitwarden/common/abstractions/group/responses/groupResponse";
import { ListResponse } from "@bitwarden/common/models/response/listResponse";
export class GroupApiServiceAbstraction {
delete: (orgId: string, groupId: string) => Promise<void>;
deleteMany: (orgId: string, groupIds: string[]) => Promise<ListResponse<GroupResponse>>;
get: (orgId: string, groupId: string) => Promise<GroupDetailsResponse>;
getAll: (orgId: string) => Promise<ListResponse<GroupDetailsResponse>>;
}

View File

@@ -0,0 +1,2 @@
export * from "./group-api.service.abstraction";
export * from "./responses/groupResponse";

View File

@@ -1,5 +1,5 @@
import { BaseResponse } from "./baseResponse";
import { SelectionReadOnlyResponse } from "./selectionReadOnlyResponse";
import { BaseResponse } from "../../../models/response/baseResponse";
import { SelectionReadOnlyResponse } from "../../../models/response/selectionReadOnlyResponse";
export class GroupResponse extends BaseResponse {
id: string;

View File

@@ -1,8 +1,7 @@
import { OrganizationGroupBulkRequest } from "@bitwarden/common/models/request/OrganizationGroupBulkRequest";
import { ApiService as ApiServiceAbstraction } from "../abstractions/api.service";
import { AppIdService } from "../abstractions/appId.service";
import { EnvironmentService } from "../abstractions/environment.service";
import { GroupResponse } from "../abstractions/group";
import { PlatformUtilsService } from "../abstractions/platformUtils.service";
import { TokenService } from "../abstractions/token.service";
import { DeviceType } from "../enums/deviceType";
@@ -115,7 +114,6 @@ import {
} from "../models/response/emergencyAccessResponse";
import { ErrorResponse } from "../models/response/errorResponse";
import { EventResponse } from "../models/response/eventResponse";
import { GroupDetailsResponse, GroupResponse } from "../models/response/groupResponse";
import { IdentityCaptchaResponse } from "../models/response/identityCaptchaResponse";
import { IdentityTokenResponse } from "../models/response/identityTokenResponse";
import { IdentityTwoFactorResponse } from "../models/response/identityTwoFactorResponse";
@@ -922,28 +920,6 @@ export class ApiService implements ApiServiceAbstraction {
// Groups APIs
async getGroupDetails(organizationId: string, id: string): Promise<GroupDetailsResponse> {
const r = await this.send(
"GET",
"/organizations/" + organizationId + "/groups/" + id + "/details",
null,
true,
true
);
return new GroupDetailsResponse(r);
}
async getGroups(organizationId: string): Promise<ListResponse<GroupDetailsResponse>> {
const r = await this.send(
"GET",
"/organizations/" + organizationId + "/groups",
null,
true,
true
);
return new ListResponse(r, GroupDetailsResponse);
}
async getGroupUsers(organizationId: string, id: string): Promise<string[]> {
const r = await this.send(
"GET",
@@ -991,30 +967,6 @@ export class ApiService implements ApiServiceAbstraction {
);
}
deleteGroup(organizationId: string, id: string): Promise<any> {
return this.send(
"DELETE",
"/organizations/" + organizationId + "/groups/" + id,
null,
true,
false
);
}
async deleteManyGroups(
organizationId: string,
request: OrganizationGroupBulkRequest
): Promise<ListResponse<GroupResponse>> {
const r = await this.send(
"DELETE",
"/organizations/" + organizationId + "/groups",
request,
true,
true
);
return new ListResponse(r, GroupResponse);
}
deleteGroupUser(organizationId: string, id: string, organizationUserId: string): Promise<any> {
return this.send(
"DELETE",

View File

@@ -0,0 +1,60 @@
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import {
GroupApiServiceAbstraction,
GroupDetailsResponse,
GroupResponse,
} from "@bitwarden/common/abstractions/group";
import { OrganizationGroupBulkRequest } from "@bitwarden/common/models/request/OrganizationGroupBulkRequest";
import { ListResponse } from "@bitwarden/common/models/response/listResponse";
export class GroupApiService implements GroupApiServiceAbstraction {
constructor(private apiService: ApiService) {}
async delete(orgId: string, groupId: string): Promise<void> {
await this.apiService.send(
"DELETE",
"/organizations/" + orgId + "/groups/" + groupId,
null,
true,
false
);
}
async deleteMany(orgId: string, groupIds: string[]): Promise<ListResponse<GroupResponse>> {
const request = new OrganizationGroupBulkRequest(groupIds);
const r = await this.apiService.send(
"DELETE",
"/organizations/" + orgId + "/groups",
request,
true,
true
);
return new ListResponse(r, GroupResponse);
}
async get(orgId: string, groupId: string): Promise<GroupDetailsResponse> {
const r = await this.apiService.send(
"GET",
"/organizations/" + orgId + "/groups/" + groupId + "/details",
null,
true,
true
);
return new GroupDetailsResponse(r);
}
async getAll(orgId: string): Promise<ListResponse<GroupDetailsResponse>> {
const r = await this.apiService.send(
"GET",
"/organizations/" + orgId + "/groups",
null,
true,
true
);
return new ListResponse(r, GroupDetailsResponse);
}
}