diff --git a/src/importers/baseImporter.ts b/src/importers/baseImporter.ts index 535f663753..c00564c315 100644 --- a/src/importers/baseImporter.ts +++ b/src/importers/baseImporter.ts @@ -276,7 +276,7 @@ export abstract class BaseImporter { if (cipher.notes == null) { cipher.notes = ''; } - cipher.notes += (key + ': ' + value.split(this.newLineRegex).join('\n') + '\n'); + cipher.notes += (key + ': ' + this.splitNewLine(value).join('\n') + '\n'); } else { if (cipher.fields == null) { cipher.fields = []; diff --git a/src/importers/keepassxCsvImporter.ts b/src/importers/keepassxCsvImporter.ts index 7d99a33909..3113bf5345 100644 --- a/src/importers/keepassxCsvImporter.ts +++ b/src/importers/keepassxCsvImporter.ts @@ -3,8 +3,6 @@ import { Importer } from './importer'; import { ImportResult } from '../models/domain/importResult'; -import { FolderView } from '../models/view/folderView'; - export class KeePassXCsvImporter extends BaseImporter implements Importer { parse(data: string): ImportResult { const result = new ImportResult(); diff --git a/src/importers/msecureCsvImporter.ts b/src/importers/msecureCsvImporter.ts new file mode 100644 index 0000000000..60c4e3252e --- /dev/null +++ b/src/importers/msecureCsvImporter.ts @@ -0,0 +1,62 @@ +import { BaseImporter } from './baseImporter'; +import { Importer } from './importer'; + +import { ImportResult } from '../models/domain/importResult'; + +import { CipherType } from '../enums/cipherType'; +import { SecureNoteType } from '../enums/secureNoteType'; + +import { SecureNoteView } from '../models/view/secureNoteView'; + +export class MSecureCsvImporter extends BaseImporter implements Importer { + parse(data: string): ImportResult { + const result = new ImportResult(); + const results = this.parseCsv(data, false); + if (results == null) { + result.success = false; + return result; + } + + results.forEach((value) => { + if (value.length < 3) { + return; + } + + const folderName = this.getValueOrDefault(value[0], 'Unassigned') !== 'Unassigned' ? value[0] : null; + this.processFolder(result, folderName); + + const cipher = this.initLoginCipher(); + cipher.name = this.getValueOrDefault(value[2], '--'); + + if (value[1] === 'Web Logins') { + cipher.login.uris = this.makeUriArray(value[4]); + cipher.login.username = this.getValueOrDefault(value[5]); + cipher.login.password = this.getValueOrDefault(value[6]); + cipher.notes = !this.isNullOrWhitespace(value[3]) ? value[3].split('\\n').join('\n') : null; + } else if (value.length > 3) { + cipher.type = CipherType.SecureNote; + cipher.secureNote = new SecureNoteView(); + cipher.secureNote.type = SecureNoteType.Generic; + for (let i = 3; i < value.length; i++) { + if (!this.isNullOrWhitespace(value[i])) { + cipher.notes += (value[i] + '\n'); + } + } + } + + if (!this.isNullOrWhitespace(value[1]) && cipher.type !== CipherType.Login) { + cipher.name = value[1] + ': ' + cipher.name; + } + + this.cleanupCipher(cipher); + result.ciphers.push(cipher); + }); + + if (this.organization) { + this.moveFoldersToCollections(result); + } + + result.success = true; + return result; + } +}