mirror of
https://github.com/bitwarden/browser
synced 2025-12-21 02:33:46 +00:00
upload new attachments
This commit is contained in:
@@ -403,6 +403,47 @@ function initApiService() {
|
||||
});
|
||||
};
|
||||
|
||||
ApiService.prototype.postCipherAttachment = function (id, formData, success, error) {
|
||||
var self = this;
|
||||
handleTokenState(self).then(function (token) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: self.baseUrl + '/ciphers/' + id + '/attachment?' + token,
|
||||
data: formData,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
dataType: 'json',
|
||||
success: function (response) {
|
||||
success(new CipherResponse(response));
|
||||
},
|
||||
error: function (jqXHR, textStatus, errorThrown) {
|
||||
handleError(error, jqXHR, false, self);
|
||||
}
|
||||
});
|
||||
}, function (jqXHR) {
|
||||
handleError(error, jqXHR, true, self);
|
||||
});
|
||||
};
|
||||
|
||||
ApiService.prototype.deleteCipherAttachment = function (id, attachmentId, success, error) {
|
||||
var self = this;
|
||||
handleTokenState(self).then(function (token) {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: self.baseUrl + '/ciphers/' + id + '/attachment/' + attachmentId + '/delete?' + token,
|
||||
dataType: 'text',
|
||||
success: function (response) {
|
||||
success();
|
||||
},
|
||||
error: function (jqXHR, textStatus, errorThrown) {
|
||||
handleError(error, jqXHR, false, self);
|
||||
}
|
||||
});
|
||||
}, function (jqXHR) {
|
||||
handleError(error, jqXHR, true, self);
|
||||
});
|
||||
};
|
||||
|
||||
// Helpers
|
||||
|
||||
function handleError(errorCallback, jqXHR, tokenError, self) {
|
||||
|
||||
@@ -322,7 +322,7 @@ function initLoginService() {
|
||||
deferred.resolve();
|
||||
});
|
||||
}, function (response) {
|
||||
handleError(response, deferred)
|
||||
handleError(response, deferred);
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
@@ -354,6 +354,93 @@ function initLoginService() {
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
LoginService.prototype.saveAttachmentWithServer = function (login, unencryptedFile) {
|
||||
var deferred = Q.defer();
|
||||
var self = this;
|
||||
|
||||
var key, encFileName;
|
||||
var reader = new FileReader();
|
||||
reader.readAsArrayBuffer(unencryptedFile);
|
||||
reader.onload = function (evt) {
|
||||
self.cryptoService.getOrgKey(login.organizationId).then(function (theKey) {
|
||||
key = theKey;
|
||||
return self.cryptoService.encrypt(unencryptedFile.name, key);
|
||||
}).then(function (fileName) {
|
||||
encFileName = fileName;
|
||||
return self.cryptoService.encryptToBytes(evt.target.result, key);
|
||||
}).then(function (encData) {
|
||||
var fd = new FormData();
|
||||
var blob = new Blob([encData], { type: 'application/octet-stream' });
|
||||
fd.append('data', blob, encFileName.encryptedString);
|
||||
|
||||
self.apiService.postCipherAttachment(login.id, fd,
|
||||
function (response) {
|
||||
self.userService.getUserId(function (userId) {
|
||||
var data = new LoginData(response, userId);
|
||||
self.upsert(data, function () {
|
||||
deferred.resolve(new Login(data));
|
||||
});
|
||||
});
|
||||
},
|
||||
function (response) {
|
||||
handleError(response, deferred);
|
||||
});
|
||||
});
|
||||
};
|
||||
reader.onerror = function (evt) {
|
||||
deferred.reject('Error reading file.');
|
||||
};
|
||||
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
LoginService.prototype.deleteAttachment = function (id, attachmentId, callback) {
|
||||
if (!callback || typeof callback !== 'function') {
|
||||
throw 'callback function required';
|
||||
}
|
||||
|
||||
var self = this;
|
||||
|
||||
self.userService.getUserId(function (userId) {
|
||||
var loginsKey = 'sites_' + userId;
|
||||
|
||||
chrome.storage.local.get(loginsKey, function (obj) {
|
||||
var logins = obj[loginsKey];
|
||||
if (logins && id in logins && logins[id].attachments) {
|
||||
for (var i = 0; i < logins[id].attachments.length; i++) {
|
||||
if (logins[id].attachments[i].id === attachmentId) {
|
||||
logins[id].attachments.splice(i, 1);
|
||||
}
|
||||
}
|
||||
|
||||
obj[loginsKey] = logins;
|
||||
chrome.storage.local.set(obj, function () {
|
||||
self.decryptedLoginCache = null;
|
||||
callback();
|
||||
});
|
||||
}
|
||||
else {
|
||||
callback()
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
LoginService.prototype.deleteAttachmentWithServer = function (id, attachmentId) {
|
||||
var deferred = Q.defer();
|
||||
|
||||
var self = this;
|
||||
self.apiService.deleteCipherAttachment(id, attachmentId, function () {
|
||||
self.deleteAttachment(id, attachmentId, function () {
|
||||
deferred.resolve();
|
||||
});
|
||||
}, function (response) {
|
||||
handleError(response, deferred);
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
function handleError(error, deferred) {
|
||||
deferred.reject(error);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user