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

address issues in string handling

This commit is contained in:
jaasen-livefront
2025-11-04 17:14:15 -08:00
parent 07d1d5ba05
commit f5cfee4e6e
4 changed files with 31 additions and 47 deletions

View File

@@ -27,12 +27,12 @@ export class CardExport {
}
static toDomain(req: CardExport, domain = new CardDomain()) {
domain.cardholderName = new EncString(req.cardholderName ?? "");
domain.brand = new EncString(req.brand ?? "");
domain.number = new EncString(req.number ?? "");
domain.expMonth = new EncString(req.expMonth ?? "");
domain.expYear = new EncString(req.expYear ?? "");
domain.code = new EncString(req.code ?? "");
domain.cardholderName = req.cardholderName ? new EncString(req.cardholderName) : undefined;
domain.brand = req.brand ? new EncString(req.brand) : undefined;
domain.number = req.number ? new EncString(req.number) : undefined;
domain.expMonth = req.expMonth ? new EncString(req.expMonth) : undefined;
domain.expYear = req.expYear ? new EncString(req.expYear) : undefined;
domain.code = req.code ? new EncString(req.code) : undefined;
return domain;
}

View File

@@ -51,24 +51,24 @@ export class IdentityExport {
}
static toDomain(req: IdentityExport, domain = new IdentityDomain()) {
domain.title = new EncString(req.title ?? "");
domain.firstName = new EncString(req.firstName ?? "");
domain.middleName = new EncString(req.middleName ?? "");
domain.lastName = new EncString(req.lastName ?? "");
domain.address1 = new EncString(req.address1 ?? "");
domain.address2 = new EncString(req.address2 ?? "");
domain.address3 = new EncString(req.address3 ?? "");
domain.city = new EncString(req.city ?? "");
domain.state = new EncString(req.state ?? "");
domain.postalCode = new EncString(req.postalCode ?? "");
domain.country = new EncString(req.country ?? "");
domain.company = new EncString(req.company ?? "");
domain.email = new EncString(req.email ?? "");
domain.phone = new EncString(req.phone ?? "");
domain.ssn = new EncString(req.ssn ?? "");
domain.username = new EncString(req.username ?? "");
domain.passportNumber = new EncString(req.passportNumber ?? "");
domain.licenseNumber = new EncString(req.licenseNumber ?? "");
domain.title = req.title ? new EncString(req.title) : undefined;
domain.firstName = req.firstName ? new EncString(req.firstName) : undefined;
domain.middleName = req.middleName ? new EncString(req.middleName) : undefined;
domain.lastName = req.lastName ? new EncString(req.lastName) : undefined;
domain.address1 = req.address1 ? new EncString(req.address1) : undefined;
domain.address2 = req.address2 ? new EncString(req.address2) : undefined;
domain.address3 = req.address3 ? new EncString(req.address3) : undefined;
domain.city = req.city ? new EncString(req.city) : undefined;
domain.state = req.state ? new EncString(req.state) : undefined;
domain.postalCode = req.postalCode ? new EncString(req.postalCode) : undefined;
domain.country = req.country ? new EncString(req.country) : undefined;
domain.company = req.company ? new EncString(req.company) : undefined;
domain.email = req.email ? new EncString(req.email) : undefined;
domain.phone = req.phone ? new EncString(req.phone) : undefined;
domain.ssn = req.ssn ? new EncString(req.ssn) : undefined;
domain.username = req.username ? new EncString(req.username) : undefined;
domain.passportNumber = req.passportNumber ? new EncString(req.passportNumber) : undefined;
domain.licenseNumber = req.licenseNumber ? new EncString(req.licenseNumber) : undefined;
return domain;
}

View File

@@ -34,9 +34,9 @@ export class LoginExport {
if (req.uris != null) {
domain.uris = req.uris.map((u) => LoginUriExport.toDomain(u));
}
domain.username = new EncString(req.username);
domain.password = new EncString(req.password);
domain.totp = new EncString(req.totp ?? "");
domain.username = req.username ? new EncString(req.username) : undefined;
domain.password = req.password ? new EncString(req.password) : undefined;
domain.totp = req.totp ? new EncString(req.totp) : undefined;
// Fido2credentials are currently not supported for exports.
return domain;

View File

@@ -126,19 +126,15 @@ function generateFolder() {
}
function expectEqualCiphers(ciphers: CipherView[] | Cipher[], jsonResult: string) {
const parsed = JSON.parse(jsonResult);
const actualItems = sanitizeDates(parsed.items);
const expected: CipherWithIdExport[] = [];
const actual = JSON.stringify(JSON.parse(jsonResult).items);
const items: CipherWithIdExport[] = [];
ciphers.forEach((c: CipherView | Cipher) => {
const item = new CipherWithIdExport();
item.build(c);
expected.push(item);
items.push(item);
});
const expectedSanitized = sanitizeDates(expected);
expect(JSON.stringify(actualItems)).toEqual(JSON.stringify(expectedSanitized));
expect(actual).toEqual(JSON.stringify(items));
}
function expectEqualFolderViews(folderViews: FolderView[] | Folder[], jsonResult: string) {
@@ -166,18 +162,6 @@ function expectEqualFolders(folders: Folder[], jsonResult: string) {
expect(actual).toMatchObject(expected);
}
function sanitizeDates<T>(obj: T): T {
const dateKeyRegex = /Date$/i;
return JSON.parse(
JSON.stringify(obj, (key, value) => {
if (key && dateKeyRegex.test(key)) {
return undefined; // omit this property
}
return value;
}),
);
}
describe("VaultExportService", () => {
let exportService: IndividualVaultExportService;
let cryptoFunctionService: MockProxy<CryptoFunctionService>;