From 09feb2b04ab827f6658f2e9a58248957ae66d391 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Aug 08 2016 17:30:38 +0000 Subject: Rework the API endpoint receiving the notifications from jenkins --- diff --git a/pagure/api/ci/jenkins.py b/pagure/api/ci/jenkins.py index ab05532..2d01423 100644 --- a/pagure/api/ci/jenkins.py +++ b/pagure/api/ci/jenkins.py @@ -15,29 +15,33 @@ from sqlalchemy.exc import SQLAlchemyError import pagure import pagure.exceptions import pagure.lib +import pagure.lib.lib_ci as lib_ci from pagure import APP, SESSION from pagure.api import API, APIERROR @API.route('/ci/jenkins//build-finished', methods=['POST']) -def ci_notification(pagure_ci_token): +def jenkins_ci_notification(pagure_ci_token): """ Flag a pull-request based on the info provided by the CI service. """ - try: - data = flask.request.json() - cfg = jenkins_hook.get_configs( - data['name'], jenkins_hook.Service.JENKINS)[0] - build_id = data['build']['number'] + project = lib_ci.get_project_by_ci_token(SESSION, pagure_ci_token) + if not project: + flask.abort(404, 'No project corresponding to this CI token') + + data = flask.request.json() + if not data: + flask.abort(400, "Bad Request: No JSON retrived") - if not constant_time.bytes_eq( - to_bytes(pagure_ci_token), to_bytes(cfg.pagure_ci_token)): - return ('Token mismatch', 401) + build_id = data.get('build', {}).get('number') + if not build_it: + flask.abort(400, "Bad Request: No build ID retrived") - except (TypeError, ValueError, KeyError, jenkins_hook.ConfigNotFound) as exc: - APP.logger.error('Error processing jenkins notification', exc_info=exc) - flask.abort(400, "Bad Request") + try: + lib_ci.process_jenkins_build(project, build_id) + except pagure.exceptions.PagureException as err: + APP.logger.error('Error processing jenkins notification', exc_info=err) + flask.abort(400, "Bad Request: %s" % err) - APP.logger.info('Received jenkins notification') - pagure_ci.process_build(APP.logger, cfg, build_id) + APP.logger.info('Successfully proccessed jenkins notification') return ('', 204)