mirror of
https://github.com/bitwarden/desktop.git
synced 2024-11-08 09:32:07 +01:00
build models for cipher types
This commit is contained in:
parent
e482ace0f7
commit
44f5812a36
@ -15,6 +15,7 @@ var FolderData = function (response, userId) {
|
||||
this.revisionDate = response.revisionDate;
|
||||
};
|
||||
|
||||
// deprecated
|
||||
var LoginData = function (response, userId) {
|
||||
this.id = response.id;
|
||||
this.organizationId = response.organizationId;
|
||||
@ -47,6 +48,53 @@ var LoginData = function (response, userId) {
|
||||
}
|
||||
};
|
||||
|
||||
var CipherData = function (response, userId) {
|
||||
this.id = response.id;
|
||||
this.organizationId = response.organizationId;
|
||||
this.folderId = response.folderId;
|
||||
this.userId = userId;
|
||||
this.edit = response.edit;
|
||||
this.organizationUseTotp = response.organizationUseTotp;
|
||||
this.favorite = response.favorite;
|
||||
this.revisionDate = response.revisionDate;
|
||||
this.type = response.type;
|
||||
|
||||
this.name = response.data.Name;
|
||||
this.notes = response.notes = response.data.Notes;
|
||||
|
||||
switch (this.type) {
|
||||
case 1: // cipherType.login
|
||||
this.login = new LoginData2(response.data);
|
||||
break;
|
||||
case 2: // cipherType.secureNote
|
||||
this.secureNote = new SecureNoteData(response.data);
|
||||
break;
|
||||
case 3: // cipherType.card
|
||||
this.card = new CardData(response.data);
|
||||
break;
|
||||
case 4: // cipherType.identity
|
||||
this.identity = new IdentityData(response.data);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
var i;
|
||||
if (response.data.Fields) {
|
||||
this.fields = [];
|
||||
for (i = 0; i < response.data.Fields.length; i++) {
|
||||
this.fields.push(new FieldData(response.data.Fields[i]));
|
||||
}
|
||||
}
|
||||
|
||||
if (response.attachments) {
|
||||
this.attachments = [];
|
||||
for (i = 0; i < response.attachments.length; i++) {
|
||||
this.attachments.push(new AttachmentData(response.attachments[i]));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var AttachmentData = function (response) {
|
||||
this.id = response.id;
|
||||
this.url = response.url;
|
||||
@ -60,3 +108,44 @@ var FieldData = function (response) {
|
||||
this.name = response.Name;
|
||||
this.value = response.Value;
|
||||
};
|
||||
|
||||
var LoginData2 = function (data) {
|
||||
this.uri = data.Uri;
|
||||
this.username = data.Username;
|
||||
this.password = data.Password;
|
||||
this.totp = data.Totp;
|
||||
};
|
||||
|
||||
var IdentityData = function (data) {
|
||||
this.title = data.Title;
|
||||
this.firstName = data.FirstName;
|
||||
this.middleName = data.MiddleName;
|
||||
this.lastName = data.LastName;
|
||||
this.address1 = data.Address1;
|
||||
this.address2 = data.Address2;
|
||||
this.address3 = data.Address3;
|
||||
this.city = data.City;
|
||||
this.state = data.State;
|
||||
this.postalCode = data.PostalCode;
|
||||
this.country = data.Country;
|
||||
this.company = data.Company;
|
||||
this.email = data.Email;
|
||||
this.phone = data.Phone;
|
||||
this.ssn = data.SSN;
|
||||
this.username = data.Username;
|
||||
this.passportNumber = data.PassportNumber;
|
||||
this.licenseNumber = data.LicenseNumber;
|
||||
};
|
||||
|
||||
var SecureNoteData = function (data) {
|
||||
this.type = data.Type;
|
||||
};
|
||||
|
||||
var CardData = function (data) {
|
||||
this.cardholderName = data.CardholderName;
|
||||
this.brand = data.Brand;
|
||||
this.number = data.Number;
|
||||
this.expMonth = data.ExpMonth;
|
||||
this.expYear = data.ExpYear;
|
||||
this.code = data.Code;
|
||||
};
|
||||
|
@ -88,6 +88,7 @@ var CipherString = function () {
|
||||
}
|
||||
};
|
||||
|
||||
// deprecated
|
||||
var Login = function (obj, alreadyEncrypted, localData) {
|
||||
this.id = obj.id ? obj.id : null;
|
||||
this.organizationId = obj.organizationId ? obj.organizationId : null;
|
||||
@ -136,44 +137,148 @@ var Login = function (obj, alreadyEncrypted, localData) {
|
||||
}
|
||||
};
|
||||
|
||||
var Field = function (obj, alreadyEncrypted) {
|
||||
this.type = obj.type;
|
||||
var Cipher = function (obj, alreadyEncrypted, localData) {
|
||||
buildDomainModel(this, obj, {
|
||||
id: 'id',
|
||||
type: 'type',
|
||||
organizationId: 'organizationId',
|
||||
folderId: 'folderId',
|
||||
name: 'name',
|
||||
notes: 'notes'
|
||||
}, alreadyEncrypted, ['id', 'type', 'organizationId', 'folderId']);
|
||||
|
||||
if (alreadyEncrypted === true) {
|
||||
this.name = obj.name ? obj.name : null;
|
||||
this.value = obj.value ? obj.value : null;
|
||||
this.favorite = obj.favorite ? true : false;
|
||||
this.organizationUseTotp = obj.organizationUseTotp ? true : false;
|
||||
this.edit = obj.edit ? true : false;
|
||||
this.localData = localData;
|
||||
|
||||
switch (this.type) {
|
||||
case 1: // cipherType.login
|
||||
this.login = new Login2(obj.login);
|
||||
break;
|
||||
case 2: // cipherType.secureNote
|
||||
this.secureNote = new SecureNote(obj.secureNote);
|
||||
break;
|
||||
case 3: // cipherType.card
|
||||
this.card = new Card(obj.card);
|
||||
break;
|
||||
case 4: // cipherType.identity
|
||||
this.identity = new Identity(obj.identity);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
var i;
|
||||
if (obj.attachments) {
|
||||
this.attachments = [];
|
||||
for (i = 0; i < obj.attachments.length; i++) {
|
||||
this.attachments.push(new Attachment(obj.attachments[i], alreadyEncrypted));
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.name = obj.name ? new CipherString(obj.name) : null;
|
||||
this.value = obj.value ? new CipherString(obj.value) : null;
|
||||
this.attachments = null;
|
||||
}
|
||||
|
||||
if (obj.fields) {
|
||||
this.fields = [];
|
||||
for (i = 0; i < obj.fields.length; i++) {
|
||||
this.fields.push(new Field(obj.fields[i], alreadyEncrypted));
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.fields = null;
|
||||
}
|
||||
};
|
||||
|
||||
var Login2 = function (obj, alreadyEncrypted) {
|
||||
buildDomainModel(this, obj, {
|
||||
uri: 'uri',
|
||||
username: 'username',
|
||||
password: 'password',
|
||||
totp: 'totp'
|
||||
}, alreadyEncrypted, []);
|
||||
};
|
||||
|
||||
var Identity = function (obj, alreadyEncrypted) {
|
||||
buildDomainModel(this, obj, {
|
||||
title: 'title',
|
||||
firstName: 'firstName',
|
||||
middleName: 'middleName',
|
||||
lastName: 'lastName',
|
||||
address1: 'address1',
|
||||
address2: 'address2',
|
||||
address3: 'address3',
|
||||
city: 'city',
|
||||
state: 'state',
|
||||
postalCode: 'postalCode',
|
||||
country: 'country',
|
||||
company: 'company',
|
||||
email: 'email',
|
||||
phone: 'phone',
|
||||
ssn: 'ssn',
|
||||
username: 'username',
|
||||
passportNumber: 'passportNumber',
|
||||
licenseNumber: 'licenseNumber'
|
||||
}, alreadyEncrypted, []);
|
||||
};
|
||||
|
||||
var Card = function (obj, alreadyEncrypted) {
|
||||
buildDomainModel(this, obj, {
|
||||
cardholderName: 'cardholderName',
|
||||
brand: 'brand',
|
||||
number: 'number',
|
||||
expMonth: 'expMonth',
|
||||
expYear: 'expYear',
|
||||
code: 'code'
|
||||
}, alreadyEncrypted, []);
|
||||
};
|
||||
|
||||
var SecureNote = function (obj, alreadyEncrypted) {
|
||||
buildDomainModel(this, obj, {
|
||||
type: 'type'
|
||||
}, alreadyEncrypted, ['type']);
|
||||
};
|
||||
|
||||
var Field = function (obj, alreadyEncrypted) {
|
||||
buildModel(this, obj, {
|
||||
type: 'type',
|
||||
name: 'name',
|
||||
value: 'value'
|
||||
}, alreadyEncrypted, ['type']);
|
||||
};
|
||||
|
||||
var Attachment = function (obj, alreadyEncrypted) {
|
||||
this.id = obj.id ? obj.id : null;
|
||||
this.url = obj.url ? obj.url : null;
|
||||
this.size = obj.size ? obj.size : null;
|
||||
this.sizeName = obj.sizeName ? obj.sizeName : null;
|
||||
|
||||
if (alreadyEncrypted === true) {
|
||||
this.fileName = obj.fileName ? obj.fileName : null;
|
||||
}
|
||||
else {
|
||||
this.fileName = obj.fileName ? new CipherString(obj.fileName) : null;
|
||||
}
|
||||
buildDomainModel(this, obj, {
|
||||
id: 'id',
|
||||
url: 'url',
|
||||
size: 'size',
|
||||
sizeName: 'sizeName',
|
||||
fileName: 'fileName'
|
||||
}, alreadyEncrypted, ['id', 'url', 'size', 'sizeName']);
|
||||
};
|
||||
|
||||
var Folder = function (obj, alreadyEncrypted) {
|
||||
this.id = obj.id ? obj.id : null;
|
||||
|
||||
if (alreadyEncrypted === true) {
|
||||
this.name = obj.name ? obj.name : null;
|
||||
}
|
||||
else {
|
||||
this.name = obj.name ? new CipherString(obj.name) : null;
|
||||
}
|
||||
buildDomainModel(this, obj, {
|
||||
id: 'id',
|
||||
name: 'name'
|
||||
}, alreadyEncrypted, ['id']);
|
||||
};
|
||||
|
||||
function buildDomainModel(model, obj, map, alreadyEncrypted, notEncList) {
|
||||
notEncList = notEncList || [];
|
||||
for (var prop in map) {
|
||||
if (map.hasOwnProperty(prop)) {
|
||||
if (alreadyEncrypted === true || notEncList.indexOf(prop) > -1) {
|
||||
model[prop] = obj[map[prop]] ? obj[map[prop]] : null;
|
||||
}
|
||||
else {
|
||||
model[prop] = obj[map[prop]] ? new CipherString(obj[map[prop]]) : null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
(function () {
|
||||
CipherString.prototype.decrypt = function (orgId) {
|
||||
if (this.decryptedValue) {
|
||||
@ -195,6 +300,7 @@ var Folder = function (obj, alreadyEncrypted) {
|
||||
});
|
||||
};
|
||||
|
||||
// deprecated
|
||||
Login.prototype.decrypt = function () {
|
||||
var self = this;
|
||||
var model = {
|
||||
@ -276,54 +382,190 @@ var Folder = function (obj, alreadyEncrypted) {
|
||||
});
|
||||
};
|
||||
|
||||
Field.prototype.decrypt = function (orgId) {
|
||||
var self = this;
|
||||
var model = {
|
||||
type: self.type
|
||||
};
|
||||
|
||||
return Q().then(function () {
|
||||
if (self.name) {
|
||||
return self.name.decrypt(orgId);
|
||||
}
|
||||
return null;
|
||||
}).then(function (val) {
|
||||
model.name = val;
|
||||
|
||||
if (self.value) {
|
||||
return self.value.decrypt(orgId);
|
||||
}
|
||||
return null;
|
||||
}).then(function (val) {
|
||||
model.value = val;
|
||||
return model;
|
||||
});
|
||||
};
|
||||
|
||||
Attachment.prototype.decrypt = function (orgId) {
|
||||
Cipher.prototype.decrypt = function () {
|
||||
var self = this;
|
||||
var model = {
|
||||
id: self.id,
|
||||
size: self.size,
|
||||
sizeName: self.sizeName,
|
||||
url: self.url
|
||||
organizationId: self.organizationId,
|
||||
folderId: self.folderId,
|
||||
favorite: self.favorite,
|
||||
type: self.type,
|
||||
localData: self.localData
|
||||
};
|
||||
|
||||
return self.fileName.decrypt(orgId).then(function (val) {
|
||||
model.fileName = val;
|
||||
var attachments = [];
|
||||
var fields = [];
|
||||
|
||||
return decryptObj(model, this, {
|
||||
name: 'name',
|
||||
notes: 'notes'
|
||||
}, null).then(function () {
|
||||
switch (self.type) {
|
||||
case 1: // cipherType.login
|
||||
return self.login.decrypt(self.organizationId);
|
||||
case 2: // cipherType.secureNote
|
||||
return self.secureNote.decrypt(self.organizationId);
|
||||
case 3: // cipherType.card
|
||||
return self.card.decrypt(self.organizationId);
|
||||
case 4: // cipherType.identity
|
||||
return self.identity.decrypt(self.organizationId);
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}).then(function (decObj) {
|
||||
switch (self.type) {
|
||||
case 1: // cipherType.login
|
||||
model.login = decObj;
|
||||
break;
|
||||
case 2: // cipherType.secureNote
|
||||
model.secureNote = decObj;
|
||||
break;
|
||||
case 3: // cipherType.card
|
||||
model.card = decObj;
|
||||
break;
|
||||
case 4: // cipherType.identity
|
||||
model.identity = decObj;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}).then(function () {
|
||||
if (self.attachments) {
|
||||
return self.attachments.reduce(function (promise, attachment) {
|
||||
return promise.then(function () {
|
||||
return attachment.decrypt(self.organizationId);
|
||||
}).then(function (decAttachment) {
|
||||
attachments.push(decAttachment);
|
||||
});
|
||||
}, Q());
|
||||
}
|
||||
return;
|
||||
}).then(function () {
|
||||
model.attachments = attachments.length ? attachments : null;
|
||||
|
||||
if (self.fields) {
|
||||
return self.fields.reduce(function (promise, field) {
|
||||
return promise.then(function () {
|
||||
return field.decrypt(self.organizationId);
|
||||
}).then(function (decField) {
|
||||
fields.push(decField);
|
||||
});
|
||||
}, Q());
|
||||
}
|
||||
return;
|
||||
}).then(function () {
|
||||
model.fields = fields.length ? fields : null;
|
||||
return model;
|
||||
}, function (e) {
|
||||
console.log(e);
|
||||
});
|
||||
};
|
||||
|
||||
Login2.prototype.decrypt = function (orgId) {
|
||||
return decryptObj({}, this, {
|
||||
uri: 'uri',
|
||||
username: 'username',
|
||||
password: 'password',
|
||||
totp: 'totp'
|
||||
}, orgId);
|
||||
};
|
||||
|
||||
Card.prototype.decrypt = function (orgId) {
|
||||
return decryptObj({}, this, {
|
||||
cardholderName: 'cardholderName',
|
||||
brand: 'brand',
|
||||
number: 'number',
|
||||
expMonth: 'expMonth',
|
||||
expYear: 'expYear',
|
||||
code: 'code'
|
||||
}, orgId);
|
||||
};
|
||||
|
||||
SecureNote.prototype.decrypt = function (orgId) {
|
||||
return {
|
||||
type: this.type
|
||||
};
|
||||
};
|
||||
|
||||
Identity.prototype.decrypt = function (orgId) {
|
||||
return decryptObj({}, this, {
|
||||
title: 'title',
|
||||
firstName: 'firstName',
|
||||
middleName: 'middleName',
|
||||
lastName: 'lastName',
|
||||
address1: 'address1',
|
||||
address2: 'address2',
|
||||
address3: 'address3',
|
||||
city: 'city',
|
||||
state: 'state',
|
||||
postalCode: 'postalCode',
|
||||
country: 'country',
|
||||
company: 'company',
|
||||
email: 'email',
|
||||
phone: 'phone',
|
||||
ssn: 'ssn',
|
||||
username: 'username',
|
||||
passportNumber: 'passportNumber',
|
||||
licenseNumber: 'licenseNumber'
|
||||
}, orgId);
|
||||
};
|
||||
|
||||
Field.prototype.decrypt = function (orgId) {
|
||||
var model = {
|
||||
type: this.type
|
||||
};
|
||||
|
||||
return decryptObj(model, this, {
|
||||
name: 'name',
|
||||
value: 'value'
|
||||
}, orgId);
|
||||
};
|
||||
|
||||
Attachment.prototype.decrypt = function (orgId) {
|
||||
var model = {
|
||||
id: this.id,
|
||||
size: this.size,
|
||||
sizeName: this.sizeName,
|
||||
url: this.url
|
||||
};
|
||||
|
||||
return decryptObj(model, this, {
|
||||
fileName: 'fileName'
|
||||
}, orgId);
|
||||
};
|
||||
|
||||
Folder.prototype.decrypt = function () {
|
||||
var self = this;
|
||||
var model = {
|
||||
id: self.id
|
||||
};
|
||||
|
||||
return self.name.decrypt().then(function (val) {
|
||||
model.name = val;
|
||||
return decryptObj(model, this, {
|
||||
name: 'name'
|
||||
}, null);
|
||||
};
|
||||
|
||||
function decryptObj(model, self, map, orgId) {
|
||||
var promises = [];
|
||||
for (var prop in map) {
|
||||
if (map.hasOwnProperty(prop)) {
|
||||
var promise = Q().then(function () {
|
||||
if (self[map[prop]]) {
|
||||
return self[map[prop]].decrypt(orgId);
|
||||
}
|
||||
return null;
|
||||
}).then(function (val) {
|
||||
model[prop] = val;
|
||||
return;
|
||||
});
|
||||
|
||||
promises.push(promise);
|
||||
}
|
||||
}
|
||||
|
||||
return Q.all(promises).then(function () {
|
||||
return model;
|
||||
});
|
||||
};
|
||||
}
|
||||
})();
|
||||
|
@ -21,7 +21,8 @@ function ConstantsService(i18nService) {
|
||||
cipherType: {
|
||||
login: 1,
|
||||
secureNote: 2,
|
||||
card: 3
|
||||
card: 3,
|
||||
identity: 4
|
||||
},
|
||||
fieldType: {
|
||||
text: 0,
|
||||
|
Loading…
Reference in New Issue
Block a user