mirror of
https://github.com/bitwarden/browser
synced 2026-01-30 00:03:30 +00:00
support cipher archiveDate in CSV import/export
This commit is contained in:
@@ -91,4 +91,33 @@ describe("BitwardenCsvImporter", () => {
|
||||
expect(result.collections[0].name).toBe("collection1/collection2");
|
||||
expect(result.collections[1].name).toBe("collection1");
|
||||
});
|
||||
|
||||
it("should parse archived items correctly", async () => {
|
||||
const archivedDate = "2025-01-15T10:30:00.000Z";
|
||||
const data =
|
||||
`name,type,archivedDate,login_uri,login_username,login_password` +
|
||||
`\nArchived Login,login,${archivedDate},https://example.com,user,pass`;
|
||||
|
||||
importer.organizationId = null;
|
||||
const result = await importer.parse(data);
|
||||
|
||||
expect(result.success).toBe(true);
|
||||
expect(result.ciphers.length).toBe(1);
|
||||
|
||||
const cipher = result.ciphers[0];
|
||||
expect(cipher.name).toBe("Archived Login");
|
||||
expect(cipher.archivedDate).toBeDefined();
|
||||
expect(cipher.archivedDate.toISOString()).toBe(archivedDate);
|
||||
});
|
||||
|
||||
it("should handle missing archivedDate gracefully", async () => {
|
||||
const data = `name,type,login_uri` + `\nTest Login,login,https://example.com`;
|
||||
|
||||
importer.organizationId = null;
|
||||
const result = await importer.parse(data);
|
||||
|
||||
expect(result.success).toBe(true);
|
||||
expect(result.ciphers.length).toBe(1);
|
||||
expect(result.ciphers[0].archivedDate).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -51,6 +51,15 @@ export class BitwardenCsvImporter extends BaseImporter implements Importer {
|
||||
cipher.reprompt = CipherRepromptType.None;
|
||||
}
|
||||
|
||||
if (!this.isNullOrWhitespace(value.archivedDate)) {
|
||||
try {
|
||||
cipher.archivedDate = new Date(value.archivedDate);
|
||||
} catch (e) {
|
||||
// eslint-disable-next-line
|
||||
console.error("Unable to parse archivedDate value", e);
|
||||
}
|
||||
}
|
||||
|
||||
if (!this.isNullOrWhitespace(value.fields)) {
|
||||
const fields = this.splitNewLine(value.fields);
|
||||
for (let i = 0; i < fields.length; i++) {
|
||||
|
||||
@@ -59,6 +59,7 @@ export class BaseVaultExportService {
|
||||
cipher.notes = c.notes;
|
||||
cipher.fields = null;
|
||||
cipher.reprompt = c.reprompt;
|
||||
cipher.archivedDate = c.archivedDate ? c.archivedDate.toISOString() : null;
|
||||
// Login props
|
||||
cipher.login_uri = null;
|
||||
cipher.login_username = null;
|
||||
|
||||
@@ -12,6 +12,7 @@ export type BitwardenCsvExportType = {
|
||||
login_password: string;
|
||||
login_totp: string;
|
||||
favorite: number | null;
|
||||
archivedDate: string | null;
|
||||
};
|
||||
|
||||
export type BitwardenCsvIndividualExportType = BitwardenCsvExportType & {
|
||||
|
||||
Reference in New Issue
Block a user