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

[PM-19406] Archive item actions Browser (#13933)

* [PM-19406] Cipher service changes

* [PM-19406] Wire up archive/unarchive actions
This commit is contained in:
Shane Melton
2025-03-20 16:46:18 -07:00
committed by GitHub
parent a146172168
commit 0e90e91f67
7 changed files with 128 additions and 2 deletions

View File

@@ -197,6 +197,8 @@ export abstract class CipherService implements UserKeyRotationDataProvider<Ciphe
): Promise<any>;
abstract restoreWithServer(id: string, userId: UserId, asAdmin?: boolean): Promise<any>;
abstract restoreManyWithServer(ids: string[], orgId?: string): Promise<void>;
abstract archiveWithServer(ids: CipherId | CipherId[], userId: UserId): Promise<void>;
abstract unarchiveWithServer(ids: CipherId | CipherId[], userId: UserId): Promise<void>;
abstract getKeyForCipherKeyDecryption(cipher: Cipher, userId: UserId): Promise<any>;
abstract setAddEditCipherInfo(value: AddEditCipherInfo, userId: UserId): Promise<void>;
/**

View File

@@ -0,0 +1,17 @@
import { CipherId } from "@bitwarden/common/types/guid";
export class CipherBulkArchiveRequest {
ids: CipherId[];
constructor(ids: CipherId[]) {
this.ids = ids == null ? [] : ids;
}
}
export class CipherBulkUnarchiveRequest {
ids: CipherId[];
constructor(ids: CipherId[]) {
this.ids = ids == null ? [] : ids;
}
}

View File

@@ -14,6 +14,10 @@ import {
} from "rxjs";
import { SemVer } from "semver";
import {
CipherBulkArchiveRequest,
CipherBulkUnarchiveRequest,
} from "@bitwarden/common/vault/models/request/cipher-bulk-archive.request";
import { KeyService } from "@bitwarden/key-management";
import { ApiService } from "../../abstractions/api.service";
@@ -1313,6 +1317,46 @@ export class CipherService implements CipherServiceAbstraction {
await this.restore({ id: id, revisionDate: response.revisionDate }, userId);
}
async archiveWithServer(ids: CipherId | CipherId[], userId: UserId): Promise<void> {
const request = new CipherBulkArchiveRequest(Array.isArray(ids) ? ids : [ids]);
const r = await this.apiService.send("PUT", "/ciphers/archive", request, true, true);
const response = new ListResponse(r, CipherResponse);
await this.updateEncryptedCipherState((ciphers) => {
for (const cipher of response.data) {
const localCipher = ciphers[cipher.id as CipherId];
if (localCipher == null) {
continue;
}
localCipher.archivedDate = cipher.archivedDate;
localCipher.revisionDate = cipher.revisionDate;
}
return ciphers;
}, userId);
}
async unarchiveWithServer(ids: CipherId | CipherId[], userId: UserId): Promise<void> {
const request = new CipherBulkUnarchiveRequest(Array.isArray(ids) ? ids : [ids]);
const r = await this.apiService.send("PUT", "/ciphers/unarchive", request, true, true);
const response = new ListResponse(r, CipherResponse);
await this.updateEncryptedCipherState((ciphers) => {
for (const cipher of response.data) {
const localCipher = ciphers[cipher.id as CipherId];
if (localCipher == null) {
continue;
}
localCipher.archivedDate = cipher.archivedDate;
localCipher.revisionDate = cipher.revisionDate;
}
return ciphers;
}, userId);
}
/**
* No longer using an asAdmin Param. Org Vault bulkRestore will assess if an item is unassigned or editable
* The Org Vault will pass those ids an array as well as the orgId when calling bulkRestore