def delete(alert_id): """Delete the alert with id `alert_id`. --- delete: summary: Delete an alert parameters: - description: The alert ID. in: path name: alert_id required: true schema: minimum: 1 type: integer example: 2 responses: '204': description: No Content tags: - Alert """ require(request.authz.session_write) alert = obj_or_404(Alert.by_id(alert_id, role_id=request.authz.id)) alert.delete() db.session.commit() return ("", 204)
def check_alert(alert_id): alert = Alert.by_id(alert_id) if alert is None or alert.role is None: return if not alert.role.is_alertable: return authz = Authz.from_role(alert.role) query = alert_query(alert, authz) index = entities_read_index(schema=Entity.THING) result = es.search(index=index, body=query) for result in result.get('hits').get('hits', []): entity = unpack_result(result) if entity is None: continue log.info('Alert [%s]: %s', alert.query, entity.get('name')) params = { 'alert': alert, 'role': alert.role, 'entity': entity } publish(Events.MATCH_ALERT, actor_id=entity.get('uploader_id'), params=params) alert.update() db.session.commit() db.session.close()
def check_alert(alert_id): alert = Alert.by_id(alert_id) if alert is None or alert.role is None: return log.info("Check alert [%s]: %s", alert.id, alert.query) authz = Authz.from_role(alert.role) try: query = alert_query(alert, authz) index = entities_read_index(schema=Entity.THING) result = es.search(index=index, body=query) except RequestError as re: log.error("Invalid query [%s]: %r", alert.query, re.error) alert.delete() db.session.commit() return for result in result.get("hits").get("hits", []): entity = unpack_result(result) if entity is None: continue log.info("Alert [%s]: %s", alert.query, entity.get("id")) params = { "alert": alert, "role": alert.role, "entity": entity.get("id"), "collection": entity.get("collection_id"), } channels = [alert.role] # channels.append(channel_tag(collection_id, Collection)) publish(Events.MATCH_ALERT, params=params, channels=channels) alert.update() db.session.commit()
def check_alert(alert_id): alert = Alert.by_id(alert_id) if alert is None or alert.role is None: return log.info("Check alert [%s]: %s", alert.id, alert.query) authz = Authz.from_role(alert.role) query = alert_query(alert, authz) index = entities_read_index(schema=Entity.THING) result = es.search(index=index, body=query) for result in result.get('hits').get('hits', []): entity = unpack_result(result) if entity is None: continue log.info('Alert [%s]: %s', alert.query, entity.get('name')) params = { 'alert': alert, 'role': alert.role, 'entity': entity.get('id') } publish(Events.MATCH_ALERT, params=params, channels=[alert.role]) db.session.flush() alert.update() db.session.commit() db.session.close()
def delete(id): authz.require(authz.logged_in()) alert = obj_or_404(Alert.by_id(id, role=request.auth_role)) alert.delete() db.session.commit() log_event(request) return jsonify({'status': 'ok'})
def create(): # also handles update data = request.get_json() print(data) if 'query_text' not in data: return jsonify({'status': 'invalid'}) authz.require(authz.logged_in()) if data.get('alert_id', None): # UPDATE alert_id = int(data['alert_id']) alert = obj_or_404(Alert.by_id(alert_id)) authz.require(alert.role_id == request.auth_role.id) alert.query_text = data['query_text'] alert.custom_label = data.get('custom_label' '') or data['query_text'] alert.checking_interval=int(data.get('checking_interval', 9)) else: # CREATE alert = Alert( role_id = request.auth_role.id, query_text=data['query_text'], custom_label=data.get('custom_label' '') or data['query_text'], checking_interval=int(data.get('checking_interval', 9)) ) db.session.add(alert) db.session.commit() return view(alert.id)
def delete(id): authz.require(authz.logged_in()) alert = obj_or_404(Alert.by_id(id)) authz.require(alert.user_id == current_user.id) db.session.delete(alert) db.session.commit() return jsonify({'status': 'ok'})
def delete(id): request.authz.require(request.authz.session_write()) alert = obj_or_404(Alert.by_id(id, role=request.authz.role)) alert.delete() db.session.commit() log_event(request) return jsonify({'status': 'ok'})
def view(alert_id): """Return the alert with id `alert_id`. --- get: summary: Fetch an alert parameters: - description: The alert ID. in: path name: alert_id required: true schema: minimum: 1 type: integer example: 2 responses: '200': content: application/json: schema: $ref: '#/components/schemas/Alert' description: OK tags: - Alert """ require(request.authz.logged_in) alert = obj_or_404(Alert.by_id(alert_id, role_id=request.authz.id)) return AlertSerializer.jsonify(alert)
def get_alert(alert_id): key = cache.object_key(Alert, alert_id) data = cache.get_complex(key) if data is None: alert = Alert.by_id(alert_id) if alert is None: return data = { 'id': alert.id, 'query': alert.query, 'role_id': alert.role_id, 'notified_at': alert.notified_at, 'created_at': alert.created_at, 'updated_at': alert.updated_at } cache.set_complex(key, data, expire=cache.EXPIRE) return data
def check_alert(alert_id): alert = Alert.by_id(alert_id) if alert is None: return authz = Authz.from_role(alert.role) query = alert_query(alert, authz) found = 0 for result in scan(es, query=query, index=entities_index()): entity = unpack_result(result) found += 1 params = {'alert': alert, 'role': alert.role, 'entity': entity} publish(Events.MATCH_ALERT, actor_id=entity.get('uploader_id'), params=params) db.session.commit() alert.update() log.info('Found %d new results for: %s', found, alert.label) db.session.commit() db.session.close()
def create(): ''' should also handle update''' authz.require(authz.logged_in()) data = request.get_json() print(data) validate(data, alerts_schema) if data['alert_id']: # UPDATE alert_id = int(data['alert_id']) alert = obj_or_404(Alert.by_id(alert_id)) authz.require(alert.user_id == current_user.id) alert.query = data['query'] alert.label = data.get('custom_label', data['query']) alert.checking_interval=int(data.get('checking_interval', 9)) else: # CREATE alert = Alert( user_id = current_user.id, query=data['query'], label=data.get('custom_label', data['query']), checking_interval=int(data.get('checking_interval', 9)) ) db.session.add(alert) db.session.commit() return view(alert.id)
def resolve_id(object_id, clazz): """From an object ID and class type, generate a human-readable label and a link that can be rendered into the notification. """ if clazz == Role: role = Role.by_id(object_id) return role.name, None elif clazz == Alert: alert = Alert.by_id(object_id) return alert.query, None elif clazz == Collection: collection = Collection.by_id(object_id) if collection is not None: return collection.label, collection_url(object_id) elif clazz in [Document, Entity]: entity = get_entity(object_id) if entity is not None: if Document.SCHEMA in entity.get('schemata'): title = entity.get('title', entity.get('file_name')) return title, document_url(object_id) else: return entity.get('name'), entity_url(object_id) return None, None
def get_alert(alert_id): alert = Alert.by_id(alert_id) if alert is not None: return alert.to_dict()
def view(alert_id): require(request.authz.logged_in) alert = obj_or_404(Alert.by_id(alert_id, role_id=request.authz.id)) return AlertSerializer.jsonify(alert)
def view(id): authz.require(authz.logged_in()) alert = obj_or_404(Alert.by_id(id)) authz.require(alert.user_id == current_user.id) return jsonify(alert)
def delete(id): require(request.authz.session_write) alert = obj_or_404(Alert.by_id(id, role_id=request.authz.id)) alert.delete() db.session.commit() return ('', 204)
def view(id): require(request.authz.logged_in) alert = obj_or_404(Alert.by_id(id, role_id=request.authz.id)) return serialize_data(alert, AlertSchema)
def delete(alert_id): require(request.authz.session_write) alert = obj_or_404(Alert.by_id(alert_id, role_id=request.authz.id)) alert.delete() db.session.commit() return ('', 204)
def view(id): enable_cache(vary_user=True) request.authz.require(request.authz.logged_in) alert = obj_or_404(Alert.by_id(id, role=request.authz.role)) return jsonify(alert)
def delete(id): authz.require(authz.logged_in()) alert = obj_or_404(Alert.by_id(id, role=request.auth_role)) alert.delete() db.session.commit() return jsonify({'status': 'ok'})
def get_alert(alert_id): alert = Alert.by_id(alert_id, deleted=True) if alert is not None: return alert.to_dict()
def view(id): require(request.authz.logged_in) alert = obj_or_404(Alert.by_id(id, role_id=request.authz.id)) return AlertSerializer.jsonify(alert)
def view(id): enable_cache(vary_user=True) authz.require(authz.logged_in()) alert = obj_or_404(Alert.by_id(id, role=request.auth_role)) return jsonify(alert)
def view(id): require(request.authz.logged_in) alert = obj_or_404(Alert.by_id(id, role=request.authz.role)) return jsonify(alert, schema=AlertSchema)