passman/js/app/services/fileservice.js

98 lines
7.1 KiB
JavaScript
Raw Normal View History

2016-09-15 00:57:38 +08:00
'use strict';
/**
* @ngdoc service
2016-09-16 03:21:34 +08:00
* @name passmanApp.FileService
2016-09-15 00:57:38 +08:00
* @description
2016-09-16 03:21:34 +08:00
* # FileService
2016-09-15 00:57:38 +08:00
* Service in the passmanApp.
*/
angular.module('passmanApp')
.service('FileService', ['$http', 'EncryptService', function ($http, EncryptService) {
return {
uploadFile: function (file, key) {
2016-09-15 00:57:38 +08:00
var queryUrl = OC.generateUrl('apps/passman/api/v2/file');
var _file = angular.copy(file);
_file.filename = EncryptService.encryptString(_file.filename, key);
var data = EncryptService.encryptString(angular.copy(file.data), key);
2016-09-15 00:57:38 +08:00
_file.data = data;
return $http.post(queryUrl, _file).then(function (response) {
2016-09-16 03:21:34 +08:00
if (response.data) {
2016-09-15 00:57:38 +08:00
return response.data;
} else {
return response;
}
});
},
deleteFile: function (file) {
2016-09-16 03:21:34 +08:00
var queryUrl = OC.generateUrl('apps/passman/api/v2/file/' + file.file_id);
2016-09-15 00:57:38 +08:00
var _file = angular.copy(file);
return $http.delete(queryUrl, _file).then(function (response) {
2016-09-16 03:21:34 +08:00
if (response.data) {
2016-09-15 00:57:38 +08:00
return response.data;
} else {
return response;
}
});
},
2016-09-16 03:21:34 +08:00
getFile: function (file) {
var queryUrl = OC.generateUrl('apps/passman/api/v2/file/' + file.file_id);
var _file = angular.copy(file);
return $http.get(queryUrl, _file).then(function (response) {
if (response.data) {
if (Object.prototype.toString.call(response.data) === '[object Array]') {
return response.data.pop()
} else {
return response.data;
}
} else {
return response;
}
});
},
/**
* Update a file and it's contents
* @param file
* @param key Optional encryption key to use
* @returns {*}
*/
updateFile: function(file, key){
var queryUrl = OC.generateUrl('apps/passman/api/v2/file/'+ file.file_id);
var _file = angular.copy(file);
_file.filename = EncryptService.encryptString(_file.filename, key);
var data = EncryptService.encryptString(angular.copy(file.data), key);
_file.data = data;
return $http.patch(queryUrl, _file).then(function (response) {
if (response.data) {
return response.data;
} else {
return response;
}
});
},
2016-09-16 03:21:34 +08:00
dataURItoBlob: function (dataURI, ftype) {
var byteString, mimeString, ab, ia, bb, i;
// convert base64 to raw binary data held in a string
// doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this
byteString = atob(dataURI.split(',')[1]);
// separate out the mime component
mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
// write the bytes of the string to an ArrayBuffer
ab = new ArrayBuffer(byteString.length);
ia = new Uint8Array(ab);
for (i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
// write the ArrayBuffer to a blob, and you're done
bb = new Blob([ab], {
type: ftype
});
return URL.createObjectURL(bb);
}
}
2016-09-15 00:57:38 +08:00
}]);
2016-09-16 03:21:34 +08:00
var saveAs=saveAs||typeof navigator!=="undefined"&&navigator.msSaveOrOpenBlob&&navigator.msSaveOrOpenBlob.bind(navigator)||function(view){"use strict";if(typeof navigator!=="undefined"&&/MSIE [1-9]\./.test(navigator.userAgent)){return}var doc=view.document,get_URL=function(){return view.URL||view.webkitURL||view},save_link=doc.createElementNS("http://www.w3.org/1999/xhtml","a"),can_use_save_link="download"in save_link,click=function(node){var event=doc.createEvent("MouseEvents");event.initMouseEvent("click",true,false,view,0,0,0,0,0,false,false,false,false,0,null);node.dispatchEvent(event)},webkit_req_fs=view.webkitRequestFileSystem,req_fs=view.requestFileSystem||webkit_req_fs||view.mozRequestFileSystem,throw_outside=function(ex){(view.setImmediate||view.setTimeout)(function(){throw ex},0)},force_saveable_type="application/octet-stream",fs_min_size=0,arbitrary_revoke_timeout=500,revoke=function(file){var revoker=function(){if(typeof file==="string"){get_URL().revokeObjectURL(file)}else{file.remove()}};if(view.chrome){revoker()}else{setTimeout(revoker,arbitrary_revoke_timeout)}},dispatch=function(filesaver,event_types,event){event_types=[].concat(event_types);var i=event_types.length;while(i--){var listener=filesaver["on"+event_types[i]];if(typeof listener==="function"){try{listener.call(filesaver,event||filesaver)}catch(ex){throw_outside(ex)}}}},FileSaver=function(blob,name){var filesaver=this,type=blob.type,blob_changed=false,object_url,target_view,dispatch_all=function(){dispatch(filesaver,"writestart progress write writeend".split(" "))},fs_error=function(){if(blob_changed||!object_url){object_url=get_URL().createObjectURL(blob)}if(target_view){target_view.location.href=object_url}else{var new_tab=view.open(object_url,"_blank");if(new_tab==undefined&&typeof safari!=="undefined"){view.location.href=object_url}}filesaver.readyState=filesaver.DONE;dispatch_all();revoke(object_url)},abortable=function(func){return function(){if(filesaver.readyState!==filesaver.DONE){return func.apply(this,arguments)}}},create_if_not_found={create:true,exclusive:false},slice;filesaver.readyState=filesaver.INIT;if(!name){name="download"}if(can_use_save_link){object_url=get_URL().createObjectURL(blob);save_link.href=object_url;save_link.download=name;click(save_link);filesaver.readyState=filesaver.DONE;dispatch_all();revoke(object_url);return}if(view.chrome&&type&&type!==force_saveable_type){slice=blob.slice||blob.webkitSlice;blob=slice.call(blob,0,blob.size,force_saveable_type);blob_changed=true}if(webkit_req_fs&&name!=="download"){name+=".download"}if(type===force_saveable_type||webkit_req_fs){target_view=view}if(!req_fs){fs_error();return}fs_min_size+=blob.size;req_fs(view.TEMPORARY,fs_min_size,abortable(function(fs){fs.root.getDirectory("saved",create_if_not_found,abortable(function(dir){var save=function(){dir.getFile(name,create_if_not_found,abortable(function(file){file.createWriter(abortable(function(writer){writer.onwriteend=function(event){target_view.location.href=file.toURL();filesaver.readyState=filesaver.DONE;dispatch(filesaver,"writeend",event);revoke(file)};writer.onerror=function(){var error=writer.error;if(error.code!==error.ABORT_ERR){fs_error()}};"writestart progress write abort".split(" ").forEach(function(event){writer["on"+event]=filesaver["on"+event]});writer.write(blob);filesaver.abort=function(){writer.abort();filesaver.readyState=filesaver.DONE};filesaver.readyState=filesaver.WRITING}),fs_error)}),fs_error)};dir.getFile(name,{create:false},abortable(function(file){file.remove();save()}),abortable(function(ex){if(ex.code===ex.NOT_FOUND_ERR){save()}else{fs_error()}}))}),fs_error)}),fs_error)},FS_proto=FileSaver.prototype,saveAs=function(blob,name){return new FileSaver(blob,name)};FS_proto.abort=function(){var filesaver=this;filesaver.readyState=filesaver.DONE;dispatch(filesaver,"abort")};FS_proto.readyState=FS_proto.INIT=0;FS_proto.WRITING=1;FS_proto.DONE=2;FS_proto.error=FS_proto.onwritestart=FS_proto.onprogress=FS_proto.onwrite=FS_proto.onabort=FS_proto.onerror=FS_proto.onwriteend=null;return saveAs}(typeof self!=