Package coprs :: Package views :: Package webhooks_ns :: Module webhooks_general
[hide private]
[frames] | no frames]

Source Code for Module coprs.views.webhooks_ns.webhooks_general

  1  import flask 
  2   
  3  from coprs import db, app 
  4  from coprs import helpers 
  5   
  6  from coprs.logic.builds_logic import BuildsLogic 
  7  from coprs.logic.complex_logic import ComplexLogic 
  8  from coprs.logic.coprs_logic import CoprsLogic 
  9  from coprs.logic.packages_logic import PackagesLogic 
 10   
 11  from coprs.exceptions import ObjectNotFound, AccessRestricted 
 12   
 13  from coprs.views.webhooks_ns import webhooks_ns 
 14  from coprs.views.misc import page_not_found, access_restricted 
 15   
 16  import logging 
 17  import os 
 18   
 19  log = logging.getLogger(__name__) 
 20   
 21   
 22  @webhooks_ns.route("/github/<copr_id>/<uuid>/", methods=["POST"]) 
23 -def webhooks_git_push(copr_id, uuid):
24 # For the documentation of the data we receive see: 25 # https://developer.github.com/v3/activity/events/types/#pushevent 26 try: 27 copr = ComplexLogic.get_copr_by_id_safe(copr_id) 28 except ObjectNotFound: 29 return page_not_found("Project does not exist") 30 31 if copr.webhook_secret != uuid: 32 return access_restricted("This webhook is not valid") 33 34 try: 35 payload = flask.request.json 36 clone_url = payload['repository']['clone_url'] 37 commits = [] 38 payload_commits = payload.get('commits', []) 39 for payload_commit in payload_commits: 40 commits.append({ 41 'added': payload_commit['added'], 42 'modified': payload_commit['modified'], 43 'removed': payload_commit['removed'], 44 }) 45 46 ref_type = payload.get('ref_type', '') 47 ref = payload.get('ref', '') 48 except KeyError: 49 return "Bad Request", 400 50 51 packages = PackagesLogic.get_for_webhook_rebuild(copr_id, uuid, clone_url, commits, ref_type, ref) 52 53 for package in packages: 54 BuildsLogic.rebuild_package(package) 55 56 db.session.commit() 57 58 return "OK", 200
59 60 @webhooks_ns.route("/gitlab/<copr_id>/<uuid>/", methods=["POST"])
61 -def webhooks_gitlab_push(copr_id, uuid):
62 # For the documentation of the data we receive see: 63 # https://gitlab.com/help/user/project/integrations/webhooks#events 64 try: 65 copr = ComplexLogic.get_copr_by_id_safe(copr_id) 66 except ObjectNotFound: 67 return page_not_found("Project does not exist") 68 69 if copr.webhook_secret != uuid: 70 return access_restricted("This webhook is not valid") 71 72 try: 73 payload = flask.request.json 74 clone_url = payload['project']['git_http_url'] 75 commits = [] 76 payload_commits = payload.get('commits', []) 77 for payload_commit in payload_commits: 78 commits.append({ 79 'added': payload_commit['added'], 80 'modified': payload_commit['modified'], 81 'removed': payload_commit['removed'], 82 }) 83 if payload['object_kind'] == 'tag_push': 84 ref_type = 'tag' 85 ref = os.path.basename(payload.get('ref', '')) 86 else: 87 ref_type = None 88 ref = payload.get('ref', '') 89 except KeyError: 90 return "Bad Request", 400 91 92 packages = PackagesLogic.get_for_webhook_rebuild(copr_id, uuid, clone_url, commits, ref_type, ref) 93 94 for package in packages: 95 BuildsLogic.rebuild_package(package) 96 97 db.session.commit() 98 99 return "OK", 200
100