1password 1pif importer: create hidden fields (#32)
* allow base importer to receive custom field type * 1password importer uses hidden field type for custom fields marked as 'concealed' * 1password 1pif importer specs * remove 'focus' from specs * change field type logic into simple one liner
This commit is contained in:
parent
593870e936
commit
f874ec253d
|
@ -0,0 +1,95 @@
|
|||
import { FieldType } from '../../../src/enums/fieldType';
|
||||
import { OnePassword1PifImporter as Importer } from '../../../src/importers/onepassword1PifImporter';
|
||||
|
||||
import { Utils } from '../../../src/misc/utils';
|
||||
|
||||
if (Utils.isNode) {
|
||||
// Polyfills
|
||||
// tslint:disable-next-line
|
||||
const jsdom: any = require('jsdom');
|
||||
(global as any).DOMParser = new jsdom.JSDOM().window.DOMParser;
|
||||
}
|
||||
|
||||
const TestData: string = `***aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee***\n` +
|
||||
JSON.stringify({
|
||||
uuid: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
|
||||
updatedAt: 1486071244,
|
||||
securityLevel: 'SL5',
|
||||
contentsHash: 'aaaaaaaa',
|
||||
title: 'Imported Entry',
|
||||
location: 'https://www.google.com',
|
||||
secureContents: {
|
||||
fields: [
|
||||
{
|
||||
value: 'user@test.net',
|
||||
id: 'email-input',
|
||||
name: 'email',
|
||||
type: 'T',
|
||||
designation: 'username',
|
||||
},
|
||||
{
|
||||
value: 'myservicepassword',
|
||||
id: 'password-input',
|
||||
name: 'password',
|
||||
type: 'P',
|
||||
designation: 'password',
|
||||
},
|
||||
],
|
||||
sections: [
|
||||
{
|
||||
fields: [
|
||||
{
|
||||
k: 'concealed',
|
||||
n: 'AAAAAAAAAAAABBBBBBBBBBBCCCCCCCCC',
|
||||
v: 'console-password-123',
|
||||
t: 'console password',
|
||||
},
|
||||
],
|
||||
title: 'Admin Console',
|
||||
name: 'admin_console',
|
||||
},
|
||||
],
|
||||
},
|
||||
URLs: [
|
||||
{
|
||||
label: 'website',
|
||||
url: 'https://www.google.com',
|
||||
},
|
||||
],
|
||||
txTimestamp: 1508941334,
|
||||
createdAt: 1390426636,
|
||||
typeName: 'webforms.WebForm',
|
||||
});
|
||||
|
||||
describe('1Password 1Pif Importer', () => {
|
||||
it('should parse data', async () => {
|
||||
const importer = new Importer();
|
||||
const result = importer.parse(TestData);
|
||||
expect(result != null).toBe(true);
|
||||
|
||||
const cipher = result.ciphers.shift();
|
||||
expect(cipher.login.username).toEqual('user@test.net');
|
||||
expect(cipher.login.password).toEqual('myservicepassword');
|
||||
expect(cipher.login.uris.length).toEqual(1);
|
||||
const uriView = cipher.login.uris.shift();
|
||||
expect(uriView.uri).toEqual('https://www.google.com');
|
||||
});
|
||||
|
||||
it('should create concealed field as "hidden" type', async () => {
|
||||
const importer = new Importer();
|
||||
const result = importer.parse(TestData);
|
||||
expect(result != null).toBe(true);
|
||||
|
||||
const ciphers = result.ciphers;
|
||||
expect(ciphers.length).toEqual(1);
|
||||
|
||||
const cipher = ciphers.shift();
|
||||
const fields = cipher.fields;
|
||||
expect(fields.length).toEqual(1);
|
||||
|
||||
const field = fields.shift();
|
||||
expect(field.name).toEqual('console password');
|
||||
expect(field.value).toEqual('console-password-123');
|
||||
expect(field.type).toEqual(FieldType.Hidden);
|
||||
});
|
||||
});
|
|
@ -302,7 +302,7 @@ export abstract class BaseImporter {
|
|||
}
|
||||
}
|
||||
|
||||
protected processKvp(cipher: CipherView, key: string, value: string) {
|
||||
protected processKvp(cipher: CipherView, key: string, value: string, type: FieldType = FieldType.Text) {
|
||||
if (this.isNullOrWhitespace(value)) {
|
||||
return;
|
||||
}
|
||||
|
@ -319,7 +319,7 @@ export abstract class BaseImporter {
|
|||
cipher.fields = [];
|
||||
}
|
||||
const field = new FieldView();
|
||||
field.type = FieldType.Text;
|
||||
field.type = type;
|
||||
field.name = key;
|
||||
field.value = value;
|
||||
cipher.fields.push(field);
|
||||
|
|
|
@ -8,6 +8,7 @@ import { CipherView } from '../models/view/cipherView';
|
|||
import { SecureNoteView } from '../models/view/secureNoteView';
|
||||
|
||||
import { CipherType } from '../enums/cipherType';
|
||||
import { FieldType } from '../enums/fieldType';
|
||||
import { SecureNoteType } from '../enums/secureNoteType';
|
||||
|
||||
export class OnePassword1PifImporter extends BaseImporter implements Importer {
|
||||
|
@ -168,8 +169,9 @@ export class OnePassword1PifImporter extends BaseImporter implements Importer {
|
|||
}
|
||||
}
|
||||
|
||||
const fieldType = (field.k === 'concealed') ? FieldType.Hidden : FieldType.Text;
|
||||
const fieldName = this.isNullOrWhitespace(field[nameKey]) ? 'no_name' : field[nameKey];
|
||||
this.processKvp(cipher, fieldName, fieldValue);
|
||||
this.processKvp(cipher, fieldName, fieldValue, fieldType);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue