diff --git a/api/handlers/listhandler.py b/api/handlers/listhandler.py index a09c70021797f571eff4cef9975d52946dddabf5..5503120bcb05c27d4258da21824fd1dc0979060d 100644 --- a/api/handlers/listhandler.py +++ b/api/handlers/listhandler.py @@ -484,9 +484,21 @@ class FileListHandler(ListHandler): return upload.process_upload(self.request, upload.Strategy.targeted, container_type=cont_name, id_=_id, origin=self.origin) - @log_access(AccessType.delete_file) def delete(self, cont_name, list_name, **kwargs): - return super(FileListHandler,self).delete(cont_name, list_name, **kwargs) + # Overriding base class delete to audit action before completion + _id = kwargs.pop('cid') + permchecker, storage, _, _, keycheck = self._initialize_request(cont_name, list_name, _id, query_params=kwargs) + + permchecker(noop)('DELETE', _id=_id, query_params=kwargs) + self.log_user_access(AccessType.delete_file, cont_name=cont_name, cont_id=_id) + try: + result = keycheck(storage.exec_op)('DELETE', _id, query_params=kwargs) + except APIStorageException as e: + self.abort(400, e.message) + if result.modified_count == 1: + return {'modified': result.modified_count} + else: + self.abort(404, 'Element not removed from list {} in container {} {}'.format(storage.list_name, storage.cont_name, _id)) def _check_packfile_token(self, project_id, token_id, check_user=True): """ @@ -798,7 +810,20 @@ class AnalysesHandler(ListHandler): @log_access(AccessType.delete_analysis) def delete(self, cont_name, list_name, **kwargs): - return super(AnalysesHandler,self).delete(cont_name, list_name, **kwargs) + # Overriding base class delete to audit action before completion + _id = kwargs.pop('cid') + permchecker, storage, _, _, keycheck = self._initialize_request(cont_name, list_name, _id, query_params=kwargs) + + permchecker(noop)('DELETE', _id=_id, query_params=kwargs) + self.log_user_access(AccessType.delete_file, cont_name=cont_name, cont_id=_id) + try: + result = keycheck(storage.exec_op)('DELETE', _id, query_params=kwargs) + except APIStorageException as e: + self.abort(400, e.message) + if result.modified_count == 1: + return {'modified': result.modified_count} + else: + self.abort(404, 'Element not removed from list {} in container {} {}'.format(storage.list_name, storage.cont_name, _id)) def _prepare_batch(self, fileinfo): ## duplicated code from download.py