def refresh_policies(self): obj = self.request.validated oid = self.request.matchdict['oid'] if oid != str(obj[self.key]): raise HTTPBadRequest('The object id is not the same that the id in' ' the url') if issubclass(self.schema_detail, Node): can_access_to_this_path(self.request, self.collection, oid) is_gecos_master_or_403(self.request, self.collection, obj, self.schema_detail) master_policy_no_updated_or_403(self.request, self.collection, obj) obj_filter = self.get_oid_filter(oid) obj_filter.update(self.mongo_filter) real_obj = self.collection.find_one(obj_filter) if not real_obj: raise HTTPNotFound() self.notify_refresh_policies(real_obj) obj = self.parse_item(real_obj) return obj
def collection_post(self): obj = self.request.validated if issubclass(self.schema_detail, Node): can_access_to_this_path(self.request, self.collection, obj) is_gecos_master_or_403(self.request, self.collection, obj, self.schema_detail) master_policy_no_updated_or_403(self.request, self.collection, obj) if not self.integrity_validation(obj): if len(self.request.errors) < 1: self.request.errors.add('body', 'object', 'Integrity error') return # Remove '_id' for security reasons if self.key in obj: del obj[self.key] obj = self.pre_save(obj) if obj is None: return try: obj_id = self.collection.insert_one(obj).inserted_id except DuplicateKeyError as e: raise HTTPBadRequest('The Object already exists: ' '{0}'.format(e.message)) obj = self.post_save(obj) obj.update({self.key: obj_id}) self.notify_created(obj) return self.parse_item(obj)
def refresh_policies(self): obj = self.request.validated oid = self.request.matchdict['oid'] if oid != str(obj[self.key]): raise HTTPBadRequest('The object id is not the same that the id in' ' the url') if issubclass(self.schema_detail, Node): can_access_to_this_path(self.request, self.collection, obj) is_gecos_master_or_403(self.request, self.collection, obj, self.schema_detail) master_policy_no_updated_or_403(self.request, self.collection, obj) obj_filter = self.get_oid_filter(oid) obj_filter.update(self.mongo_filter) real_obj = self.collection.find_one(obj_filter) if not real_obj: raise HTTPNotFound() self.notify_refresh_policies(real_obj) obj = self.parse_item(real_obj) return obj
def collection_post(self): obj = self.request.validated if issubclass(self.schema_detail, Node): can_access_to_this_path(self.request, self.collection, obj) is_gecos_master_or_403(self.request, self.collection, obj, self.schema_detail) master_policy_no_updated_or_403(self.request, self.collection, obj) if not self.integrity_validation(obj): if len(self.request.errors) < 1: self.request.errors.add('body', 'object', 'Integrity error') return # Remove '_id' for security reasons if self.key in obj: del obj[self.key] obj = self.pre_save(obj) if obj is None: return try: obj_id = self.collection.insert(obj) except DuplicateKeyError, e: raise HTTPBadRequest('The Object already exists: ' '{0}'.format(e.message))
def put(self): obj = self.request.validated oid = self.request.matchdict['oid'] if oid != str(obj[self.key]): raise HTTPBadRequest('The object id is not the same that the id in' ' the url') if issubclass(self.schema_detail, Node): can_access_to_this_path(self.request, self.collection, oid) is_gecos_master_or_403(self.request, self.collection, obj, self.schema_detail) master_policy_no_updated_or_403(self.request, self.collection, obj) obj_filter = self.get_oid_filter(oid) obj_filter.update(self.mongo_filter) real_obj = self.collection.find_one(obj_filter) if not real_obj: raise HTTPNotFound() old_obj = deepcopy(real_obj) if not self.integrity_validation(obj, real_obj=real_obj): if len(self.request.errors) < 1: self.request.errors.add('body', 'object', 'Integrity error') logger.error("Integrity error in object: {0}".format(obj)) else: logger.error("Integrity error {0} in object: {1}".format( self.request.errors, obj)) return obj = self.pre_save(obj, old_obj=old_obj) if obj is None: return inheritance_backup = None if 'inheritance' in obj: # Do not save the inheritance field inheritance_backup = obj['inheritance'] del obj['inheritance'] real_obj.update(obj) try: self.collection.replace_one(obj_filter, real_obj) except DuplicateKeyError as e: raise HTTPBadRequest('Duplicated object {0}'.format(e.message)) obj = self.post_save(obj, old_obj=old_obj) self.notify_changed(obj, old_obj) obj = self.parse_item(obj) if inheritance_backup is not None: obj['inheritance'] = inheritance_backup return obj
def put(self): obj = self.request.validated oid = self.request.matchdict['oid'] if oid != str(obj[self.key]): raise HTTPBadRequest('The object id is not the same that the id in' ' the url') if issubclass(self.schema_detail, Node): can_access_to_this_path(self.request, self.collection, obj) is_gecos_master_or_403(self.request, self.collection, obj, self.schema_detail) master_policy_no_updated_or_403(self.request, self.collection, obj) obj_filter = self.get_oid_filter(oid) obj_filter.update(self.mongo_filter) real_obj = self.collection.find_one(obj_filter) if not real_obj: raise HTTPNotFound() old_obj = deepcopy(real_obj) if not self.integrity_validation(obj, real_obj=real_obj): if len(self.request.errors) < 1: self.request.errors.add('body', 'object', 'Integrity error') return obj = self.pre_save(obj, old_obj=old_obj) if obj is None: return inheritance_backup = None if 'inheritance' in obj: # Do not save the inheritance field inheritance_backup = obj['inheritance'] del obj['inheritance'] real_obj.update(obj) try: self.collection.update(obj_filter, real_obj, new=True) except DuplicateKeyError, e: raise HTTPBadRequest('Duplicated object {0}'.format( e.message))
def delete(self): oid = self.request.matchdict['oid'] if issubclass(self.schema_detail, Node): obj = self.collection.find_one({'_id': ObjectId(oid)}) can_access_to_this_path(self.request, self.collection, obj) is_gecos_master_or_403(self.request, self.collection, obj, self.schema_detail) master_policy_no_updated_or_403(self.request, self.collection, obj) filters = self.get_oid_filter(oid) filters.update(self.mongo_filter) obj = self.collection.find_one(filters) if not obj: raise HTTPNotFound() old_obj = deepcopy(obj) obj = self.pre_save(obj) if obj is None: return obj = self.pre_delete(obj) status = self.collection.remove(filters) if status['ok']: obj = self.post_save(obj, old_obj) obj = self.post_delete(obj) self.notify_deleted(obj) return { 'status': 'The object was deleted successfully', 'ok': 1 } else: self.request.errors.add(unicode(obj[self.key]), 'db status', status) return
def delete(self): oid = self.request.matchdict['oid'] if issubclass(self.schema_detail, Node): obj = self.collection.find_one({'_id': ObjectId(oid)}) can_access_to_this_path(self.request, self.collection, oid) is_gecos_master_or_403(self.request, self.collection, obj, self.schema_detail) master_policy_no_updated_or_403(self.request, self.collection, obj) filters = self.get_oid_filter(oid) filters.update(self.mongo_filter) obj = self.collection.find_one(filters) if not obj: raise HTTPNotFound() old_obj = deepcopy(obj) obj = self.pre_save(obj) if obj is None: return obj = self.pre_delete(obj) status = self.collection.delete_one(filters).raw_result if status['ok']: obj = self.post_save(obj, old_obj) obj = self.post_delete(obj) self.notify_deleted(obj) return {'status': 'The object was deleted successfully', 'ok': 1} else: self.request.errors.add('body', '%s: db status' % (obj[self.key]), status) return
def put(self): obj = self.request.validated oid = self.request.matchdict['oid'] if oid != str(obj[self.key]): raise HTTPBadRequest('The object id is not the same that the id in' ' the url') if issubclass(self.schema_detail, Node): can_access_to_this_path(self.request, self.collection, obj) is_gecos_master_or_403(self.request, self.collection, obj, self.schema_detail) master_policy_no_updated_or_403(self.request, self.collection, obj) obj_filter = self.get_oid_filter(oid) obj_filter.update(self.mongo_filter) real_obj = self.collection.find_one(obj_filter) if not real_obj: raise HTTPNotFound() old_obj = deepcopy(real_obj) if not self.integrity_validation(obj, real_obj=real_obj): if len(self.request.errors) < 1: self.request.errors.add('body', 'object', 'Integrity error') return obj = self.pre_save(obj, old_obj=old_obj) if obj is None: return real_obj.update(obj) try: self.collection.update(obj_filter, real_obj, new=True) except DuplicateKeyError, e: raise HTTPBadRequest('Duplicated object {0}'.format(e.message))