Implement against new Clair paginated notification system
This commit is contained in:
parent
b34314a584
commit
f498e92d58
10 changed files with 447 additions and 101 deletions
|
@ -3,23 +3,30 @@ import json
|
|||
|
||||
import features
|
||||
|
||||
from app import secscan_notification_queue
|
||||
from flask import request, make_response, Blueprint
|
||||
from app import secscan_notification_queue, secscan_api
|
||||
from flask import request, make_response, Blueprint, abort
|
||||
from endpoints.common import route_show_if
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
secscan = Blueprint('secscan', __name__)
|
||||
|
||||
@route_show_if(features.SECURITY_SCANNER)
|
||||
@secscan.route('/notification', methods=['POST'])
|
||||
@secscan.route('/notify', methods=['POST'])
|
||||
def secscan_notification():
|
||||
data = request.get_json()
|
||||
logger.debug('Got notification from Clair: %s', data)
|
||||
logger.debug('Got notification from Security Scanner: %s', data)
|
||||
if 'Notification' not in data:
|
||||
abort(400)
|
||||
|
||||
content = data['Content']
|
||||
layer_ids = content.get('NewIntroducingLayersIDs', content.get('IntroducingLayersIDs', []))
|
||||
if not layer_ids:
|
||||
return make_response('Okay')
|
||||
notification = data['Notification']
|
||||
|
||||
# Queue the notification to be processed.
|
||||
item_id = secscan_notification_queue.put(['named', notification['Name']],
|
||||
json.dumps(notification))
|
||||
|
||||
# Mark the notification as read.
|
||||
if not secscan_api.mark_notification_read(notification['Name']):
|
||||
secscan_notification_queue.cancel(item_id)
|
||||
abort(400)
|
||||
|
||||
secscan_notification_queue.put(['notification', data['Name']], json.dumps(data))
|
||||
return make_response('Okay')
|
||||
|
|
Reference in a new issue