(fix) XSRF supprot for all contact operations

pull/207/head
Ludovic Marcotte 2016-05-04 14:15:18 -04:00
parent d4fc1775b2
commit 5f2a862bc8
8 changed files with 37 additions and 22 deletions

View File

@ -69,7 +69,8 @@
content = [NSMutableString string]; content = [NSMutableString string];
request = [context request]; request = [context request];
sourceFolder = [self clientObject]; sourceFolder = [self clientObject];
contactsId = [request formValuesForKey: @"uid"]; contactsId = [[[[context request] contentAsString] objectFromJSONString] objectForKey: @"uids"];
if (!contactsId) if (!contactsId)
contactsId = [sourceFolder toOneRelationshipKeys]; contactsId = [sourceFolder toOneRelationshipKeys];

View File

@ -9,7 +9,7 @@
className="UIxPageFrame" className="UIxPageFrame"
title="title" title="title"
const:userDefaultsKeys="SOGoContactsCategories" const:userDefaultsKeys="SOGoContactsCategories"
const:jsFiles="vendor/ckeditor/ckeditor.js, vendor/ckeditor/ck.js, Common.js, Preferences.services.js, Mailer.services.js, Contacts.js, Contacts.services.js, vendor/angular-file-upload.min.js"> const:jsFiles="vendor/ckeditor/ckeditor.js, vendor/ckeditor/ck.js, Common.js, Preferences.services.js, Mailer.services.js, Contacts.js, Contacts.services.js, vendor/angular-file-upload.min.js, vendor/FileSaver.min.js">
<script type="text/javascript"> <script type="text/javascript">
var contactFolders = <var:string value="contactFolders" const:escapeHTML="NO" />; var contactFolders = <var:string value="contactFolders" const:escapeHTML="NO" />;
</script> </script>
@ -96,7 +96,7 @@
</md-button> </md-button>
</md-menu-item> </md-menu-item>
<md-menu-item> <md-menu-item>
<md-button type="button" ng-click="app.exportCards()"> <md-button type="button" ng-click="folder.exportCards(false)">
<var:string label:value="Export"/> <var:string label:value="Export"/>
</md-button> </md-button>
</md-menu-item> </md-menu-item>
@ -353,7 +353,7 @@
</md-button> </md-button>
</md-menu-item> </md-menu-item>
<md-menu-item ng-hide="addressbook.selectedFolder.isRemote"> <md-menu-item ng-hide="addressbook.selectedFolder.isRemote">
<md-button ng-click="addressbook.saveSelectedCards()"> <md-button ng-click="addressbook.selectedFolder.exportCards(true)">
<var:string label:value="Export"/> <var:string label:value="Export"/>
</md-button> </md-button>
</md-menu-item> </md-menu-item>

View File

@ -36,7 +36,7 @@
<md-menu-content> <md-menu-content>
<md-menu-item> <md-menu-item>
<md-button label:aria-label="Export" <md-button label:aria-label="Export"
ng-click="editor.exportCard()"> ng-click="editor.card.export()">
<var:string label:value="Export"/> <var:string label:value="Export"/>
</md-button> </md-button>
</md-menu-item> </md-menu-item>

View File

@ -632,6 +632,23 @@
}); });
}; };
/**
* @function $exportCards
* @memberof AddressBook.prototype
* @desc Export the selected/all cards
* @returns a promise of the HTTP operation
*/
AddressBook.prototype.exportCards = function(selectedOnly) {
var selectedUIDs;
if (selectedOnly) {
var selectedCards = _.filter(this.$cards, function(card) { return card.selected; });
selectedUIDs = _.map(selectedCards, 'id');
}
return AddressBook.$$resource.download(this.id, 'export', (angular.isDefined(selectedUIDs) ? {uids: selectedUIDs} : null), {type: 'application/octet-stream'});
};
/** /**
* @function $unwrap * @function $unwrap
* @memberof AddressBook.prototype * @memberof AddressBook.prototype

View File

@ -20,7 +20,6 @@
vm.notSelectedComponent = notSelectedComponent; vm.notSelectedComponent = notSelectedComponent;
vm.unselectCards = unselectCards; vm.unselectCards = unselectCards;
vm.confirmDeleteSelectedCards = confirmDeleteSelectedCards; vm.confirmDeleteSelectedCards = confirmDeleteSelectedCards;
vm.saveSelectedCards = saveSelectedCards;
vm.copySelectedCards = copySelectedCards; vm.copySelectedCards = copySelectedCards;
vm.selectAll = selectAll; vm.selectAll = selectAll;
vm.sort = sort; vm.sort = sort;
@ -103,12 +102,6 @@
}); });
} }
function saveSelectedCards() {
var selectedCards = _.filter(vm.selectedFolder.$cards, function(card) { return card.selected; });
var selectedUIDs = _.map(selectedCards, 'id');
$window.location.href = ApplicationBaseURL + '/' + vm.selectedFolder.id + '/export?uid=' + selectedUIDs.join('&uid=');
}
function copySelectedCards(folder) { function copySelectedCards(folder) {
var selectedCards = _.filter(vm.selectedFolder.$cards, function(card) { return card.selected; }); var selectedCards = _.filter(vm.selectedFolder.$cards, function(card) { return card.selected; });
vm.selectedFolder.$copyCards(selectedCards, folder).then(function() { vm.selectedFolder.$copyCards(selectedCards, folder).then(function() {

View File

@ -19,7 +19,6 @@
vm.save = save; vm.save = save;
vm.confirmDelete = confirmDelete; vm.confirmDelete = confirmDelete;
vm.importCards = importCards; vm.importCards = importCards;
vm.exportCards = exportCards;
vm.showLinks = showLinks; vm.showLinks = showLinks;
vm.showProperties = showProperties; vm.showProperties = showProperties;
vm.share = share; vm.share = share;
@ -203,10 +202,6 @@
} }
} }
function exportCards() {
$window.location.href = ApplicationBaseURL + '/' + vm.service.selectedFolder.id + '/exportFolder';
}
function showLinks(addressbook) { function showLinks(addressbook) {
$mdDialog.show({ $mdDialog.show({
parent: angular.element(document.body), parent: angular.element(document.body),

View File

@ -202,6 +202,20 @@
} }
}; };
/**
* @function export
* @memberof Card.prototype
* @desc Download the current card
* @returns a promise of the HTTP operation
*/
Card.prototype.export = function() {
var selectedIDs;
selectedIDs = [ this.id ];
return Card.$$resource.download(this.pid, 'export', {uids: selectedIDs}, {type: 'application/octet-stream'});
};
Card.prototype.$fullname = function() { Card.prototype.$fullname = function() {
var fn = this.c_cn || '', names; var fn = this.c_cn || '', names;
if (fn.length === 0) { if (fn.length === 0) {

View File

@ -34,7 +34,6 @@
vm.reset = reset; vm.reset = reset;
vm.cancel = cancel; vm.cancel = cancel;
vm.confirmDelete = confirmDelete; vm.confirmDelete = confirmDelete;
vm.exportCard = exportCard;
vm.toggleRawSource = toggleRawSource; vm.toggleRawSource = toggleRawSource;
vm.showRawSource = false; vm.showRawSource = false;
@ -133,10 +132,6 @@
}); });
} }
function exportCard() {
$window.location.href = ApplicationBaseURL + '/' + vm.currentFolder.id + '/export?uid=' + vm.card.id;
}
function toggleRawSource($event) { function toggleRawSource($event) {
if (!vm.showRawSource && !vm.rawSource) { if (!vm.showRawSource && !vm.rawSource) {
Card.$$resource.post(vm.currentFolder.id + '/' + vm.card.id, "raw").then(function(data) { Card.$$resource.post(vm.currentFolder.id + '/' + vm.card.id, "raw").then(function(data) {