1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-12 14:23:32 +00:00

[PM-11450] Move organization-user domain to admin-console lib (#10785)

- move organization-user files from libs/common/src/admin-console into libs/admin-console/src/common
- add barrel files and update imports to use barrel files
- rename OrganizationUserService to OrganizationUserApiService
- rename OrganizationUserServiceImplementation to DefaultOrganizationUserApiService
This commit is contained in:
Thomas Rittson
2024-09-05 08:21:26 +10:00
committed by GitHub
parent 2f69228c21
commit 8344623185
83 changed files with 297 additions and 239 deletions

View File

@@ -12,7 +12,7 @@
"baseUrl": ".", "baseUrl": ".",
"lib": ["ES2021.String"], "lib": ["ES2021.String"],
"paths": { "paths": {
"@bitwarden/admin-console": ["../../libs/admin-console/src"], "@bitwarden/admin-console/common": ["../../libs/admin-console/src/common"],
"@bitwarden/angular/*": ["../../libs/angular/src/*"], "@bitwarden/angular/*": ["../../libs/angular/src/*"],
"@bitwarden/auth/common": ["../../libs/auth/src/common"], "@bitwarden/auth/common": ["../../libs/auth/src/common"],
"@bitwarden/auth/angular": ["../../libs/auth/src/angular"], "@bitwarden/auth/angular": ["../../libs/auth/src/angular"],

View File

@@ -1,6 +1,8 @@
import {
OrganizationUserApiService,
OrganizationUserConfirmRequest,
} from "@bitwarden/admin-console/common";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { OrganizationUserConfirmRequest } from "@bitwarden/common/admin-console/abstractions/organization-user/requests";
import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service";
import { Utils } from "@bitwarden/common/platform/misc/utils"; import { Utils } from "@bitwarden/common/platform/misc/utils";
@@ -10,7 +12,7 @@ export class ConfirmCommand {
constructor( constructor(
private apiService: ApiService, private apiService: ApiService,
private cryptoService: CryptoService, private cryptoService: CryptoService,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
) {} ) {}
async run(object: string, id: string, cmdOptions: Record<string, any>): Promise<Response> { async run(object: string, id: string, cmdOptions: Record<string, any>): Promise<Response> {
@@ -42,7 +44,7 @@ export class ConfirmCommand {
if (orgKey == null) { if (orgKey == null) {
throw new Error("No encryption key for this organization."); throw new Error("No encryption key for this organization.");
} }
const orgUser = await this.organizationUserService.getOrganizationUser( const orgUser = await this.organizationUserApiService.getOrganizationUser(
options.organizationId, options.organizationId,
id, id,
); );
@@ -54,7 +56,7 @@ export class ConfirmCommand {
const key = await this.cryptoService.rsaEncrypt(orgKey.key, publicKey); const key = await this.cryptoService.rsaEncrypt(orgKey.key, publicKey);
const req = new OrganizationUserConfirmRequest(); const req = new OrganizationUserConfirmRequest();
req.key = key.encryptedString; req.key = key.encryptedString;
await this.organizationUserService.postOrganizationUserConfirm( await this.organizationUserApiService.postOrganizationUserConfirm(
options.organizationId, options.organizationId,
id, id,
req, req,

View File

@@ -1,10 +1,10 @@
import { firstValueFrom } from "rxjs"; import { firstValueFrom } from "rxjs";
import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
import { SearchService } from "@bitwarden/common/abstractions/search.service"; import { SearchService } from "@bitwarden/common/abstractions/search.service";
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { EventType } from "@bitwarden/common/enums"; import { EventType } from "@bitwarden/common/enums";
import { ListResponse as ApiListResponse } from "@bitwarden/common/models/response/list.response"; import { ListResponse as ApiListResponse } from "@bitwarden/common/models/response/list.response";
import { Utils } from "@bitwarden/common/platform/misc/utils"; import { Utils } from "@bitwarden/common/platform/misc/utils";
@@ -35,7 +35,7 @@ export class ListCommand {
private collectionService: CollectionService, private collectionService: CollectionService,
private organizationService: OrganizationService, private organizationService: OrganizationService,
private searchService: SearchService, private searchService: SearchService,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
private apiService: ApiService, private apiService: ApiService,
private eventCollectionService: EventCollectionService, private eventCollectionService: EventCollectionService,
) {} ) {}
@@ -211,7 +211,7 @@ export class ListCommand {
} }
try { try {
const response = await this.organizationUserService.getAllUsers(options.organizationId); const response = await this.organizationUserApiService.getAllUsers(options.organizationId);
const res = new ListResponse( const res = new ListResponse(
response.data.map((r) => { response.data.map((r) => {
const u = new OrganizationUserResponse(); const u = new OrganizationUserResponse();

View File

@@ -71,7 +71,7 @@ export class OssServeConfigurator {
this.serviceContainer.collectionService, this.serviceContainer.collectionService,
this.serviceContainer.organizationService, this.serviceContainer.organizationService,
this.serviceContainer.searchService, this.serviceContainer.searchService,
this.serviceContainer.organizationUserService, this.serviceContainer.organizationUserApiService,
this.serviceContainer.apiService, this.serviceContainer.apiService,
this.serviceContainer.eventCollectionService, this.serviceContainer.eventCollectionService,
); );
@@ -114,7 +114,7 @@ export class OssServeConfigurator {
this.confirmCommand = new ConfirmCommand( this.confirmCommand = new ConfirmCommand(
this.serviceContainer.apiService, this.serviceContainer.apiService,
this.serviceContainer.cryptoService, this.serviceContainer.cryptoService,
this.serviceContainer.organizationUserService, this.serviceContainer.organizationUserApiService,
); );
this.restoreCommand = new RestoreCommand(this.serviceContainer.cipherService); this.restoreCommand = new RestoreCommand(this.serviceContainer.cipherService);
this.shareCommand = new ShareCommand( this.shareCommand = new ShareCommand(

View File

@@ -4,6 +4,10 @@ import * as path from "path";
import * as jsdom from "jsdom"; import * as jsdom from "jsdom";
import { firstValueFrom } from "rxjs"; import { firstValueFrom } from "rxjs";
import {
OrganizationUserApiService,
DefaultOrganizationUserApiService,
} from "@bitwarden/admin-console/common";
import { import {
InternalUserDecryptionOptionsServiceAbstraction, InternalUserDecryptionOptionsServiceAbstraction,
AuthRequestService, AuthRequestService,
@@ -16,12 +20,10 @@ import {
import { EventCollectionService as EventCollectionServiceAbstraction } from "@bitwarden/common/abstractions/event/event-collection.service"; import { EventCollectionService as EventCollectionServiceAbstraction } from "@bitwarden/common/abstractions/event/event-collection.service";
import { EventUploadService as EventUploadServiceAbstraction } from "@bitwarden/common/abstractions/event/event-upload.service"; import { EventUploadService as EventUploadServiceAbstraction } from "@bitwarden/common/abstractions/event/event-upload.service";
import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction";
import { ProviderApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/provider/provider-api.service.abstraction"; import { ProviderApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/provider/provider-api.service.abstraction";
import { OrganizationApiService } from "@bitwarden/common/admin-console/services/organization/organization-api.service"; import { OrganizationApiService } from "@bitwarden/common/admin-console/services/organization/organization-api.service";
import { OrganizationService } from "@bitwarden/common/admin-console/services/organization/organization.service"; import { OrganizationService } from "@bitwarden/common/admin-console/services/organization/organization.service";
import { OrganizationUserServiceImplementation } from "@bitwarden/common/admin-console/services/organization-user/organization-user.service.implementation";
import { PolicyApiService } from "@bitwarden/common/admin-console/services/policy/policy-api.service"; import { PolicyApiService } from "@bitwarden/common/admin-console/services/policy/policy-api.service";
import { PolicyService } from "@bitwarden/common/admin-console/services/policy/policy.service"; import { PolicyService } from "@bitwarden/common/admin-console/services/policy/policy.service";
import { ProviderApiService } from "@bitwarden/common/admin-console/services/provider/provider-api.service"; import { ProviderApiService } from "@bitwarden/common/admin-console/services/provider/provider-api.service";
@@ -184,7 +186,7 @@ export class ServiceContainer {
environmentService: EnvironmentService; environmentService: EnvironmentService;
cipherService: CipherService; cipherService: CipherService;
folderService: InternalFolderService; folderService: InternalFolderService;
organizationUserService: OrganizationUserService; organizationUserApiService: OrganizationUserApiService;
collectionService: CollectionService; collectionService: CollectionService;
vaultTimeoutService: VaultTimeoutService; vaultTimeoutService: VaultTimeoutService;
masterPasswordService: InternalMasterPasswordServiceAbstraction; masterPasswordService: InternalMasterPasswordServiceAbstraction;
@@ -492,7 +494,7 @@ export class ServiceContainer {
this.providerService = new ProviderService(this.stateProvider); this.providerService = new ProviderService(this.stateProvider);
this.organizationUserService = new OrganizationUserServiceImplementation(this.apiService); this.organizationUserApiService = new DefaultOrganizationUserApiService(this.apiService);
this.policyApiService = new PolicyApiService(this.policyService, this.apiService); this.policyApiService = new PolicyApiService(this.policyService, this.apiService);

View File

@@ -108,7 +108,7 @@ export class VaultProgram extends BaseProgram {
this.serviceContainer.collectionService, this.serviceContainer.collectionService,
this.serviceContainer.organizationService, this.serviceContainer.organizationService,
this.serviceContainer.searchService, this.serviceContainer.searchService,
this.serviceContainer.organizationUserService, this.serviceContainer.organizationUserApiService,
this.serviceContainer.apiService, this.serviceContainer.apiService,
this.serviceContainer.eventCollectionService, this.serviceContainer.eventCollectionService,
); );
@@ -412,7 +412,7 @@ export class VaultProgram extends BaseProgram {
const command = new ConfirmCommand( const command = new ConfirmCommand(
this.serviceContainer.apiService, this.serviceContainer.apiService,
this.serviceContainer.cryptoService, this.serviceContainer.cryptoService,
this.serviceContainer.organizationUserService, this.serviceContainer.organizationUserApiService,
); );
const response = await command.run(object, id, cmd); const response = await command.run(object, id, cmd);
this.processResponse(response); this.processResponse(response);

View File

@@ -13,6 +13,7 @@
"baseUrl": ".", "baseUrl": ".",
"paths": { "paths": {
"@bitwarden/common/spec": ["../../libs/common/spec"], "@bitwarden/common/spec": ["../../libs/common/spec"],
"@bitwarden/admin-console/common": ["../../libs/admin-console/src/common"],
"@bitwarden/auth/common": ["../../libs/auth/src/common"], "@bitwarden/auth/common": ["../../libs/auth/src/common"],
"@bitwarden/auth/angular": ["../../libs/auth/src/angular"], "@bitwarden/auth/angular": ["../../libs/auth/src/angular"],
"@bitwarden/common/*": ["../../libs/common/src/*"], "@bitwarden/common/*": ["../../libs/common/src/*"],

View File

@@ -1,6 +1,7 @@
import { APP_INITIALIZER, NgModule } from "@angular/core"; import { APP_INITIALIZER, NgModule } from "@angular/core";
import { Subject, merge } from "rxjs"; import { Subject, merge } from "rxjs";
import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
import { SafeProvider, safeProvider } from "@bitwarden/angular/platform/utils/safe-provider"; import { SafeProvider, safeProvider } from "@bitwarden/angular/platform/utils/safe-provider";
import { import {
SECURE_STORAGE, SECURE_STORAGE,
@@ -26,7 +27,6 @@ import {
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service";
import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { PolicyService as PolicyServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyService as PolicyServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
import { AccountService as AccountServiceAbstraction } from "@bitwarden/common/auth/abstractions/account.service"; import { AccountService as AccountServiceAbstraction } from "@bitwarden/common/auth/abstractions/account.service";
import { AuthService as AuthServiceAbstraction } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthService as AuthServiceAbstraction } from "@bitwarden/common/auth/abstractions/auth.service";
@@ -285,7 +285,7 @@ const safeProviders: SafeProvider[] = [
KdfConfigService, KdfConfigService,
InternalMasterPasswordServiceAbstraction, InternalMasterPasswordServiceAbstraction,
OrganizationApiServiceAbstraction, OrganizationApiServiceAbstraction,
OrganizationUserService, OrganizationUserApiService,
InternalUserDecryptionOptionsServiceAbstraction, InternalUserDecryptionOptionsServiceAbstraction,
], ],
}), }),

View File

@@ -1,11 +1,11 @@
import { Component, NgZone, OnDestroy, OnInit } from "@angular/core"; import { Component, NgZone, OnDestroy, OnInit } from "@angular/core";
import { ActivatedRoute, Router } from "@angular/router"; import { ActivatedRoute, Router } from "@angular/router";
import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
import { SetPasswordComponent as BaseSetPasswordComponent } from "@bitwarden/angular/auth/components/set-password.component"; import { SetPasswordComponent as BaseSetPasswordComponent } from "@bitwarden/angular/auth/components/set-password.component";
import { InternalUserDecryptionOptionsServiceAbstraction } from "@bitwarden/auth/common"; import { InternalUserDecryptionOptionsServiceAbstraction } from "@bitwarden/auth/common";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction";
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
@@ -50,7 +50,7 @@ export class SetPasswordComponent extends BaseSetPasswordComponent implements On
private ngZone: NgZone, private ngZone: NgZone,
stateService: StateService, stateService: StateService,
organizationApiService: OrganizationApiServiceAbstraction, organizationApiService: OrganizationApiServiceAbstraction,
organizationUserService: OrganizationUserService, organizationUserApiService: OrganizationUserApiService,
userDecryptionOptionsService: InternalUserDecryptionOptionsServiceAbstraction, userDecryptionOptionsService: InternalUserDecryptionOptionsServiceAbstraction,
ssoLoginService: SsoLoginServiceAbstraction, ssoLoginService: SsoLoginServiceAbstraction,
dialogService: DialogService, dialogService: DialogService,
@@ -74,7 +74,7 @@ export class SetPasswordComponent extends BaseSetPasswordComponent implements On
route, route,
stateService, stateService,
organizationApiService, organizationApiService,
organizationUserService, organizationUserApiService,
userDecryptionOptionsService, userDecryptionOptionsService,
ssoLoginService, ssoLoginService,
dialogService, dialogService,

View File

@@ -10,7 +10,7 @@
"types": [], "types": [],
"baseUrl": ".", "baseUrl": ".",
"paths": { "paths": {
"@bitwarden/admin-console": ["../../libs/admin-console/src"], "@bitwarden/admin-console/common": ["../../libs/admin-console/src/common"],
"@bitwarden/angular/*": ["../../libs/angular/src/*"], "@bitwarden/angular/*": ["../../libs/angular/src/*"],
"@bitwarden/auth/common": ["../../libs/auth/src/common"], "@bitwarden/auth/common": ["../../libs/auth/src/common"],
"@bitwarden/auth/angular": ["../../libs/auth/src/angular"], "@bitwarden/auth/angular": ["../../libs/auth/src/angular"],

View File

@@ -1,11 +1,11 @@
import { Injectable } from "@angular/core"; import { Injectable } from "@angular/core";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { import {
OrganizationUserApiService,
OrganizationUserInviteRequest, OrganizationUserInviteRequest,
OrganizationUserUpdateRequest, OrganizationUserUpdateRequest,
} from "@bitwarden/common/admin-console/abstractions/organization-user/requests"; OrganizationUserDetailsResponse,
import { OrganizationUserDetailsResponse } from "@bitwarden/common/admin-console/abstractions/organization-user/responses"; } from "@bitwarden/admin-console/common";
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
import { CoreOrganizationModule } from "../core-organization.module"; import { CoreOrganizationModule } from "../core-organization.module";
@@ -15,14 +15,14 @@ import { OrganizationUserAdminView } from "../views/organization-user-admin-view
export class UserAdminService { export class UserAdminService {
constructor( constructor(
private configService: ConfigService, private configService: ConfigService,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
) {} ) {}
async get( async get(
organizationId: string, organizationId: string,
organizationUserId: string, organizationUserId: string,
): Promise<OrganizationUserAdminView | undefined> { ): Promise<OrganizationUserAdminView | undefined> {
const userResponse = await this.organizationUserService.getOrganizationUser( const userResponse = await this.organizationUserApiService.getOrganizationUser(
organizationId, organizationId,
organizationUserId, organizationUserId,
{ {
@@ -47,7 +47,11 @@ export class UserAdminService {
request.groups = user.groups; request.groups = user.groups;
request.accessSecretsManager = user.accessSecretsManager; request.accessSecretsManager = user.accessSecretsManager;
await this.organizationUserService.putOrganizationUser(user.organizationId, user.id, request); await this.organizationUserApiService.putOrganizationUser(
user.organizationId,
user.id,
request,
);
} }
async invite(emails: string[], user: OrganizationUserAdminView): Promise<void> { async invite(emails: string[], user: OrganizationUserAdminView): Promise<void> {
@@ -59,7 +63,7 @@ export class UserAdminService {
request.groups = user.groups; request.groups = user.groups;
request.accessSecretsManager = user.accessSecretsManager; request.accessSecretsManager = user.accessSecretsManager;
await this.organizationUserService.postOrganizationUserInvite(user.organizationId, request); await this.organizationUserApiService.postOrganizationUserInvite(user.organizationId, request);
} }
private async decryptMany( private async decryptMany(

View File

@@ -1,4 +1,4 @@
import { OrganizationUserUserDetailsResponse } from "@bitwarden/common/admin-console/abstractions/organization-user/responses"; import { OrganizationUserUserDetailsResponse } from "@bitwarden/admin-console/common";
import { import {
OrganizationUserStatusType, OrganizationUserStatusType,
OrganizationUserType, OrganizationUserType,

View File

@@ -2,9 +2,9 @@ import { DIALOG_DATA, DialogConfig } from "@angular/cdk/dialog";
import { Component, Inject, OnInit } from "@angular/core"; import { Component, Inject, OnInit } from "@angular/core";
import { FormBuilder } from "@angular/forms"; import { FormBuilder } from "@angular/forms";
import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
import { UserNamePipe } from "@bitwarden/angular/pipes/user-name.pipe"; import { UserNamePipe } from "@bitwarden/angular/pipes/user-name.pipe";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { EventResponse } from "@bitwarden/common/models/response/event.response"; import { EventResponse } from "@bitwarden/common/models/response/event.response";
import { ListResponse } from "@bitwarden/common/models/response/list.response"; import { ListResponse } from "@bitwarden/common/models/response/list.response";
import { EventView } from "@bitwarden/common/models/view/event.view"; import { EventView } from "@bitwarden/common/models/view/event.view";
@@ -60,7 +60,7 @@ export class EntityEventsComponent implements OnInit {
private platformUtilsService: PlatformUtilsService, private platformUtilsService: PlatformUtilsService,
private userNamePipe: UserNamePipe, private userNamePipe: UserNamePipe,
private logService: LogService, private logService: LogService,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
private formBuilder: FormBuilder, private formBuilder: FormBuilder,
private validationService: ValidationService, private validationService: ValidationService,
private toastService: ToastService, private toastService: ToastService,
@@ -78,7 +78,9 @@ export class EntityEventsComponent implements OnInit {
async load() { async load() {
try { try {
if (this.showUser) { if (this.showUser) {
const response = await this.organizationUserService.getAllUsers(this.params.organizationId); const response = await this.organizationUserApiService.getAllUsers(
this.params.organizationId,
);
response.data.forEach((u) => { response.data.forEach((u) => {
const name = this.userNamePipe.transform(u); const name = this.userNamePipe.transform(u);
this.orgUsersIdMap.set(u.id, { name: name, email: u.email }); this.orgUsersIdMap.set(u.id, { name: name, email: u.email });

View File

@@ -2,10 +2,10 @@ import { Component, OnDestroy, OnInit } from "@angular/core";
import { ActivatedRoute, Router } from "@angular/router"; import { ActivatedRoute, Router } from "@angular/router";
import { concatMap, Subject, takeUntil } from "rxjs"; import { concatMap, Subject, takeUntil } from "rxjs";
import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
import { UserNamePipe } from "@bitwarden/angular/pipes/user-name.pipe"; import { UserNamePipe } from "@bitwarden/angular/pipes/user-name.pipe";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { ProviderService } from "@bitwarden/common/admin-console/abstractions/provider.service"; import { ProviderService } from "@bitwarden/common/admin-console/abstractions/provider.service";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { EventSystemUser } from "@bitwarden/common/enums"; import { EventSystemUser } from "@bitwarden/common/enums";
@@ -49,7 +49,7 @@ export class EventsComponent extends BaseEventsComponent implements OnInit, OnDe
logService: LogService, logService: LogService,
private userNamePipe: UserNamePipe, private userNamePipe: UserNamePipe,
private organizationService: OrganizationService, private organizationService: OrganizationService,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
private providerService: ProviderService, private providerService: ProviderService,
fileDownloadService: FileDownloadService, fileDownloadService: FileDownloadService,
toastService: ToastService, toastService: ToastService,
@@ -83,7 +83,7 @@ export class EventsComponent extends BaseEventsComponent implements OnInit, OnDe
} }
async load() { async load() {
const response = await this.organizationUserService.getAllUsers(this.organizationId); const response = await this.organizationUserApiService.getAllUsers(this.organizationId);
response.data.forEach((u) => { response.data.forEach((u) => {
const name = this.userNamePipe.transform(u); const name = this.userNamePipe.transform(u);
this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email }); this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });

View File

@@ -14,9 +14,9 @@ import {
takeUntil, takeUntil,
} from "rxjs"; } from "rxjs";
import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { ErrorResponse } from "@bitwarden/common/models/response/error.response"; import { ErrorResponse } from "@bitwarden/common/models/response/error.response";
@@ -131,7 +131,7 @@ export class GroupAddEditComponent implements OnInit, OnDestroy {
); );
private get orgMembers$(): Observable<Array<AccessItemView & { userId: UserId }>> { private get orgMembers$(): Observable<Array<AccessItemView & { userId: UserId }>> {
return from(this.organizationUserService.getAllUsers(this.organizationId)).pipe( return from(this.organizationUserApiService.getAllUsers(this.organizationId)).pipe(
map((response) => map((response) =>
response.data.map((m) => ({ response.data.map((m) => ({
id: m.id, id: m.id,
@@ -202,7 +202,7 @@ export class GroupAddEditComponent implements OnInit, OnDestroy {
@Inject(DIALOG_DATA) private params: GroupAddEditDialogParams, @Inject(DIALOG_DATA) private params: GroupAddEditDialogParams,
private dialogRef: DialogRef<GroupAddEditDialogResultType>, private dialogRef: DialogRef<GroupAddEditDialogResultType>,
private apiService: ApiService, private apiService: ApiService,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
private groupService: GroupService, private groupService: GroupService,
private i18nService: I18nService, private i18nService: I18nService,
private platformUtilsService: PlatformUtilsService, private platformUtilsService: PlatformUtilsService,

View File

@@ -3,7 +3,7 @@ import { Directive, OnInit } from "@angular/core";
import { import {
OrganizationUserBulkPublicKeyResponse, OrganizationUserBulkPublicKeyResponse,
OrganizationUserBulkResponse, OrganizationUserBulkResponse,
} from "@bitwarden/common/admin-console/abstractions/organization-user/responses"; } from "@bitwarden/admin-console/common";
import { ProviderUserBulkPublicKeyResponse } from "@bitwarden/common/admin-console/models/response/provider/provider-user-bulk-public-key.response"; import { ProviderUserBulkPublicKeyResponse } from "@bitwarden/common/admin-console/models/response/provider/provider-user-bulk-public-key.response";
import { ProviderUserBulkResponse } from "@bitwarden/common/admin-console/models/response/provider/provider-user-bulk.response"; import { ProviderUserBulkResponse } from "@bitwarden/common/admin-console/models/response/provider/provider-user-bulk.response";
import { ListResponse } from "@bitwarden/common/models/response/list.response"; import { ListResponse } from "@bitwarden/common/models/response/list.response";

View File

@@ -1,6 +1,6 @@
import { Directive } from "@angular/core"; import { Directive } from "@angular/core";
import { OrganizationUserBulkResponse } from "@bitwarden/common/admin-console/abstractions/organization-user/responses"; import { OrganizationUserBulkResponse } from "@bitwarden/admin-console/common";
import { ProviderUserBulkResponse } from "@bitwarden/common/admin-console/models/response/provider/provider-user-bulk.response"; import { ProviderUserBulkResponse } from "@bitwarden/common/admin-console/models/response/provider/provider-user-bulk.response";
import { ListResponse } from "@bitwarden/common/models/response/list.response"; import { ListResponse } from "@bitwarden/common/models/response/list.response";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";

View File

@@ -1,9 +1,11 @@
import { DIALOG_DATA, DialogConfig } from "@angular/cdk/dialog"; import { DIALOG_DATA, DialogConfig } from "@angular/cdk/dialog";
import { Component, Inject, OnInit } from "@angular/core"; import { Component, Inject, OnInit } from "@angular/core";
import {
OrganizationUserApiService,
OrganizationUserBulkConfirmRequest,
} from "@bitwarden/admin-console/common";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { OrganizationUserBulkConfirmRequest } from "@bitwarden/common/admin-console/abstractions/organization-user/requests";
import { OrganizationUserStatusType } from "@bitwarden/common/admin-console/enums"; import { OrganizationUserStatusType } from "@bitwarden/common/admin-console/enums";
import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
@@ -40,7 +42,7 @@ export class BulkConfirmComponent implements OnInit {
@Inject(DIALOG_DATA) protected data: BulkConfirmDialogData, @Inject(DIALOG_DATA) protected data: BulkConfirmDialogData,
protected cryptoService: CryptoService, protected cryptoService: CryptoService,
protected apiService: ApiService, protected apiService: ApiService,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
private i18nService: I18nService, private i18nService: I18nService,
) { ) {
this.organizationId = data.organizationId; this.organizationId = data.organizationId;
@@ -104,7 +106,7 @@ export class BulkConfirmComponent implements OnInit {
} }
protected async getPublicKeys() { protected async getPublicKeys() {
return await this.organizationUserService.postOrganizationUsersPublicKey( return await this.organizationUserApiService.postOrganizationUsersPublicKey(
this.organizationId, this.organizationId,
this.filteredUsers.map((user) => user.id), this.filteredUsers.map((user) => user.id),
); );
@@ -116,7 +118,7 @@ export class BulkConfirmComponent implements OnInit {
protected async postConfirmRequest(userIdsWithKeys: any[]) { protected async postConfirmRequest(userIdsWithKeys: any[]) {
const request = new OrganizationUserBulkConfirmRequest(userIdsWithKeys); const request = new OrganizationUserBulkConfirmRequest(userIdsWithKeys);
return await this.organizationUserService.postOrganizationUserBulkConfirm( return await this.organizationUserApiService.postOrganizationUserBulkConfirm(
this.organizationId, this.organizationId,
request, request,
); );

View File

@@ -1,7 +1,7 @@
import { DialogRef, DIALOG_DATA } from "@angular/cdk/dialog"; import { DialogRef, DIALOG_DATA } from "@angular/cdk/dialog";
import { Component, Inject, OnInit } from "@angular/core"; import { Component, Inject, OnInit } from "@angular/core";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service"; import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
import { DialogService, TableDataSource, ToastService } from "@bitwarden/components"; import { DialogService, TableDataSource, ToastService } from "@bitwarden/components";
@@ -21,7 +21,7 @@ export class BulkEnableSecretsManagerDialogComponent implements OnInit {
constructor( constructor(
public dialogRef: DialogRef, public dialogRef: DialogRef,
@Inject(DIALOG_DATA) private data: BulkEnableSecretsManagerDialogData, @Inject(DIALOG_DATA) private data: BulkEnableSecretsManagerDialogData,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
private platformUtilsService: PlatformUtilsService, private platformUtilsService: PlatformUtilsService,
private i18nService: I18nService, private i18nService: I18nService,
private toastService: ToastService, private toastService: ToastService,
@@ -32,7 +32,7 @@ export class BulkEnableSecretsManagerDialogComponent implements OnInit {
} }
submit = async () => { submit = async () => {
await this.organizationUserService.putOrganizationUserBulkEnableSecretsManager( await this.organizationUserApiService.putOrganizationUserBulkEnableSecretsManager(
this.data.orgId, this.data.orgId,
this.dataSource.data.map((u) => u.id), this.dataSource.data.map((u) => u.id),
); );

View File

@@ -1,8 +1,8 @@
import { DIALOG_DATA, DialogConfig } from "@angular/cdk/dialog"; import { DIALOG_DATA, DialogConfig } from "@angular/cdk/dialog";
import { Component, Inject } from "@angular/core"; import { Component, Inject } from "@angular/core";
import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { OrganizationUserStatusType } from "@bitwarden/common/admin-console/enums"; import { OrganizationUserStatusType } from "@bitwarden/common/admin-console/enums";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { DialogService } from "@bitwarden/components"; import { DialogService } from "@bitwarden/components";
@@ -33,7 +33,7 @@ export class BulkRemoveComponent {
@Inject(DIALOG_DATA) protected data: BulkRemoveDialogData, @Inject(DIALOG_DATA) protected data: BulkRemoveDialogData,
protected apiService: ApiService, protected apiService: ApiService,
protected i18nService: I18nService, protected i18nService: I18nService,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
) { ) {
this.organizationId = data.organizationId; this.organizationId = data.organizationId;
this.users = data.users; this.users = data.users;
@@ -60,7 +60,7 @@ export class BulkRemoveComponent {
}; };
protected async removeUsers() { protected async removeUsers() {
return await this.organizationUserService.removeManyOrganizationUsers( return await this.organizationUserApiService.removeManyOrganizationUsers(
this.organizationId, this.organizationId,
this.users.map((user) => user.id), this.users.map((user) => user.id),
); );

View File

@@ -1,7 +1,7 @@
import { DIALOG_DATA } from "@angular/cdk/dialog"; import { DIALOG_DATA } from "@angular/cdk/dialog";
import { Component, Inject } from "@angular/core"; import { Component, Inject } from "@angular/core";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service"; import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
import { OrganizationUserStatusType } from "@bitwarden/common/admin-console/enums"; import { OrganizationUserStatusType } from "@bitwarden/common/admin-console/enums";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { DialogService } from "@bitwarden/components"; import { DialogService } from "@bitwarden/components";
@@ -32,7 +32,7 @@ export class BulkRestoreRevokeComponent {
constructor( constructor(
protected i18nService: I18nService, protected i18nService: I18nService,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
@Inject(DIALOG_DATA) protected data: BulkRestoreDialogParams, @Inject(DIALOG_DATA) protected data: BulkRestoreDialogParams,
) { ) {
this.isRevoking = data.isRevoking; this.isRevoking = data.isRevoking;
@@ -66,12 +66,12 @@ export class BulkRestoreRevokeComponent {
protected async performBulkUserAction() { protected async performBulkUserAction() {
const userIds = this.users.map((user) => user.id); const userIds = this.users.map((user) => user.id);
if (this.isRevoking) { if (this.isRevoking) {
return await this.organizationUserService.revokeManyOrganizationUsers( return await this.organizationUserApiService.revokeManyOrganizationUsers(
this.organizationId, this.organizationId,
userIds, userIds,
); );
} else { } else {
return await this.organizationUserService.restoreManyOrganizationUsers( return await this.organizationUserApiService.restoreManyOrganizationUsers(
this.organizationId, this.organizationId,
userIds, userIds,
); );

View File

@@ -1,7 +1,7 @@
import { DIALOG_DATA, DialogConfig } from "@angular/cdk/dialog"; import { DIALOG_DATA, DialogConfig } from "@angular/cdk/dialog";
import { Component, Inject, OnInit } from "@angular/core"; import { Component, Inject, OnInit } from "@angular/core";
import { OrganizationUserBulkResponse } from "@bitwarden/common/admin-console/abstractions/organization-user/responses"; import { OrganizationUserBulkResponse } from "@bitwarden/admin-console/common";
import { import {
OrganizationUserStatusType, OrganizationUserStatusType,
ProviderUserStatusType, ProviderUserStatusType,

View File

@@ -13,8 +13,8 @@ import {
takeUntil, takeUntil,
} from "rxjs"; } from "rxjs";
import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { import {
OrganizationUserStatusType, OrganizationUserStatusType,
OrganizationUserType, OrganizationUserType,
@@ -139,7 +139,7 @@ export class MemberDialogComponent implements OnDestroy {
private collectionAdminService: CollectionAdminService, private collectionAdminService: CollectionAdminService,
private groupService: GroupService, private groupService: GroupService,
private userService: UserAdminService, private userService: UserAdminService,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
private dialogService: DialogService, private dialogService: DialogService,
private accountService: AccountService, private accountService: AccountService,
organizationService: OrganizationService, organizationService: OrganizationService,
@@ -491,7 +491,7 @@ export class MemberDialogComponent implements OnDestroy {
} }
} }
await this.organizationUserService.removeOrganizationUser( await this.organizationUserApiService.removeOrganizationUser(
this.params.organizationId, this.params.organizationId,
this.params.organizationUserId, this.params.organizationUserId,
); );
@@ -528,7 +528,7 @@ export class MemberDialogComponent implements OnDestroy {
} }
} }
await this.organizationUserService.revokeOrganizationUser( await this.organizationUserApiService.revokeOrganizationUser(
this.params.organizationId, this.params.organizationId,
this.params.organizationUserId, this.params.organizationUserId,
); );
@@ -547,7 +547,7 @@ export class MemberDialogComponent implements OnDestroy {
return; return;
} }
await this.organizationUserService.restoreOrganizationUser( await this.organizationUserApiService.restoreOrganizationUser(
this.params.organizationId, this.params.organizationId,
this.params.organizationUserId, this.params.organizationUserId,
); );

View File

@@ -13,15 +13,17 @@ import {
switchMap, switchMap,
} from "rxjs"; } from "rxjs";
import {
OrganizationUserApiService,
OrganizationUserConfirmRequest,
OrganizationUserUserDetailsResponse,
} from "@bitwarden/admin-console/common";
import { UserNamePipe } from "@bitwarden/angular/pipes/user-name.pipe"; import { UserNamePipe } from "@bitwarden/angular/pipes/user-name.pipe";
import { ModalService } from "@bitwarden/angular/services/modal.service"; import { ModalService } from "@bitwarden/angular/services/modal.service";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction";
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { OrganizationManagementPreferencesService } from "@bitwarden/common/admin-console/abstractions/organization-management-preferences/organization-management-preferences.service"; import { OrganizationManagementPreferencesService } from "@bitwarden/common/admin-console/abstractions/organization-management-preferences/organization-management-preferences.service";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { OrganizationUserConfirmRequest } from "@bitwarden/common/admin-console/abstractions/organization-user/requests";
import { OrganizationUserUserDetailsResponse } from "@bitwarden/common/admin-console/abstractions/organization-user/responses";
import { PolicyApiServiceAbstraction as PolicyApiService } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; import { PolicyApiServiceAbstraction as PolicyApiService } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction";
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
import { import {
@@ -116,7 +118,7 @@ export class MembersComponent extends BaseMembersComponent<OrganizationUserView>
private syncService: SyncService, private syncService: SyncService,
private organizationService: OrganizationService, private organizationService: OrganizationService,
private organizationApiService: OrganizationApiServiceAbstraction, private organizationApiService: OrganizationApiServiceAbstraction,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
private router: Router, private router: Router,
private groupService: GroupService, private groupService: GroupService,
private collectionService: CollectionService, private collectionService: CollectionService,
@@ -213,7 +215,7 @@ export class MembersComponent extends BaseMembersComponent<OrganizationUserView>
let collectionsPromise: Promise<Map<string, string>>; let collectionsPromise: Promise<Map<string, string>>;
// We don't need both groups and collections for the table, so only load one // We don't need both groups and collections for the table, so only load one
const userPromise = this.organizationUserService.getAllUsers(this.organization.id, { const userPromise = this.organizationUserApiService.getAllUsers(this.organization.id, {
includeGroups: this.organization.useGroups, includeGroups: this.organization.useGroups,
includeCollections: !this.organization.useGroups, includeCollections: !this.organization.useGroups,
}); });
@@ -270,19 +272,19 @@ export class MembersComponent extends BaseMembersComponent<OrganizationUserView>
} }
removeUser(id: string): Promise<void> { removeUser(id: string): Promise<void> {
return this.organizationUserService.removeOrganizationUser(this.organization.id, id); return this.organizationUserApiService.removeOrganizationUser(this.organization.id, id);
} }
revokeUser(id: string): Promise<void> { revokeUser(id: string): Promise<void> {
return this.organizationUserService.revokeOrganizationUser(this.organization.id, id); return this.organizationUserApiService.revokeOrganizationUser(this.organization.id, id);
} }
restoreUser(id: string): Promise<void> { restoreUser(id: string): Promise<void> {
return this.organizationUserService.restoreOrganizationUser(this.organization.id, id); return this.organizationUserApiService.restoreOrganizationUser(this.organization.id, id);
} }
reinviteUser(id: string): Promise<void> { reinviteUser(id: string): Promise<void> {
return this.organizationUserService.postOrganizationUserReinvite(this.organization.id, id); return this.organizationUserApiService.postOrganizationUserReinvite(this.organization.id, id);
} }
async confirmUser(user: OrganizationUserView, publicKey: Uint8Array): Promise<void> { async confirmUser(user: OrganizationUserView, publicKey: Uint8Array): Promise<void> {
@@ -290,7 +292,7 @@ export class MembersComponent extends BaseMembersComponent<OrganizationUserView>
const key = await this.cryptoService.rsaEncrypt(orgKey.key, publicKey); const key = await this.cryptoService.rsaEncrypt(orgKey.key, publicKey);
const request = new OrganizationUserConfirmRequest(); const request = new OrganizationUserConfirmRequest();
request.key = key.encryptedString; request.key = key.encryptedString;
await this.organizationUserService.postOrganizationUserConfirm( await this.organizationUserApiService.postOrganizationUserConfirm(
this.organization.id, this.organization.id,
user.id, user.id,
request, request,
@@ -585,7 +587,7 @@ export class MembersComponent extends BaseMembersComponent<OrganizationUserView>
} }
try { try {
const response = this.organizationUserService.postManyOrganizationUserReinvite( const response = this.organizationUserApiService.postManyOrganizationUserReinvite(
this.organization.id, this.organization.id,
filteredUsers.map((user) => user.id), filteredUsers.map((user) => user.id),
); );

View File

@@ -1,8 +1,10 @@
import { mock, MockProxy } from "jest-mock-extended"; import { mock, MockProxy } from "jest-mock-extended";
import {
OrganizationUserApiService,
OrganizationUserResetPasswordDetailsResponse,
} from "@bitwarden/admin-console/common";
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { OrganizationUserResetPasswordDetailsResponse } from "@bitwarden/common/admin-console/abstractions/organization-user/responses";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { OrganizationKeysResponse } from "@bitwarden/common/admin-console/models/response/organization-keys.response"; import { OrganizationKeysResponse } from "@bitwarden/common/admin-console/models/response/organization-keys.response";
import { OrganizationApiService } from "@bitwarden/common/admin-console/services/organization/organization-api.service"; import { OrganizationApiService } from "@bitwarden/common/admin-console/services/organization/organization-api.service";
@@ -24,7 +26,7 @@ describe("OrganizationUserResetPasswordService", () => {
let cryptoService: MockProxy<CryptoService>; let cryptoService: MockProxy<CryptoService>;
let encryptService: MockProxy<EncryptService>; let encryptService: MockProxy<EncryptService>;
let organizationService: MockProxy<OrganizationService>; let organizationService: MockProxy<OrganizationService>;
let organizationUserService: MockProxy<OrganizationUserService>; let organizationUserApiService: MockProxy<OrganizationUserApiService>;
let organizationApiService: MockProxy<OrganizationApiService>; let organizationApiService: MockProxy<OrganizationApiService>;
let i18nService: MockProxy<I18nService>; let i18nService: MockProxy<I18nService>;
@@ -32,7 +34,7 @@ describe("OrganizationUserResetPasswordService", () => {
cryptoService = mock<CryptoService>(); cryptoService = mock<CryptoService>();
encryptService = mock<EncryptService>(); encryptService = mock<EncryptService>();
organizationService = mock<OrganizationService>(); organizationService = mock<OrganizationService>();
organizationUserService = mock<OrganizationUserService>(); organizationUserApiService = mock<OrganizationUserApiService>();
organizationApiService = mock<OrganizationApiService>(); organizationApiService = mock<OrganizationApiService>();
i18nService = mock<I18nService>(); i18nService = mock<I18nService>();
@@ -40,7 +42,7 @@ describe("OrganizationUserResetPasswordService", () => {
cryptoService, cryptoService,
encryptService, encryptService,
organizationService, organizationService,
organizationUserService, organizationUserApiService,
organizationApiService, organizationApiService,
i18nService, i18nService,
); );
@@ -112,7 +114,7 @@ describe("OrganizationUserResetPasswordService", () => {
const mockOrgId = "test-org-id"; const mockOrgId = "test-org-id";
beforeEach(() => { beforeEach(() => {
organizationUserService.getOrganizationUserResetPasswordDetails.mockResolvedValue( organizationUserApiService.getOrganizationUserResetPasswordDetails.mockResolvedValue(
new OrganizationUserResetPasswordDetailsResponse({ new OrganizationUserResetPasswordDetailsResponse({
kdf: KdfType.PBKDF2_SHA256, kdf: KdfType.PBKDF2_SHA256,
kdfIterations: 5000, kdfIterations: 5000,
@@ -140,11 +142,11 @@ describe("OrganizationUserResetPasswordService", () => {
it("should reset the user's master password", async () => { it("should reset the user's master password", async () => {
await sut.resetMasterPassword(mockNewMP, mockEmail, mockOrgUserId, mockOrgId); await sut.resetMasterPassword(mockNewMP, mockEmail, mockOrgUserId, mockOrgId);
expect(organizationUserService.putOrganizationUserResetPassword).toHaveBeenCalled(); expect(organizationUserApiService.putOrganizationUserResetPassword).toHaveBeenCalled();
}); });
it("should throw an error if the user details are null", async () => { it("should throw an error if the user details are null", async () => {
organizationUserService.getOrganizationUserResetPasswordDetails.mockResolvedValue(null); organizationUserApiService.getOrganizationUserResetPasswordDetails.mockResolvedValue(null);
await expect( await expect(
sut.resetMasterPassword(mockNewMP, mockEmail, mockOrgUserId, mockOrgId), sut.resetMasterPassword(mockNewMP, mockEmail, mockOrgUserId, mockOrgId),
).rejects.toThrow(); ).rejects.toThrow();

View File

@@ -1,13 +1,13 @@
import { Injectable } from "@angular/core"; import { Injectable } from "@angular/core";
import {
OrganizationUserApiService,
OrganizationUserResetPasswordRequest,
OrganizationUserResetPasswordWithIdRequest,
} from "@bitwarden/admin-console/common";
import { UserKeyRotationDataProvider } from "@bitwarden/auth/common"; import { UserKeyRotationDataProvider } from "@bitwarden/auth/common";
import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction";
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import {
OrganizationUserResetPasswordRequest,
OrganizationUserResetPasswordWithIdRequest,
} from "@bitwarden/common/admin-console/abstractions/organization-user/requests";
import { import {
Argon2KdfConfig, Argon2KdfConfig,
KdfConfig, KdfConfig,
@@ -33,7 +33,7 @@ export class OrganizationUserResetPasswordService
private cryptoService: CryptoService, private cryptoService: CryptoService,
private encryptService: EncryptService, private encryptService: EncryptService,
private organizationService: OrganizationService, private organizationService: OrganizationService,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
private organizationApiService: OrganizationApiServiceAbstraction, private organizationApiService: OrganizationApiServiceAbstraction,
private i18nService: I18nService, private i18nService: I18nService,
) {} ) {}
@@ -76,7 +76,7 @@ export class OrganizationUserResetPasswordService
orgUserId: string, orgUserId: string,
orgId: string, orgId: string,
): Promise<void> { ): Promise<void> {
const response = await this.organizationUserService.getOrganizationUserResetPasswordDetails( const response = await this.organizationUserApiService.getOrganizationUserResetPasswordDetails(
orgId, orgId,
orgUserId, orgUserId,
); );
@@ -128,7 +128,11 @@ export class OrganizationUserResetPasswordService
request.newMasterPasswordHash = newMasterKeyHash; request.newMasterPasswordHash = newMasterKeyHash;
// Change user's password // Change user's password
await this.organizationUserService.putOrganizationUserResetPassword(orgId, orgUserId, request); await this.organizationUserApiService.putOrganizationUserResetPassword(
orgId,
orgUserId,
request,
);
} }
/** /**

View File

@@ -1,4 +1,4 @@
import { OrganizationUserUserDetailsResponse } from "@bitwarden/common/admin-console/abstractions/organization-user/responses"; import { OrganizationUserUserDetailsResponse } from "@bitwarden/admin-console/common";
import { import {
OrganizationUserStatusType, OrganizationUserStatusType,
OrganizationUserType, OrganizationUserType,

View File

@@ -1,6 +1,8 @@
import {
OrganizationUserApiService,
OrganizationUserResetPasswordEnrollmentRequest,
} from "@bitwarden/admin-console/common";
import { UserVerificationDialogComponent } from "@bitwarden/auth/angular"; import { UserVerificationDialogComponent } from "@bitwarden/auth/angular";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { OrganizationUserResetPasswordEnrollmentRequest } from "@bitwarden/common/admin-console/abstractions/organization-user/requests";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction";
import { VerificationWithSecret } from "@bitwarden/common/auth/types/verification"; import { VerificationWithSecret } from "@bitwarden/common/auth/types/verification";
@@ -23,7 +25,7 @@ export class EnrollMasterPasswordReset {
dialogService: DialogService, dialogService: DialogService,
data: EnrollMasterPasswordResetData, data: EnrollMasterPasswordResetData,
resetPasswordService: OrganizationUserResetPasswordService, resetPasswordService: OrganizationUserResetPasswordService,
organizationUserService: OrganizationUserService, organizationUserApiService: OrganizationUserApiService,
platformUtilsService: PlatformUtilsService, platformUtilsService: PlatformUtilsService,
i18nService: I18nService, i18nService: I18nService,
syncService: SyncService, syncService: SyncService,
@@ -50,7 +52,7 @@ export class EnrollMasterPasswordReset {
// Process the enrollment request, which is an endpoint that is // Process the enrollment request, which is an endpoint that is
// gated by a server-side check of the master password hash // gated by a server-side check of the master password hash
await organizationUserService.putOrganizationUserResetPasswordEnrollment( await organizationUserApiService.putOrganizationUserResetPasswordEnrollment(
data.organization.id, data.organization.id,
data.organization.userId, data.organization.userId,
request, request,

View File

@@ -1,4 +1,4 @@
import { OrganizationUserResetPasswordWithIdRequest } from "@bitwarden/common/admin-console/abstractions/organization-user/requests"; import { OrganizationUserResetPasswordWithIdRequest } from "@bitwarden/admin-console/common";
import { WebauthnRotateCredentialRequest } from "@bitwarden/common/auth/models/request/webauthn-rotate-credential.request"; import { WebauthnRotateCredentialRequest } from "@bitwarden/common/auth/models/request/webauthn-rotate-credential.request";
import { SendWithIdRequest } from "@bitwarden/common/src/tools/send/models/request/send-with-id.request"; import { SendWithIdRequest } from "@bitwarden/common/src/tools/send/models/request/send-with-id.request";
import { CipherWithIdRequest } from "@bitwarden/common/src/vault/models/request/cipher-with-id.request"; import { CipherWithIdRequest } from "@bitwarden/common/src/vault/models/request/cipher-with-id.request";

View File

@@ -1,7 +1,7 @@
import { mock, MockProxy } from "jest-mock-extended"; import { mock, MockProxy } from "jest-mock-extended";
import { BehaviorSubject } from "rxjs"; import { BehaviorSubject } from "rxjs";
import { OrganizationUserResetPasswordWithIdRequest } from "@bitwarden/common/admin-console/abstractions/organization-user/requests"; import { OrganizationUserResetPasswordWithIdRequest } from "@bitwarden/admin-console/common";
import { DeviceTrustServiceAbstraction } from "@bitwarden/common/auth/abstractions/device-trust.service.abstraction"; import { DeviceTrustServiceAbstraction } from "@bitwarden/common/auth/abstractions/device-trust.service.abstraction";
import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction";
import { WebauthnRotateCredentialRequest } from "@bitwarden/common/auth/models/request/webauthn-rotate-credential.request"; import { WebauthnRotateCredentialRequest } from "@bitwarden/common/auth/models/request/webauthn-rotate-credential.request";

View File

@@ -1,9 +1,9 @@
import { FakeGlobalStateProvider } from "@bitwarden/common/../spec/fake-state-provider"; import { FakeGlobalStateProvider } from "@bitwarden/common/../spec/fake-state-provider";
import { MockProxy, mock } from "jest-mock-extended"; import { MockProxy, mock } from "jest-mock-extended";
import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction";
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { PolicyType } from "@bitwarden/common/admin-console/enums";
@@ -35,7 +35,7 @@ describe("AcceptOrganizationInviteService", () => {
let policyService: MockProxy<PolicyService>; let policyService: MockProxy<PolicyService>;
let logService: MockProxy<LogService>; let logService: MockProxy<LogService>;
let organizationApiService: MockProxy<OrganizationApiServiceAbstraction>; let organizationApiService: MockProxy<OrganizationApiServiceAbstraction>;
let organizationUserService: MockProxy<OrganizationUserService>; let organizationUserApiService: MockProxy<OrganizationUserApiService>;
let i18nService: MockProxy<I18nService>; let i18nService: MockProxy<I18nService>;
let globalStateProvider: FakeGlobalStateProvider; let globalStateProvider: FakeGlobalStateProvider;
let globalState: FakeGlobalState<OrganizationInvite>; let globalState: FakeGlobalState<OrganizationInvite>;
@@ -49,7 +49,7 @@ describe("AcceptOrganizationInviteService", () => {
policyService = mock(); policyService = mock();
logService = mock(); logService = mock();
organizationApiService = mock(); organizationApiService = mock();
organizationUserService = mock(); organizationUserApiService = mock();
i18nService = mock(); i18nService = mock();
globalStateProvider = new FakeGlobalStateProvider(); globalStateProvider = new FakeGlobalStateProvider();
globalState = globalStateProvider.getFake(ORGANIZATION_INVITE); globalState = globalStateProvider.getFake(ORGANIZATION_INVITE);
@@ -63,7 +63,7 @@ describe("AcceptOrganizationInviteService", () => {
policyService, policyService,
logService, logService,
organizationApiService, organizationApiService,
organizationUserService, organizationUserApiService,
i18nService, i18nService,
globalStateProvider, globalStateProvider,
); );
@@ -85,10 +85,10 @@ describe("AcceptOrganizationInviteService", () => {
const result = await sut.validateAndAcceptInvite(invite); const result = await sut.validateAndAcceptInvite(invite);
expect(result).toBe(true); expect(result).toBe(true);
expect(organizationUserService.postOrganizationUserAcceptInit).toHaveBeenCalled(); expect(organizationUserApiService.postOrganizationUserAcceptInit).toHaveBeenCalled();
expect(apiService.refreshIdentityToken).toHaveBeenCalled(); expect(apiService.refreshIdentityToken).toHaveBeenCalled();
expect(globalState.nextMock).toHaveBeenCalledWith(null); expect(globalState.nextMock).toHaveBeenCalledWith(null);
expect(organizationUserService.postOrganizationUserAccept).not.toHaveBeenCalled(); expect(organizationUserApiService.postOrganizationUserAccept).not.toHaveBeenCalled();
expect(authService.logOut).not.toHaveBeenCalled(); expect(authService.logOut).not.toHaveBeenCalled();
}); });
@@ -133,10 +133,10 @@ describe("AcceptOrganizationInviteService", () => {
const result = await sut.validateAndAcceptInvite(invite); const result = await sut.validateAndAcceptInvite(invite);
expect(result).toBe(true); expect(result).toBe(true);
expect(organizationUserService.postOrganizationUserAccept).toHaveBeenCalled(); expect(organizationUserApiService.postOrganizationUserAccept).toHaveBeenCalled();
expect(apiService.refreshIdentityToken).toHaveBeenCalled(); expect(apiService.refreshIdentityToken).toHaveBeenCalled();
expect(globalState.nextMock).toHaveBeenCalledWith(null); expect(globalState.nextMock).toHaveBeenCalledWith(null);
expect(organizationUserService.postOrganizationUserAcceptInit).not.toHaveBeenCalled(); expect(organizationUserApiService.postOrganizationUserAcceptInit).not.toHaveBeenCalled();
expect(authService.logOut).not.toHaveBeenCalled(); expect(authService.logOut).not.toHaveBeenCalled();
}); });
@@ -161,8 +161,8 @@ describe("AcceptOrganizationInviteService", () => {
const result = await sut.validateAndAcceptInvite(invite); const result = await sut.validateAndAcceptInvite(invite);
expect(result).toBe(true); expect(result).toBe(true);
expect(organizationUserService.postOrganizationUserAccept).toHaveBeenCalled(); expect(organizationUserApiService.postOrganizationUserAccept).toHaveBeenCalled();
expect(organizationUserService.postOrganizationUserAcceptInit).not.toHaveBeenCalled(); expect(organizationUserApiService.postOrganizationUserAcceptInit).not.toHaveBeenCalled();
expect(authService.logOut).not.toHaveBeenCalled(); expect(authService.logOut).not.toHaveBeenCalled();
}); });
}); });

View File

@@ -1,13 +1,13 @@
import { Injectable } from "@angular/core"; import { Injectable } from "@angular/core";
import { BehaviorSubject, firstValueFrom, map } from "rxjs"; import { BehaviorSubject, firstValueFrom, map } from "rxjs";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { import {
OrganizationUserApiService,
OrganizationUserAcceptRequest, OrganizationUserAcceptRequest,
OrganizationUserAcceptInitRequest, OrganizationUserAcceptInitRequest,
} from "@bitwarden/common/admin-console/abstractions/organization-user/requests"; } from "@bitwarden/admin-console/common";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction";
import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction";
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { PolicyType } from "@bitwarden/common/admin-console/enums";
@@ -58,7 +58,7 @@ export class AcceptOrganizationInviteService {
private readonly policyService: PolicyService, private readonly policyService: PolicyService,
private readonly logService: LogService, private readonly logService: LogService,
private readonly organizationApiService: OrganizationApiServiceAbstraction, private readonly organizationApiService: OrganizationApiServiceAbstraction,
private readonly organizationUserService: OrganizationUserService, private readonly organizationUserApiService: OrganizationUserApiService,
private readonly i18nService: I18nService, private readonly i18nService: I18nService,
private readonly globalStateProvider: GlobalStateProvider, private readonly globalStateProvider: GlobalStateProvider,
) { ) {
@@ -121,7 +121,7 @@ export class AcceptOrganizationInviteService {
private async acceptAndInitOrganization(invite: OrganizationInvite): Promise<void> { private async acceptAndInitOrganization(invite: OrganizationInvite): Promise<void> {
await this.prepareAcceptAndInitRequest(invite).then((request) => await this.prepareAcceptAndInitRequest(invite).then((request) =>
this.organizationUserService.postOrganizationUserAcceptInit( this.organizationUserApiService.postOrganizationUserAcceptInit(
invite.organizationId, invite.organizationId,
invite.organizationUserId, invite.organizationUserId,
request, request,
@@ -156,7 +156,7 @@ export class AcceptOrganizationInviteService {
private async accept(invite: OrganizationInvite): Promise<void> { private async accept(invite: OrganizationInvite): Promise<void> {
await this.prepareAcceptRequest(invite).then((request) => await this.prepareAcceptRequest(invite).then((request) =>
this.organizationUserService.postOrganizationUserAccept( this.organizationUserApiService.postOrganizationUserAccept(
invite.organizationId, invite.organizationId,
invite.organizationUserId, invite.organizationUserId,
request, request,

View File

@@ -1,6 +1,7 @@
import { CommonModule } from "@angular/common"; import { CommonModule } from "@angular/common";
import { APP_INITIALIZER, NgModule, Optional, SkipSelf } from "@angular/core"; import { APP_INITIALIZER, NgModule, Optional, SkipSelf } from "@angular/core";
import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
import { SafeProvider, safeProvider } from "@bitwarden/angular/platform/utils/safe-provider"; import { SafeProvider, safeProvider } from "@bitwarden/angular/platform/utils/safe-provider";
import { import {
SECURE_STORAGE, SECURE_STORAGE,
@@ -24,7 +25,6 @@ import {
import { InternalUserDecryptionOptionsServiceAbstraction } from "@bitwarden/auth/common"; import { InternalUserDecryptionOptionsServiceAbstraction } from "@bitwarden/auth/common";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction";
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
import { AccountApiService as AccountApiServiceAbstraction } from "@bitwarden/common/auth/abstractions/account-api.service"; import { AccountApiService as AccountApiServiceAbstraction } from "@bitwarden/common/auth/abstractions/account-api.service";
@@ -203,7 +203,7 @@ const safeProviders: SafeProvider[] = [
KdfConfigService, KdfConfigService,
InternalMasterPasswordServiceAbstraction, InternalMasterPasswordServiceAbstraction,
OrganizationApiServiceAbstraction, OrganizationApiServiceAbstraction,
OrganizationUserService, OrganizationUserApiService,
InternalUserDecryptionOptionsServiceAbstraction, InternalUserDecryptionOptionsServiceAbstraction,
], ],
}), }),

View File

@@ -13,9 +13,11 @@ import {
} from "rxjs"; } from "rxjs";
import { first } from "rxjs/operators"; import { first } from "rxjs/operators";
import {
OrganizationUserApiService,
OrganizationUserUserDetailsResponse,
} from "@bitwarden/admin-console/common";
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { OrganizationUserUserDetailsResponse } from "@bitwarden/common/admin-console/abstractions/organization-user/responses/organization-user.response";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
@@ -106,7 +108,7 @@ export class CollectionDialogComponent implements OnInit, OnDestroy {
private collectionAdminService: CollectionAdminService, private collectionAdminService: CollectionAdminService,
private i18nService: I18nService, private i18nService: I18nService,
private platformUtilsService: PlatformUtilsService, private platformUtilsService: PlatformUtilsService,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
private dialogService: DialogService, private dialogService: DialogService,
private changeDetectorRef: ChangeDetectorRef, private changeDetectorRef: ChangeDetectorRef,
) { ) {
@@ -155,7 +157,7 @@ export class CollectionDialogComponent implements OnInit, OnDestroy {
collections: this.collectionAdminService.getAll(orgId), collections: this.collectionAdminService.getAll(orgId),
groups: groups$, groups: groups$,
// Collection(s) needed to map readonlypermission for (potential) access selector disabled state // Collection(s) needed to map readonlypermission for (potential) access selector disabled state
users: this.organizationUserService.getAllUsers(orgId, { includeCollections: true }), users: this.organizationUserApiService.getAllUsers(orgId, { includeCollections: true }),
}) })
.pipe(takeUntil(this.formGroup.controls.selectedOrg.valueChanges), takeUntil(this.destroy$)) .pipe(takeUntil(this.formGroup.controls.selectedOrg.valueChanges), takeUntil(this.destroy$))
.subscribe(({ organization, collections: allCollections, groups, users }) => { .subscribe(({ organization, collections: allCollections, groups, users }) => {

View File

@@ -1,11 +1,13 @@
import { Component, Inject, OnDestroy, OnInit } from "@angular/core"; import { Component, Inject, OnDestroy, OnInit } from "@angular/core";
import { combineLatest, map, Observable, Subject, takeUntil } from "rxjs"; import { combineLatest, map, Observable, Subject, takeUntil } from "rxjs";
import {
OrganizationUserApiService,
OrganizationUserResetPasswordEnrollmentRequest,
} from "@bitwarden/admin-console/common";
import { UserDecryptionOptionsServiceAbstraction } from "@bitwarden/auth/common"; import { UserDecryptionOptionsServiceAbstraction } from "@bitwarden/auth/common";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { OrganizationUserResetPasswordEnrollmentRequest } from "@bitwarden/common/admin-console/abstractions/organization-user/requests";
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { PolicyType } from "@bitwarden/common/admin-console/enums";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
@@ -45,7 +47,7 @@ export class OrganizationOptionsComponent implements OnInit, OnDestroy {
private policyService: PolicyService, private policyService: PolicyService,
private logService: LogService, private logService: LogService,
private organizationApiService: OrganizationApiServiceAbstraction, private organizationApiService: OrganizationApiServiceAbstraction,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
private userDecryptionOptionsService: UserDecryptionOptionsServiceAbstraction, private userDecryptionOptionsService: UserDecryptionOptionsServiceAbstraction,
private dialogService: DialogService, private dialogService: DialogService,
private resetPasswordService: OrganizationUserResetPasswordService, private resetPasswordService: OrganizationUserResetPasswordService,
@@ -153,7 +155,7 @@ export class OrganizationOptionsComponent implements OnInit, OnDestroy {
this.dialogService, this.dialogService,
{ organization: org }, { organization: org },
this.resetPasswordService, this.resetPasswordService,
this.organizationUserService, this.organizationUserApiService,
this.platformUtilsService, this.platformUtilsService,
this.i18nService, this.i18nService,
this.syncService, this.syncService,
@@ -166,11 +168,12 @@ export class OrganizationOptionsComponent implements OnInit, OnDestroy {
const request = new OrganizationUserResetPasswordEnrollmentRequest(); const request = new OrganizationUserResetPasswordEnrollmentRequest();
request.masterPasswordHash = "ignored"; request.masterPasswordHash = "ignored";
request.resetPasswordKey = null; request.resetPasswordKey = null;
this.actionPromise = this.organizationUserService.putOrganizationUserResetPasswordEnrollment( this.actionPromise =
this.organization.id, this.organizationUserApiService.putOrganizationUserResetPasswordEnrollment(
this.organization.userId, this.organization.id,
request, this.organization.userId,
); request,
);
try { try {
await this.actionPromise; await this.actionPromise;
this.platformUtilsService.showToast( this.platformUtilsService.showToast(

View File

@@ -3,8 +3,8 @@ import { Component, Inject, OnDestroy } from "@angular/core";
import { FormBuilder } from "@angular/forms"; import { FormBuilder } from "@angular/forms";
import { combineLatest, of, Subject, switchMap, takeUntil } from "rxjs"; import { combineLatest, of, Subject, switchMap, takeUntil } from "rxjs";
import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
@@ -60,7 +60,7 @@ export class BulkCollectionsDialogComponent implements OnDestroy {
private formBuilder: FormBuilder, private formBuilder: FormBuilder,
private organizationService: OrganizationService, private organizationService: OrganizationService,
private groupService: GroupService, private groupService: GroupService,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
private platformUtilsService: PlatformUtilsService, private platformUtilsService: PlatformUtilsService,
private i18nService: I18nService, private i18nService: I18nService,
private collectionAdminService: CollectionAdminService, private collectionAdminService: CollectionAdminService,
@@ -79,7 +79,7 @@ export class BulkCollectionsDialogComponent implements OnDestroy {
combineLatest([ combineLatest([
organization$, organization$,
groups$, groups$,
this.organizationUserService.getAllUsers(this.params.organizationId), this.organizationUserApiService.getAllUsers(this.params.organizationId),
]) ])
.pipe(takeUntil(this.destroy$)) .pipe(takeUntil(this.destroy$))
.subscribe(([organization, groups, users]) => { .subscribe(([organization, groups, users]) => {

View File

@@ -30,14 +30,16 @@ import {
tap, tap,
} from "rxjs/operators"; } from "rxjs/operators";
import {
OrganizationUserApiService,
OrganizationUserUserDetailsResponse,
} from "@bitwarden/admin-console/common";
import { SearchPipe } from "@bitwarden/angular/pipes/search.pipe"; import { SearchPipe } from "@bitwarden/angular/pipes/search.pipe";
import { ModalService } from "@bitwarden/angular/services/modal.service"; import { ModalService } from "@bitwarden/angular/services/modal.service";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
import { SearchService } from "@bitwarden/common/abstractions/search.service"; import { SearchService } from "@bitwarden/common/abstractions/search.service";
import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { OrganizationUserUserDetailsResponse } from "@bitwarden/common/admin-console/abstractions/organization-user/responses";
import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { EventType } from "@bitwarden/common/enums"; import { EventType } from "@bitwarden/common/enums";
@@ -215,7 +217,7 @@ export class VaultComponent implements OnInit, OnDestroy {
private totpService: TotpService, private totpService: TotpService,
private apiService: ApiService, private apiService: ApiService,
private collectionService: CollectionService, private collectionService: CollectionService,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
protected configService: ConfigService, protected configService: ConfigService,
private toastService: ToastService, private toastService: ToastService,
private accountService: AccountService, private accountService: AccountService,
@@ -395,7 +397,7 @@ export class VaultComponent implements OnInit, OnDestroy {
// This will be passed into the usersCanManage call // This will be passed into the usersCanManage call
this.orgRevokedUsers = ( this.orgRevokedUsers = (
await this.organizationUserService.getAllUsers(await firstValueFrom(organizationId$)) await this.organizationUserApiService.getAllUsers(await firstValueFrom(organizationId$))
).data.filter((user: OrganizationUserUserDetailsResponse) => { ).data.filter((user: OrganizationUserUserDetailsResponse) => {
return user.status === -1; return user.status === -1;
}); });

View File

@@ -5,7 +5,7 @@
"module": "ES2020", "module": "ES2020",
"resolveJsonModule": true, "resolveJsonModule": true,
"paths": { "paths": {
"@bitwarden/admin-console": ["../../libs/admin-console/src"], "@bitwarden/admin-console/common": ["../../libs/admin-console/src/common"],
"@bitwarden/angular/*": ["../../libs/angular/src/*"], "@bitwarden/angular/*": ["../../libs/angular/src/*"],
"@bitwarden/auth/common": ["../../libs/auth/src/common"], "@bitwarden/auth/common": ["../../libs/auth/src/common"],
"@bitwarden/auth/angular": ["../../libs/auth/src/angular"], "@bitwarden/auth/angular": ["../../libs/auth/src/angular"],

View File

@@ -18,7 +18,7 @@ export class ServiceContainer extends OssServiceContainer {
this.organizationAuthRequestService = new OrganizationAuthRequestService( this.organizationAuthRequestService = new OrganizationAuthRequestService(
this.organizationAuthRequestApiService, this.organizationAuthRequestApiService,
this.cryptoService, this.cryptoService,
this.organizationUserService, this.organizationUserApiService,
); );
} }
} }

View File

@@ -14,6 +14,7 @@
"paths": { "paths": {
"@bitwarden/cli/*": ["../../apps/cli/src/*"], "@bitwarden/cli/*": ["../../apps/cli/src/*"],
"@bitwarden/common/spec": ["../../libs/common/spec"], "@bitwarden/common/spec": ["../../libs/common/spec"],
"@bitwarden/admin-console/common": ["../../libs/admin-console/src/common"],
"@bitwarden/auth/common": ["../../libs/auth/src/common"], "@bitwarden/auth/common": ["../../libs/auth/src/common"],
"@bitwarden/auth/angular": ["../../libs/auth/src/angular"], "@bitwarden/auth/angular": ["../../libs/auth/src/angular"],
"@bitwarden/common/*": ["../../libs/common/src/*"], "@bitwarden/common/*": ["../../libs/common/src/*"],

View File

@@ -1,7 +1,9 @@
import { MockProxy, mock } from "jest-mock-extended"; import { MockProxy, mock } from "jest-mock-extended";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service"; import {
import { OrganizationUserResetPasswordDetailsResponse } from "@bitwarden/common/admin-console/abstractions/organization-user/responses"; OrganizationUserApiService,
OrganizationUserResetPasswordDetailsResponse,
} from "@bitwarden/admin-console/common";
import { ListResponse } from "@bitwarden/common/models/response/list.response"; import { ListResponse } from "@bitwarden/common/models/response/list.response";
import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string"; import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
@@ -14,17 +16,17 @@ import { PendingAuthRequestView } from "./pending-auth-request.view";
describe("OrganizationAuthRequestService", () => { describe("OrganizationAuthRequestService", () => {
let organizationAuthRequestApiService: MockProxy<OrganizationAuthRequestApiService>; let organizationAuthRequestApiService: MockProxy<OrganizationAuthRequestApiService>;
let cryptoService: MockProxy<CryptoService>; let cryptoService: MockProxy<CryptoService>;
let organizationUserService: MockProxy<OrganizationUserService>; let organizationUserApiService: MockProxy<OrganizationUserApiService>;
let organizationAuthRequestService: OrganizationAuthRequestService; let organizationAuthRequestService: OrganizationAuthRequestService;
beforeEach(() => { beforeEach(() => {
organizationAuthRequestApiService = mock<OrganizationAuthRequestApiService>(); organizationAuthRequestApiService = mock<OrganizationAuthRequestApiService>();
cryptoService = mock<CryptoService>(); cryptoService = mock<CryptoService>();
organizationUserService = mock<OrganizationUserService>(); organizationUserApiService = mock<OrganizationUserApiService>();
organizationAuthRequestService = new OrganizationAuthRequestService( organizationAuthRequestService = new OrganizationAuthRequestService(
organizationAuthRequestApiService, organizationAuthRequestApiService,
cryptoService, cryptoService,
organizationUserService, organizationUserApiService,
); );
}); });
@@ -113,7 +115,7 @@ describe("OrganizationAuthRequestService", () => {
OrganizationUserResetPasswordDetailsResponse, OrganizationUserResetPasswordDetailsResponse,
); );
organizationUserService.getManyOrganizationUserAccountRecoveryDetails.mockResolvedValueOnce( organizationUserApiService.getManyOrganizationUserAccountRecoveryDetails.mockResolvedValueOnce(
organizationUserResetPasswordDetailsResponse, organizationUserResetPasswordDetailsResponse,
); );
@@ -155,7 +157,7 @@ describe("OrganizationAuthRequestService", () => {
encryptedPrivateKey: "encryptedPrivateKey", encryptedPrivateKey: "encryptedPrivateKey",
}); });
organizationUserService.getOrganizationUserResetPasswordDetails.mockResolvedValue( organizationUserApiService.getOrganizationUserResetPasswordDetails.mockResolvedValue(
organizationUserResetPasswordDetailsResponse, organizationUserResetPasswordDetailsResponse,
); );

View File

@@ -1,5 +1,7 @@
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service"; import {
import { OrganizationUserResetPasswordDetailsResponse } from "@bitwarden/common/admin-console/abstractions/organization-user/responses"; OrganizationUserApiService,
OrganizationUserResetPasswordDetailsResponse,
} from "@bitwarden/admin-console/common";
import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service";
import { Utils } from "@bitwarden/common/platform/misc/utils"; import { Utils } from "@bitwarden/common/platform/misc/utils";
import { EncString } from "@bitwarden/common/platform/models/domain/enc-string"; import { EncString } from "@bitwarden/common/platform/models/domain/enc-string";
@@ -13,7 +15,7 @@ export class OrganizationAuthRequestService {
constructor( constructor(
private organizationAuthRequestApiService: OrganizationAuthRequestApiService, private organizationAuthRequestApiService: OrganizationAuthRequestApiService,
private cryptoService: CryptoService, private cryptoService: CryptoService,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
) {} ) {}
async listPendingRequests(organizationId: string): Promise<PendingAuthRequestView[]> { async listPendingRequests(organizationId: string): Promise<PendingAuthRequestView[]> {
@@ -30,7 +32,7 @@ export class OrganizationAuthRequestService {
): Promise<void> { ): Promise<void> {
const organizationUserIds = authRequests.map((r) => r.organizationUserId); const organizationUserIds = authRequests.map((r) => r.organizationUserId);
const details = const details =
await this.organizationUserService.getManyOrganizationUserAccountRecoveryDetails( await this.organizationUserApiService.getManyOrganizationUserAccountRecoveryDetails(
organizationId, organizationId,
organizationUserIds, organizationUserIds,
); );
@@ -61,7 +63,7 @@ export class OrganizationAuthRequestService {
} }
async approvePendingRequest(organizationId: string, authRequest: PendingAuthRequestView) { async approvePendingRequest(organizationId: string, authRequest: PendingAuthRequestView) {
const details = await this.organizationUserService.getOrganizationUserResetPasswordDetails( const details = await this.organizationUserApiService.getOrganizationUserResetPasswordDetails(
organizationId, organizationId,
authRequest.organizationUserId, authRequest.organizationUserId,
); );

View File

@@ -5,7 +5,7 @@
"compilerOptions": { "compilerOptions": {
"baseUrl": ".", "baseUrl": ".",
"paths": { "paths": {
"@bitwarden/admin-console": ["../../libs/admin-console/src"], "@bitwarden/admin-console/common": ["../../libs/admin-console/src/common"],
"@bitwarden/angular/*": ["../../libs/angular/src/*"], "@bitwarden/angular/*": ["../../libs/angular/src/*"],
"@bitwarden/auth": ["../../libs/auth/src"], "@bitwarden/auth": ["../../libs/auth/src"],
"@bitwarden/billing": ["../../libs/billing/src"], "@bitwarden/billing": ["../../libs/billing/src"],

View File

@@ -2,12 +2,12 @@ import { Component, OnDestroy, OnInit } from "@angular/core";
import { ActivatedRoute } from "@angular/router"; import { ActivatedRoute } from "@angular/router";
import { BehaviorSubject, Subject, switchMap, takeUntil, tap } from "rxjs"; import { BehaviorSubject, Subject, switchMap, takeUntil, tap } from "rxjs";
import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
import { SafeProvider, safeProvider } from "@bitwarden/angular/platform/utils/safe-provider"; import { SafeProvider, safeProvider } from "@bitwarden/angular/platform/utils/safe-provider";
import { OrganizationAuthRequestApiService } from "@bitwarden/bit-common/admin-console/auth-requests/organization-auth-request-api.service"; import { OrganizationAuthRequestApiService } from "@bitwarden/bit-common/admin-console/auth-requests/organization-auth-request-api.service";
import { OrganizationAuthRequestService } from "@bitwarden/bit-common/admin-console/auth-requests/organization-auth-request.service"; import { OrganizationAuthRequestService } from "@bitwarden/bit-common/admin-console/auth-requests/organization-auth-request.service";
import { PendingAuthRequestView } from "@bitwarden/bit-common/admin-console/auth-requests/pending-auth-request.view"; import { PendingAuthRequestView } from "@bitwarden/bit-common/admin-console/auth-requests/pending-auth-request.view";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service";
import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
@@ -30,7 +30,7 @@ import { SharedModule } from "@bitwarden/web-vault/app/shared/shared.module";
}), }),
safeProvider({ safeProvider({
provide: OrganizationAuthRequestService, provide: OrganizationAuthRequestService,
deps: [OrganizationAuthRequestApiService, CryptoService, OrganizationUserService], deps: [OrganizationAuthRequestApiService, CryptoService, OrganizationUserApiService],
}), }),
] satisfies SafeProvider[], ] satisfies SafeProvider[],
imports: [SharedModule, NoItemsModule, LooseComponentsModule], imports: [SharedModule, NoItemsModule, LooseComponentsModule],

View File

@@ -1,11 +1,11 @@
import { DIALOG_DATA, DialogConfig } from "@angular/cdk/dialog"; import { DIALOG_DATA, DialogConfig } from "@angular/cdk/dialog";
import { Component, Inject } from "@angular/core"; import { Component, Inject } from "@angular/core";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { import {
OrganizationUserBulkPublicKeyResponse, OrganizationUserBulkPublicKeyResponse,
OrganizationUserBulkResponse, OrganizationUserBulkResponse,
} from "@bitwarden/common/admin-console/abstractions/organization-user/responses"; } from "@bitwarden/admin-console/common";
import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { ProviderUserStatusType } from "@bitwarden/common/admin-console/enums"; import { ProviderUserStatusType } from "@bitwarden/common/admin-console/enums";
import { ProviderUserBulkConfirmRequest } from "@bitwarden/common/admin-console/models/request/provider/provider-user-bulk-confirm.request"; import { ProviderUserBulkConfirmRequest } from "@bitwarden/common/admin-console/models/request/provider/provider-user-bulk-confirm.request";
import { ProviderUserBulkRequest } from "@bitwarden/common/admin-console/models/request/provider/provider-user-bulk.request"; import { ProviderUserBulkRequest } from "@bitwarden/common/admin-console/models/request/provider/provider-user-bulk.request";

View File

@@ -5,7 +5,7 @@
"module": "ES2020", "module": "ES2020",
"resolveJsonModule": true, "resolveJsonModule": true,
"paths": { "paths": {
"@bitwarden/admin-console": ["../../libs/admin-console/src"], "@bitwarden/admin-console/common": ["../../libs/admin-console/src/common"],
"@bitwarden/angular/*": ["../../libs/angular/src/*"], "@bitwarden/angular/*": ["../../libs/angular/src/*"],
"@bitwarden/auth/common": ["../../libs/auth/src/common"], "@bitwarden/auth/common": ["../../libs/auth/src/common"],
"@bitwarden/auth/angular": ["../../libs/auth/src/angular"], "@bitwarden/auth/angular": ["../../libs/auth/src/angular"],

View File

@@ -0,0 +1 @@
export * from "./organization-user";

View File

@@ -0,0 +1 @@
export * from "./organization-user-api.service";

View File

@@ -1,4 +1,4 @@
import { ListResponse } from "../../../models/response/list.response"; import { ListResponse } from "@bitwarden/common/models/response/list.response";
import { import {
OrganizationUserAcceptInitRequest, OrganizationUserAcceptInitRequest,
@@ -9,19 +9,19 @@ import {
OrganizationUserResetPasswordEnrollmentRequest, OrganizationUserResetPasswordEnrollmentRequest,
OrganizationUserResetPasswordRequest, OrganizationUserResetPasswordRequest,
OrganizationUserUpdateRequest, OrganizationUserUpdateRequest,
} from "./requests"; } from "../models/requests";
import { import {
OrganizationUserBulkPublicKeyResponse, OrganizationUserBulkPublicKeyResponse,
OrganizationUserBulkResponse, OrganizationUserBulkResponse,
OrganizationUserDetailsResponse, OrganizationUserDetailsResponse,
OrganizationUserResetPasswordDetailsResponse, OrganizationUserResetPasswordDetailsResponse,
OrganizationUserUserDetailsResponse, OrganizationUserUserDetailsResponse,
} from "./responses"; } from "../models/responses";
/** /**
* Service for interacting with Organization Users via the API * Service for interacting with Organization Users via the API
*/ */
export abstract class OrganizationUserService { export abstract class OrganizationUserApiService {
/** /**
* Retrieve a single organization user by Id * Retrieve a single organization user by Id
* @param organizationId - Identifier for the user's organization * @param organizationId - Identifier for the user's organization

View File

@@ -0,0 +1,3 @@
export * from "./abstractions";
export * from "./services";
export * from "./models";

View File

@@ -0,0 +1,2 @@
export * from "./requests";
export * from "./responses";

View File

@@ -6,3 +6,4 @@ export * from "./organization-user-invite.request";
export * from "./organization-user-reset-password.request"; export * from "./organization-user-reset-password.request";
export * from "./organization-user-reset-password-enrollment.request"; export * from "./organization-user-reset-password-enrollment.request";
export * from "./organization-user-update.request"; export * from "./organization-user-update.request";
export * from "./organization-user-bulk.request";

View File

@@ -1,4 +1,4 @@
import { OrganizationKeysRequest } from "../../../models/request/organization-keys.request"; import { OrganizationKeysRequest } from "@bitwarden/common/admin-console/models/request/organization-keys.request";
export class OrganizationUserAcceptInitRequest { export class OrganizationUserAcceptInitRequest {
token: string; token: string;

View File

@@ -0,0 +1,12 @@
import { OrganizationUserType } from "@bitwarden/common/admin-console/enums";
import { PermissionsApi } from "@bitwarden/common/admin-console/models/api/permissions.api";
import { SelectionReadOnlyRequest } from "@bitwarden/common/admin-console/models/request/selection-read-only.request";
export class OrganizationUserInviteRequest {
emails: string[] = [];
type: OrganizationUserType;
accessSecretsManager: boolean;
collections: SelectionReadOnlyRequest[] = [];
groups: string[];
permissions: PermissionsApi;
}

View File

@@ -1,4 +1,4 @@
import { SecretVerificationRequest } from "../../../../auth/models/request/secret-verification.request"; import { SecretVerificationRequest } from "@bitwarden/common/auth/models/request/secret-verification.request";
export class OrganizationUserResetPasswordEnrollmentRequest extends SecretVerificationRequest { export class OrganizationUserResetPasswordEnrollmentRequest extends SecretVerificationRequest {
resetPasswordKey: string; resetPasswordKey: string;

View File

@@ -0,0 +1,11 @@
import { OrganizationUserType } from "@bitwarden/common/admin-console/enums";
import { PermissionsApi } from "@bitwarden/common/admin-console/models/api/permissions.api";
import { SelectionReadOnlyRequest } from "@bitwarden/common/admin-console/models/request/selection-read-only.request";
export class OrganizationUserUpdateRequest {
type: OrganizationUserType;
accessSecretsManager: boolean;
collections: SelectionReadOnlyRequest[] = [];
groups: string[] = [];
permissions: PermissionsApi;
}

View File

@@ -1,4 +1,4 @@
import { BaseResponse } from "../../../../models/response/base.response"; import { BaseResponse } from "@bitwarden/common/models/response/base.response";
export class OrganizationUserBulkPublicKeyResponse extends BaseResponse { export class OrganizationUserBulkPublicKeyResponse extends BaseResponse {
id: string; id: string;

View File

@@ -1,4 +1,4 @@
import { BaseResponse } from "../../../../models/response/base.response"; import { BaseResponse } from "@bitwarden/common/models/response/base.response";
export class OrganizationUserBulkResponse extends BaseResponse { export class OrganizationUserBulkResponse extends BaseResponse {
id: string; id: string;

View File

@@ -1,8 +1,11 @@
import { BaseResponse } from "../../../../models/response/base.response"; import {
import { KdfType } from "../../../../platform/enums"; OrganizationUserStatusType,
import { OrganizationUserStatusType, OrganizationUserType } from "../../../enums"; OrganizationUserType,
import { PermissionsApi } from "../../../models/api/permissions.api"; } from "@bitwarden/common/admin-console/enums";
import { SelectionReadOnlyResponse } from "../../../models/response/selection-read-only.response"; import { PermissionsApi } from "@bitwarden/common/admin-console/models/api/permissions.api";
import { SelectionReadOnlyResponse } from "@bitwarden/common/admin-console/models/response/selection-read-only.response";
import { BaseResponse } from "@bitwarden/common/models/response/base.response";
import { KdfType } from "@bitwarden/common/platform/enums";
export class OrganizationUserResponse extends BaseResponse { export class OrganizationUserResponse extends BaseResponse {
id: string; id: string;

View File

@@ -1,6 +1,7 @@
import { ApiService } from "../../../abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { ListResponse } from "../../../models/response/list.response"; import { ListResponse } from "@bitwarden/common/models/response/list.response";
import { OrganizationUserService } from "../../abstractions/organization-user/organization-user.service";
import { OrganizationUserApiService } from "../abstractions";
import { import {
OrganizationUserAcceptInitRequest, OrganizationUserAcceptInitRequest,
OrganizationUserAcceptRequest, OrganizationUserAcceptRequest,
@@ -10,18 +11,17 @@ import {
OrganizationUserResetPasswordEnrollmentRequest, OrganizationUserResetPasswordEnrollmentRequest,
OrganizationUserResetPasswordRequest, OrganizationUserResetPasswordRequest,
OrganizationUserUpdateRequest, OrganizationUserUpdateRequest,
} from "../../abstractions/organization-user/requests"; OrganizationUserBulkRequest,
} from "../models/requests";
import { import {
OrganizationUserBulkPublicKeyResponse, OrganizationUserBulkPublicKeyResponse,
OrganizationUserBulkResponse, OrganizationUserBulkResponse,
OrganizationUserDetailsResponse, OrganizationUserDetailsResponse,
OrganizationUserResetPasswordDetailsResponse, OrganizationUserResetPasswordDetailsResponse,
OrganizationUserUserDetailsResponse, OrganizationUserUserDetailsResponse,
} from "../../abstractions/organization-user/responses"; } from "../models/responses";
import { OrganizationUserBulkRequest } from "./requests"; export class DefaultOrganizationUserApiService implements OrganizationUserApiService {
export class OrganizationUserServiceImplementation implements OrganizationUserService {
constructor(private apiService: ApiService) {} constructor(private apiService: ApiService) {}
async getOrganizationUser( async getOrganizationUser(

View File

@@ -0,0 +1 @@
export * from "./default-organization-user-api.service";

View File

@@ -17,6 +17,7 @@ import {
take, take,
} from "rxjs"; } from "rxjs";
import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
import { import {
LoginEmailServiceAbstraction, LoginEmailServiceAbstraction,
UserDecryptionOptions, UserDecryptionOptions,
@@ -24,7 +25,6 @@ import {
} from "@bitwarden/auth/common"; } from "@bitwarden/auth/common";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { DeviceTrustServiceAbstraction } from "@bitwarden/common/auth/abstractions/device-trust.service.abstraction"; import { DeviceTrustServiceAbstraction } from "@bitwarden/common/auth/abstractions/device-trust.service.abstraction";
import { DevicesServiceAbstraction } from "@bitwarden/common/auth/abstractions/devices/devices.service.abstraction"; import { DevicesServiceAbstraction } from "@bitwarden/common/auth/abstractions/devices/devices.service.abstraction";
@@ -95,7 +95,7 @@ export class BaseLoginDecryptionOptionsComponent implements OnInit, OnDestroy {
protected loginEmailService: LoginEmailServiceAbstraction, protected loginEmailService: LoginEmailServiceAbstraction,
protected organizationApiService: OrganizationApiServiceAbstraction, protected organizationApiService: OrganizationApiServiceAbstraction,
protected cryptoService: CryptoService, protected cryptoService: CryptoService,
protected organizationUserService: OrganizationUserService, protected organizationUserApiService: OrganizationUserApiService,
protected apiService: ApiService, protected apiService: ApiService,
protected i18nService: I18nService, protected i18nService: I18nService,
protected validationService: ValidationService, protected validationService: ValidationService,

View File

@@ -3,11 +3,13 @@ import { ActivatedRoute, Router } from "@angular/router";
import { firstValueFrom, of } from "rxjs"; import { firstValueFrom, of } from "rxjs";
import { filter, first, switchMap, tap } from "rxjs/operators"; import { filter, first, switchMap, tap } from "rxjs/operators";
import {
OrganizationUserApiService,
OrganizationUserResetPasswordEnrollmentRequest,
} from "@bitwarden/admin-console/common";
import { InternalUserDecryptionOptionsServiceAbstraction } from "@bitwarden/auth/common"; import { InternalUserDecryptionOptionsServiceAbstraction } from "@bitwarden/auth/common";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { OrganizationUserResetPasswordEnrollmentRequest } from "@bitwarden/common/admin-console/abstractions/organization-user/requests";
import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction";
import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction";
import { MasterPasswordPolicyOptions } from "@bitwarden/common/admin-console/models/domain/master-password-policy-options"; import { MasterPasswordPolicyOptions } from "@bitwarden/common/admin-console/models/domain/master-password-policy-options";
@@ -68,7 +70,7 @@ export class SetPasswordComponent extends BaseChangePasswordComponent implements
private route: ActivatedRoute, private route: ActivatedRoute,
stateService: StateService, stateService: StateService,
private organizationApiService: OrganizationApiServiceAbstraction, private organizationApiService: OrganizationApiServiceAbstraction,
private organizationUserService: OrganizationUserService, private organizationUserApiService: OrganizationUserApiService,
private userDecryptionOptionsService: InternalUserDecryptionOptionsServiceAbstraction, private userDecryptionOptionsService: InternalUserDecryptionOptionsServiceAbstraction,
private ssoLoginService: SsoLoginServiceAbstraction, private ssoLoginService: SsoLoginServiceAbstraction,
dialogService: DialogService, dialogService: DialogService,
@@ -219,7 +221,7 @@ export class SetPasswordComponent extends BaseChangePasswordComponent implements
resetRequest.masterPasswordHash = masterPasswordHash; resetRequest.masterPasswordHash = masterPasswordHash;
resetRequest.resetPasswordKey = encryptedUserKey.encryptedString; resetRequest.resetPasswordKey = encryptedUserKey.encryptedString;
return this.organizationUserService.putOrganizationUserResetPasswordEnrollment( return this.organizationUserApiService.putOrganizationUserResetPasswordEnrollment(
this.orgId, this.orgId,
this.userId, this.userId,
resetRequest, resetRequest,

View File

@@ -1,6 +1,10 @@
import { ErrorHandler, LOCALE_ID, NgModule } from "@angular/core"; import { ErrorHandler, LOCALE_ID, NgModule } from "@angular/core";
import { Subject } from "rxjs"; import { Subject } from "rxjs";
import {
OrganizationUserApiService,
DefaultOrganizationUserApiService,
} from "@bitwarden/admin-console/common";
import { import {
SetPasswordJitService, SetPasswordJitService,
DefaultSetPasswordJitService, DefaultSetPasswordJitService,
@@ -43,7 +47,6 @@ import {
OrgDomainServiceAbstraction, OrgDomainServiceAbstraction,
} from "@bitwarden/common/admin-console/abstractions/organization-domain/org-domain.service.abstraction"; } from "@bitwarden/common/admin-console/abstractions/organization-domain/org-domain.service.abstraction";
import { OrganizationManagementPreferencesService } from "@bitwarden/common/admin-console/abstractions/organization-management-preferences/organization-management-preferences.service"; import { OrganizationManagementPreferencesService } from "@bitwarden/common/admin-console/abstractions/organization-management-preferences/organization-management-preferences.service";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction";
import { import {
InternalPolicyService, InternalPolicyService,
@@ -56,7 +59,6 @@ import { OrganizationService } from "@bitwarden/common/admin-console/services/or
import { OrgDomainApiService } from "@bitwarden/common/admin-console/services/organization-domain/org-domain-api.service"; import { OrgDomainApiService } from "@bitwarden/common/admin-console/services/organization-domain/org-domain-api.service";
import { OrgDomainService } from "@bitwarden/common/admin-console/services/organization-domain/org-domain.service"; import { OrgDomainService } from "@bitwarden/common/admin-console/services/organization-domain/org-domain.service";
import { DefaultOrganizationManagementPreferencesService } from "@bitwarden/common/admin-console/services/organization-management-preferences/default-organization-management-preferences.service"; import { DefaultOrganizationManagementPreferencesService } from "@bitwarden/common/admin-console/services/organization-management-preferences/default-organization-management-preferences.service";
import { OrganizationUserServiceImplementation } from "@bitwarden/common/admin-console/services/organization-user/organization-user.service.implementation";
import { PolicyApiService } from "@bitwarden/common/admin-console/services/policy/policy-api.service"; import { PolicyApiService } from "@bitwarden/common/admin-console/services/policy/policy-api.service";
import { PolicyService } from "@bitwarden/common/admin-console/services/policy/policy.service"; import { PolicyService } from "@bitwarden/common/admin-console/services/policy/policy.service";
import { ProviderApiService } from "@bitwarden/common/admin-console/services/provider/provider-api.service"; import { ProviderApiService } from "@bitwarden/common/admin-console/services/provider/provider-api.service";
@@ -934,8 +936,8 @@ const safeProviders: SafeProvider[] = [
useExisting: InternalOrganizationServiceAbstraction, useExisting: InternalOrganizationServiceAbstraction,
}), }),
safeProvider({ safeProvider({
provide: OrganizationUserService, provide: OrganizationUserApiService,
useClass: OrganizationUserServiceImplementation, useClass: DefaultOrganizationUserApiService,
deps: [ApiServiceAbstraction], deps: [ApiServiceAbstraction],
}), }),
safeProvider({ safeProvider({
@@ -945,7 +947,7 @@ const safeProviders: SafeProvider[] = [
OrganizationApiServiceAbstraction, OrganizationApiServiceAbstraction,
AccountServiceAbstraction, AccountServiceAbstraction,
CryptoServiceAbstraction, CryptoServiceAbstraction,
OrganizationUserService, OrganizationUserApiService,
I18nServiceAbstraction, I18nServiceAbstraction,
], ],
}), }),
@@ -1273,7 +1275,7 @@ const safeProviders: SafeProvider[] = [
KdfConfigServiceAbstraction, KdfConfigServiceAbstraction,
InternalMasterPasswordServiceAbstraction, InternalMasterPasswordServiceAbstraction,
OrganizationApiServiceAbstraction, OrganizationApiServiceAbstraction,
OrganizationUserService, OrganizationUserApiService,
InternalUserDecryptionOptionsServiceAbstraction, InternalUserDecryptionOptionsServiceAbstraction,
], ],
}), }),

View File

@@ -1,13 +1,13 @@
import { MockProxy, mock } from "jest-mock-extended"; import { MockProxy, mock } from "jest-mock-extended";
import { BehaviorSubject, of } from "rxjs"; import { BehaviorSubject, of } from "rxjs";
import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
import { import {
FakeUserDecryptionOptions as UserDecryptionOptions, FakeUserDecryptionOptions as UserDecryptionOptions,
InternalUserDecryptionOptionsServiceAbstraction, InternalUserDecryptionOptionsServiceAbstraction,
} from "@bitwarden/auth/common"; } from "@bitwarden/auth/common";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { OrganizationKeysResponse } from "@bitwarden/common/admin-console/models/response/organization-keys.response"; import { OrganizationKeysResponse } from "@bitwarden/common/admin-console/models/response/organization-keys.response";
import { KdfConfigService } from "@bitwarden/common/auth/abstractions/kdf-config.service"; import { KdfConfigService } from "@bitwarden/common/auth/abstractions/kdf-config.service";
import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/auth/abstractions/master-password.service.abstraction"; import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/auth/abstractions/master-password.service.abstraction";
@@ -37,7 +37,7 @@ describe("DefaultSetPasswordJitService", () => {
let kdfConfigService: MockProxy<KdfConfigService>; let kdfConfigService: MockProxy<KdfConfigService>;
let masterPasswordService: MockProxy<InternalMasterPasswordServiceAbstraction>; let masterPasswordService: MockProxy<InternalMasterPasswordServiceAbstraction>;
let organizationApiService: MockProxy<OrganizationApiServiceAbstraction>; let organizationApiService: MockProxy<OrganizationApiServiceAbstraction>;
let organizationUserService: MockProxy<OrganizationUserService>; let organizationUserApiService: MockProxy<OrganizationUserApiService>;
let userDecryptionOptionsService: MockProxy<InternalUserDecryptionOptionsServiceAbstraction>; let userDecryptionOptionsService: MockProxy<InternalUserDecryptionOptionsServiceAbstraction>;
beforeEach(() => { beforeEach(() => {
@@ -47,7 +47,7 @@ describe("DefaultSetPasswordJitService", () => {
kdfConfigService = mock<KdfConfigService>(); kdfConfigService = mock<KdfConfigService>();
masterPasswordService = mock<InternalMasterPasswordServiceAbstraction>(); masterPasswordService = mock<InternalMasterPasswordServiceAbstraction>();
organizationApiService = mock<OrganizationApiServiceAbstraction>(); organizationApiService = mock<OrganizationApiServiceAbstraction>();
organizationUserService = mock<OrganizationUserService>(); organizationUserApiService = mock<OrganizationUserApiService>();
userDecryptionOptionsService = mock<InternalUserDecryptionOptionsServiceAbstraction>(); userDecryptionOptionsService = mock<InternalUserDecryptionOptionsServiceAbstraction>();
sut = new DefaultSetPasswordJitService( sut = new DefaultSetPasswordJitService(
@@ -57,7 +57,7 @@ describe("DefaultSetPasswordJitService", () => {
kdfConfigService, kdfConfigService,
masterPasswordService, masterPasswordService,
organizationApiService, organizationApiService,
organizationUserService, organizationUserApiService,
userDecryptionOptionsService, userDecryptionOptionsService,
); );
}); });
@@ -170,7 +170,7 @@ describe("DefaultSetPasswordJitService", () => {
cryptoService.userKey$.mockReturnValue(of(userKey)); cryptoService.userKey$.mockReturnValue(of(userKey));
cryptoService.rsaEncrypt.mockResolvedValue(userKeyEncString); cryptoService.rsaEncrypt.mockResolvedValue(userKeyEncString);
organizationUserService.putOrganizationUserResetPasswordEnrollment.mockResolvedValue( organizationUserApiService.putOrganizationUserResetPasswordEnrollment.mockResolvedValue(
undefined, undefined,
); );
} }
@@ -211,7 +211,9 @@ describe("DefaultSetPasswordJitService", () => {
expect(apiService.setPassword).toHaveBeenCalledWith(setPasswordRequest); expect(apiService.setPassword).toHaveBeenCalledWith(setPasswordRequest);
expect(organizationApiService.getKeys).toHaveBeenCalledWith(orgId); expect(organizationApiService.getKeys).toHaveBeenCalledWith(orgId);
expect(cryptoService.rsaEncrypt).toHaveBeenCalledWith(userKey.key, orgPublicKey); expect(cryptoService.rsaEncrypt).toHaveBeenCalledWith(userKey.key, orgPublicKey);
expect(organizationUserService.putOrganizationUserResetPasswordEnrollment).toHaveBeenCalled(); expect(
organizationUserApiService.putOrganizationUserResetPasswordEnrollment,
).toHaveBeenCalled();
}); });
it("when handling reset password auto enroll, it should throw an error if organization keys are not found", async () => { it("when handling reset password auto enroll, it should throw an error if organization keys are not found", async () => {
@@ -224,7 +226,7 @@ describe("DefaultSetPasswordJitService", () => {
// Act and Assert // Act and Assert
await expect(sut.setPassword(credentials)).rejects.toThrow(); await expect(sut.setPassword(credentials)).rejects.toThrow();
expect( expect(
organizationUserService.putOrganizationUserResetPasswordEnrollment, organizationUserApiService.putOrganizationUserResetPasswordEnrollment,
).not.toHaveBeenCalled(); ).not.toHaveBeenCalled();
}); });
}); });

View File

@@ -1,10 +1,12 @@
import { firstValueFrom } from "rxjs"; import { firstValueFrom } from "rxjs";
import {
OrganizationUserApiService,
OrganizationUserResetPasswordEnrollmentRequest,
} from "@bitwarden/admin-console/common";
import { InternalUserDecryptionOptionsServiceAbstraction } from "@bitwarden/auth/common"; import { InternalUserDecryptionOptionsServiceAbstraction } from "@bitwarden/auth/common";
import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction";
import { OrganizationUserService } from "@bitwarden/common/admin-console/abstractions/organization-user/organization-user.service";
import { OrganizationUserResetPasswordEnrollmentRequest } from "@bitwarden/common/admin-console/abstractions/organization-user/requests";
import { KdfConfigService } from "@bitwarden/common/auth/abstractions/kdf-config.service"; import { KdfConfigService } from "@bitwarden/common/auth/abstractions/kdf-config.service";
import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/auth/abstractions/master-password.service.abstraction"; import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/auth/abstractions/master-password.service.abstraction";
import { ForceSetPasswordReason } from "@bitwarden/common/auth/models/domain/force-set-password-reason"; import { ForceSetPasswordReason } from "@bitwarden/common/auth/models/domain/force-set-password-reason";
@@ -31,7 +33,7 @@ export class DefaultSetPasswordJitService implements SetPasswordJitService {
protected kdfConfigService: KdfConfigService, protected kdfConfigService: KdfConfigService,
protected masterPasswordService: InternalMasterPasswordServiceAbstraction, protected masterPasswordService: InternalMasterPasswordServiceAbstraction,
protected organizationApiService: OrganizationApiServiceAbstraction, protected organizationApiService: OrganizationApiServiceAbstraction,
protected organizationUserService: OrganizationUserService, protected organizationUserApiService: OrganizationUserApiService,
protected userDecryptionOptionsService: InternalUserDecryptionOptionsServiceAbstraction, protected userDecryptionOptionsService: InternalUserDecryptionOptionsServiceAbstraction,
) {} ) {}
@@ -161,7 +163,7 @@ export class DefaultSetPasswordJitService implements SetPasswordJitService {
resetRequest.masterPasswordHash = masterKeyHash; resetRequest.masterPasswordHash = masterKeyHash;
resetRequest.resetPasswordKey = encryptedUserKey.encryptedString; resetRequest.resetPasswordKey = encryptedUserKey.encryptedString;
await this.organizationUserService.putOrganizationUserResetPasswordEnrollment( await this.organizationUserApiService.putOrganizationUserResetPasswordEnrollment(
orgId, orgId,
userId, userId,
resetRequest, resetRequest,

View File

@@ -1,12 +0,0 @@
import { OrganizationUserType } from "../../../enums";
import { PermissionsApi } from "../../../models/api/permissions.api";
import { SelectionReadOnlyRequest } from "../../../models/request/selection-read-only.request";
export class OrganizationUserInviteRequest {
emails: string[] = [];
type: OrganizationUserType;
accessSecretsManager: boolean;
collections: SelectionReadOnlyRequest[] = [];
groups: string[];
permissions: PermissionsApi;
}

View File

@@ -1,11 +0,0 @@
import { OrganizationUserType } from "../../../enums";
import { PermissionsApi } from "../../../models/api/permissions.api";
import { SelectionReadOnlyRequest } from "../../../models/request/selection-read-only.request";
export class OrganizationUserUpdateRequest {
type: OrganizationUserType;
accessSecretsManager: boolean;
collections: SelectionReadOnlyRequest[] = [];
groups: string[] = [];
permissions: PermissionsApi;
}

View File

@@ -1,3 +1,3 @@
import { OrganizationUserBulkPublicKeyResponse } from "../../../abstractions/organization-user/responses"; import { OrganizationUserBulkPublicKeyResponse } from "@bitwarden/admin-console/common";
export class ProviderUserBulkPublicKeyResponse extends OrganizationUserBulkPublicKeyResponse {} export class ProviderUserBulkPublicKeyResponse extends OrganizationUserBulkPublicKeyResponse {}

View File

@@ -1 +0,0 @@
export * from "./organization-user-bulk.request";

View File

@@ -1,4 +1,4 @@
import { OrganizationUserResetPasswordRequest } from "../../../admin-console/abstractions/organization-user/requests"; import { OrganizationUserResetPasswordRequest } from "@bitwarden/admin-console/common";
export class UpdateTdeOffboardingPasswordRequest extends OrganizationUserResetPasswordRequest { export class UpdateTdeOffboardingPasswordRequest extends OrganizationUserResetPasswordRequest {
masterPasswordHint: string; masterPasswordHint: string;

View File

@@ -1,4 +1,4 @@
import { OrganizationUserResetPasswordRequest } from "../../../admin-console/abstractions/organization-user/requests"; import { OrganizationUserResetPasswordRequest } from "@bitwarden/admin-console/common";
export class UpdateTempPasswordRequest extends OrganizationUserResetPasswordRequest { export class UpdateTempPasswordRequest extends OrganizationUserResetPasswordRequest {
masterPasswordHint: string; masterPasswordHint: string;

View File

@@ -1,9 +1,10 @@
import { mock, MockProxy } from "jest-mock-extended"; import { mock, MockProxy } from "jest-mock-extended";
import { BehaviorSubject } from "rxjs"; import { BehaviorSubject } from "rxjs";
import { OrganizationUserApiService } from "@bitwarden/admin-console/common";
import { UserId } from "../../../../common/src/types/guid"; import { UserId } from "../../../../common/src/types/guid";
import { OrganizationApiServiceAbstraction } from "../../admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationApiServiceAbstraction } from "../../admin-console/abstractions/organization/organization-api.service.abstraction";
import { OrganizationUserService } from "../../admin-console/abstractions/organization-user/organization-user.service";
import { OrganizationAutoEnrollStatusResponse } from "../../admin-console/models/response/organization-auto-enroll-status.response"; import { OrganizationAutoEnrollStatusResponse } from "../../admin-console/models/response/organization-auto-enroll-status.response";
import { CryptoService } from "../../platform/abstractions/crypto.service"; import { CryptoService } from "../../platform/abstractions/crypto.service";
import { I18nService } from "../../platform/abstractions/i18n.service"; import { I18nService } from "../../platform/abstractions/i18n.service";
@@ -17,7 +18,7 @@ describe("PasswordResetEnrollmentServiceImplementation", () => {
let organizationApiService: MockProxy<OrganizationApiServiceAbstraction>; let organizationApiService: MockProxy<OrganizationApiServiceAbstraction>;
let accountService: MockProxy<AccountService>; let accountService: MockProxy<AccountService>;
let cryptoService: MockProxy<CryptoService>; let cryptoService: MockProxy<CryptoService>;
let organizationUserService: MockProxy<OrganizationUserService>; let organizationUserApiService: MockProxy<OrganizationUserApiService>;
let i18nService: MockProxy<I18nService>; let i18nService: MockProxy<I18nService>;
let service: PasswordResetEnrollmentServiceImplementation; let service: PasswordResetEnrollmentServiceImplementation;
@@ -26,13 +27,13 @@ describe("PasswordResetEnrollmentServiceImplementation", () => {
accountService = mock<AccountService>(); accountService = mock<AccountService>();
accountService.activeAccount$ = activeAccountSubject; accountService.activeAccount$ = activeAccountSubject;
cryptoService = mock<CryptoService>(); cryptoService = mock<CryptoService>();
organizationUserService = mock<OrganizationUserService>(); organizationUserApiService = mock<OrganizationUserApiService>();
i18nService = mock<I18nService>(); i18nService = mock<I18nService>();
service = new PasswordResetEnrollmentServiceImplementation( service = new PasswordResetEnrollmentServiceImplementation(
organizationApiService, organizationApiService,
accountService, accountService,
cryptoService, cryptoService,
organizationUserService, organizationUserApiService,
i18nService, i18nService,
); );
}); });
@@ -100,7 +101,7 @@ describe("PasswordResetEnrollmentServiceImplementation", () => {
await service.enroll("orgId"); await service.enroll("orgId");
expect( expect(
organizationUserService.putOrganizationUserResetPasswordEnrollment, organizationUserApiService.putOrganizationUserResetPasswordEnrollment,
).toHaveBeenCalledWith( ).toHaveBeenCalledWith(
"orgId", "orgId",
"userId", "userId",
@@ -122,7 +123,7 @@ describe("PasswordResetEnrollmentServiceImplementation", () => {
await service.enroll("orgId", "userId", { key: "key" } as any); await service.enroll("orgId", "userId", { key: "key" } as any);
expect( expect(
organizationUserService.putOrganizationUserResetPasswordEnrollment, organizationUserApiService.putOrganizationUserResetPasswordEnrollment,
).toHaveBeenCalledWith( ).toHaveBeenCalledWith(
"orgId", "orgId",
"userId", "userId",

View File

@@ -1,8 +1,11 @@
import { firstValueFrom, map } from "rxjs"; import { firstValueFrom, map } from "rxjs";
import {
OrganizationUserApiService,
OrganizationUserResetPasswordEnrollmentRequest,
} from "@bitwarden/admin-console/common";
import { OrganizationApiServiceAbstraction } from "../../admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationApiServiceAbstraction } from "../../admin-console/abstractions/organization/organization-api.service.abstraction";
import { OrganizationUserService } from "../../admin-console/abstractions/organization-user/organization-user.service";
import { OrganizationUserResetPasswordEnrollmentRequest } from "../../admin-console/abstractions/organization-user/requests";
import { CryptoService } from "../../platform/abstractions/crypto.service"; import { CryptoService } from "../../platform/abstractions/crypto.service";
import { I18nService } from "../../platform/abstractions/i18n.service"; import { I18nService } from "../../platform/abstractions/i18n.service";
import { Utils } from "../../platform/misc/utils"; import { Utils } from "../../platform/misc/utils";
@@ -17,7 +20,7 @@ export class PasswordResetEnrollmentServiceImplementation
protected organizationApiService: OrganizationApiServiceAbstraction, protected organizationApiService: OrganizationApiServiceAbstraction,
protected accountService: AccountService, protected accountService: AccountService,
protected cryptoService: CryptoService, protected cryptoService: CryptoService,
protected organizationUserService: OrganizationUserService, protected organizationUserApiService: OrganizationUserApiService,
protected i18nService: I18nService, protected i18nService: I18nService,
) {} ) {}
@@ -49,7 +52,7 @@ export class PasswordResetEnrollmentServiceImplementation
const resetRequest = new OrganizationUserResetPasswordEnrollmentRequest(); const resetRequest = new OrganizationUserResetPasswordEnrollmentRequest();
resetRequest.resetPasswordKey = encryptedKey.encryptedString; resetRequest.resetPasswordKey = encryptedKey.encryptedString;
await this.organizationUserService.putOrganizationUserResetPasswordEnrollment( await this.organizationUserApiService.putOrganizationUserResetPasswordEnrollment(
organizationId, organizationId,
userId, userId,
resetRequest, resetRequest,

View File

@@ -3,7 +3,7 @@
"compilerOptions": { "compilerOptions": {
"resolveJsonModule": true, "resolveJsonModule": true,
"paths": { "paths": {
"@bitwarden/admin-console": ["../admin-console/src"], "@bitwarden/admin-console/common": ["../admin-console/src/common"],
"@bitwarden/angular/*": ["../angular/src/*"], "@bitwarden/angular/*": ["../angular/src/*"],
"@bitwarden/auth/common": ["../auth/src/common"], "@bitwarden/auth/common": ["../auth/src/common"],
"@bitwarden/auth/angular": ["../auth/src/angular"], "@bitwarden/auth/angular": ["../auth/src/angular"],

View File

@@ -15,7 +15,7 @@
"baseUrl": ".", "baseUrl": ".",
"resolveJsonModule": true, "resolveJsonModule": true,
"paths": { "paths": {
"@bitwarden/admin-console": ["./libs/admin-console/src"], "@bitwarden/admin-console/common": ["./libs/admin-console/src/common"],
"@bitwarden/angular/*": ["./libs/angular/src/*"], "@bitwarden/angular/*": ["./libs/angular/src/*"],
"@bitwarden/auth/common": ["./libs/auth/src/common"], "@bitwarden/auth/common": ["./libs/auth/src/common"],
"@bitwarden/auth/angular": ["./libs/auth/src/angular"], "@bitwarden/auth/angular": ["./libs/auth/src/angular"],