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

[PM-19054] configure send with email otp authentication via cli (#15360)

This commit is contained in:
✨ Audrey ✨
2025-07-22 09:33:34 -04:00
committed by GitHub
parent 2a07b952ef
commit 5290e0a63b
16 changed files with 369 additions and 49 deletions

View File

@@ -21,6 +21,7 @@ export class SendData {
expirationDate: string;
deletionDate: string;
password: string;
emails: string;
disabled: boolean;
hideEmail: boolean;
@@ -41,6 +42,7 @@ export class SendData {
this.expirationDate = response.expirationDate;
this.deletionDate = response.deletionDate;
this.password = response.password;
this.emails = response.emails;
this.disabled = response.disable;
this.hideEmail = response.hideEmail;

View File

@@ -29,14 +29,15 @@ describe("Send", () => {
text: "encText",
hidden: true,
},
file: null,
file: null!,
key: "encKey",
maxAccessCount: null,
maxAccessCount: null!,
accessCount: 10,
revisionDate: "2022-01-31T12:00:00.000Z",
expirationDate: "2022-01-31T12:00:00.000Z",
deletionDate: "2022-01-31T12:00:00.000Z",
password: "password",
emails: null!,
disabled: false,
hideEmail: true,
};
@@ -86,6 +87,7 @@ describe("Send", () => {
expirationDate: new Date("2022-01-31T12:00:00.000Z"),
deletionDate: new Date("2022-01-31T12:00:00.000Z"),
password: "password",
emails: null!,
disabled: false,
hideEmail: true,
});

View File

@@ -27,6 +27,7 @@ export class Send extends Domain {
expirationDate: Date;
deletionDate: Date;
password: string;
emails: string;
disabled: boolean;
hideEmail: boolean;
@@ -53,6 +54,7 @@ export class Send extends Domain {
this.maxAccessCount = obj.maxAccessCount;
this.accessCount = obj.accessCount;
this.password = obj.password;
this.emails = obj.emails;
this.disabled = obj.disabled;
this.revisionDate = obj.revisionDate != null ? new Date(obj.revisionDate) : null;
this.deletionDate = obj.deletionDate != null ? new Date(obj.deletionDate) : null;

View File

@@ -17,6 +17,7 @@ export class SendRequest {
text: SendTextApi;
file: SendFileApi;
password: string;
emails: string;
disabled: boolean;
hideEmail: boolean;
@@ -30,6 +31,7 @@ export class SendRequest {
this.deletionDate = send.deletionDate != null ? send.deletionDate.toISOString() : null;
this.key = send.key != null ? send.key.encryptedString : null;
this.password = send.password;
this.emails = send.emails;
this.disabled = send.disabled;
this.hideEmail = send.hideEmail;

View File

@@ -20,6 +20,7 @@ export class SendResponse extends BaseResponse {
expirationDate: string;
deletionDate: string;
password: string;
emails: string;
disable: boolean;
hideEmail: boolean;
@@ -37,6 +38,7 @@ export class SendResponse extends BaseResponse {
this.expirationDate = this.getResponseProperty("ExpirationDate");
this.deletionDate = this.getResponseProperty("DeletionDate");
this.password = this.getResponseProperty("Password");
this.emails = this.getResponseProperty("Emails");
this.disable = this.getResponseProperty("Disabled") || false;
this.hideEmail = this.getResponseProperty("HideEmail") || false;

View File

@@ -26,6 +26,7 @@ export class SendView implements View {
deletionDate: Date = null;
expirationDate: Date = null;
password: string = null;
emails: string[] = [];
disabled = false;
hideEmail = false;

View File

@@ -74,7 +74,12 @@ export class SendService implements InternalSendServiceAbstraction {
model.key = key.material;
model.cryptoKey = key.derivedKey;
}
if (password != null) {
const hasEmails = (model.emails?.length ?? 0) > 0;
if (hasEmails) {
send.emails = model.emails.join(",");
send.password = null;
} else if (password != null) {
// Note: Despite being called key, the passwordKey is not used for encryption.
// It is used as a static proof that the client knows the password, and has the encryption key.
const passwordKey = await this.keyGenerationService.deriveKeyFromPassword(