1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-06 00:13:28 +00:00

[PM-19383] admins unable to download attachments (#14363)

* add admin support for downloading attachments

* fix delete and upload

* fix delete admin to return a response

* fix upload

* add missing param

* use getCipherAdmin

* fix cli
This commit is contained in:
Brandon Treston
2025-05-05 13:36:49 -04:00
committed by GitHub
parent a408990a3c
commit fd43222938
15 changed files with 72 additions and 16 deletions

View File

@@ -199,6 +199,7 @@ export abstract class ApiService {
attachmentId: string,
emergencyAccessId?: string,
) => Promise<AttachmentResponse>;
getAttachmentDataAdmin: (cipherId: string, attachmentId: string) => Promise<AttachmentResponse>;
getCiphersOrganization: (organizationId: string) => Promise<ListResponse<CipherResponse>>;
postCipher: (request: CipherRequest) => Promise<CipherResponse>;
postCipherCreate: (request: CipherCreateRequest) => Promise<CipherResponse>;

View File

@@ -637,6 +637,15 @@ export class ApiService implements ApiServiceAbstraction {
return new AttachmentResponse(r);
}
async getAttachmentDataAdmin(
cipherId: string,
attachmentId: string,
): Promise<AttachmentResponse> {
const path = "/ciphers/" + cipherId + "/attachment/" + attachmentId + "/admin";
const r = await this.send("GET", path, null, true, true);
return new AttachmentResponse(r);
}
async postCipherAttachment(
id: string,
request: AttachmentRequest,
@@ -673,7 +682,7 @@ export class ApiService implements ApiServiceAbstraction {
"/ciphers/" + id + "/attachment/" + attachmentId + "/admin",
null,
true,
false,
true,
);
}

View File

@@ -184,6 +184,7 @@ export abstract class CipherService implements UserKeyRotationDataProvider<Ciphe
id: string,
attachmentId: string,
userId: UserId,
admin: boolean,
): Promise<CipherData>;
abstract sortCiphersByLastUsed(a: CipherView, b: CipherView): number;
abstract sortCiphersByLastUsedThenName(a: CipherView, b: CipherView): number;

View File

@@ -1120,13 +1120,17 @@ export class CipherService implements CipherServiceAbstraction {
id: string,
attachmentId: string,
userId: UserId,
admin: boolean = false,
): Promise<CipherData> {
let cipherResponse = null;
try {
cipherResponse = await this.apiService.deleteCipherAttachment(id, attachmentId);
cipherResponse = admin
? await this.apiService.deleteCipherAttachmentAdmin(id, attachmentId)
: await this.apiService.deleteCipherAttachment(id, attachmentId);
} catch (e) {
return Promise.reject((e as ErrorResponse).getSingleMessage());
}
const cipherData = CipherData.fromJSON(cipherResponse?.cipher);
return await this.deleteAttachment(id, cipherData.revisionDate, attachmentId, userId);