コード例 #1
0
ファイル: alerts_api.py プロジェクト: wayne9qiu/aleph
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)
コード例 #2
0
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()
コード例 #3
0
ファイル: alerts.py プロジェクト: wayne9qiu/aleph
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()
コード例 #4
0
ファイル: alerts.py プロジェクト: wdsn/aleph
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()
コード例 #5
0
ファイル: alerts_api.py プロジェクト: CodeForAfrica/aleph
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'})
コード例 #6
0
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)
コード例 #7
0
ファイル: alerts_api.py プロジェクト: OpenOil-UG/aleph
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'})
コード例 #8
0
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'})
コード例 #9
0
ファイル: alerts_api.py プロジェクト: vied12/aleph
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'})
コード例 #10
0
ファイル: alerts_api.py プロジェクト: wayne9qiu/aleph
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)
コード例 #11
0
ファイル: alerts.py プロジェクト: jbaehne/aleph
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
コード例 #12
0
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()
コード例 #13
0
ファイル: alerts_api.py プロジェクト: OpenOil-UG/aleph
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)
コード例 #14
0
ファイル: notifications.py プロジェクト: jbaehne/aleph
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
コード例 #15
0
ファイル: alerts.py プロジェクト: wdsn/aleph
def get_alert(alert_id):
    alert = Alert.by_id(alert_id)
    if alert is not None:
        return alert.to_dict()
コード例 #16
0
ファイル: alerts_api.py プロジェクト: pudo/aleph
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)
コード例 #17
0
ファイル: alerts_api.py プロジェクト: vied12/aleph
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)
コード例 #18
0
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)
コード例 #19
0
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)
コード例 #20
0
ファイル: alerts_api.py プロジェクト: pudo/aleph
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)
コード例 #21
0
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)
コード例 #22
0
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'})
コード例 #23
0
ファイル: alerts.py プロジェクト: ponycalypsenow/aleph
def get_alert(alert_id):
    alert = Alert.by_id(alert_id, deleted=True)
    if alert is not None:
        return alert.to_dict()
コード例 #24
0
ファイル: alerts_api.py プロジェクト: modulexcite/aleph
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)
コード例 #25
0
ファイル: alerts_api.py プロジェクト: CodeForAfrica/aleph
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)
コード例 #26
0
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)
コード例 #27
0
ファイル: alerts_api.py プロジェクト: OpenOil-UG/aleph
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)