def root(): if request.json is None: print('Invalid Content-Type') return 'Content-Type must be application/json and the request body must contain valid JSON', 400 if SECRET: signature = request.headers.get('X-Hub-Signature', None) sig2 = SECRET.copy() sig2.update(request.data) if signature is None or sig2.hexdigest() != signature.split('=')[1]: return 'Invalid or missing X-Hub-Signature', 400 data = request.json event = request.headers['X-Github-Event'] msg = "" if event == "ping": msg = "ping from %s" % data['repository']['full_name'] elif event == "pull_request": if data['action'] == "opened": msg = PullRequest(data).opened() elif data['action'] == "closed": msg = PullRequest(data).closed() elif data['action'] == "assigned": msg = PullRequest(data).assigned() elif data['action'] == "synchronize": msg = PullRequest(data).synchronize() elif event == "issues": if data['action'] == "opened": msg = Issue(data).opened() elif data['action'] == "closed": msg = Issue(data).closed() elif data['action'] == "labeled": msg = Issue(data).labeled() elif data['action'] == "assigned": msg = Issue(data).assigned() elif event == "issue_comment": if data['action'] == "created": msg = IssueComment(data).created() elif event == "repository": if data['action'] == "created": msg = Repository(data).created() elif event == "create": if data['ref_type'] == "branch": msg = Branch(data).created() elif data['ref_type'] == "tag": msg = Tag(data).created() elif event == "delete": if data['ref_type'] == "branch": msg = Branch(data).deleted() elif event == "pull_request_review_comment": if data['action'] == "created": msg = PullRequestComment(data).created() elif event == "push": if not (data['deleted'] and data['forced']): if not data['ref'].startswith("refs/tags/"): msg = Push(data).commits() elif event == "commit_comment": if data['action'] == "created": msg = CommitComment(data).created() elif event == "gollum": msg = Wiki(data).updated() if msg: hook_info = get_hook_info(data) if hook_info: url, channel = get_hook_info(data) if hasattr(config, "GITHUB_IGNORE_ACTIONS") and \ event in config.GITHUB_IGNORE_ACTIONS and \ data['action'] in config.GITHUB_IGNORE_ACTIONS[event]: return "Notification action ignored (as per configuration)" post(msg, url, channel) return "Notification successfully posted to Mattermost" else: return "Notification ignored (repository is blacklisted)." else: return "Not implemented", 400
def root(hook_id, channel=None): if request.json is None: print('Invalid Content-Type') return 'Content-Type must be application/json and the request body must contain valid JSON', 400 if SECRET: signature = request.headers.get('X-Hub-Signature', None) sig2 = SECRET.copy() sig2.update(request.data) if signature is None or sig2.hexdigest() != signature.split('=')[1]: return 'Invalid or missing X-Hub-Signature', 400 channel = request.args.get('channel', None) data = request.json event = request.headers['X-Github-Event'] msg = "" if event == "ping": msg = "ping from %s" % data['repository']['full_name'] elif event == "pull_request": if data['action'] == "opened": msg = PullRequest(data).opened() elif data['action'] == "closed": msg = PullRequest(data).closed() elif data['action'] == "assigned": msg = PullRequest(data).assigned() elif data['action'] == "synchronize": msg = PullRequest(data).synchronize() elif event == "issues": if data['action'] == "opened": msg = Issue(data).opened() elif data['action'] == "closed": msg = Issue(data).closed() elif data['action'] == "labeled": msg = Issue(data).labeled() elif data['action'] == "assigned": msg = Issue(data).assigned() elif event == "issue_comment": if data['action'] == "created": msg = IssueComment(data).created() elif event == "repository": if data['action'] == "created": msg = Repository(data).created() elif event == "create": if data['ref_type'] == "branch": msg = Branch(data).created() elif data['ref_type'] == "tag": msg = Tag(data).created() elif event == "delete": if data['ref_type'] == "branch": msg = Branch(data).deleted() elif event == "pull_request_review": if data['action'] == "submitted": msg = PullRequestReview(data).submitted() elif event == "pull_request_review_comment": if data['action'] == "created": msg = PullRequestComment(data).created() elif event == "push": if not (data['deleted'] and data['forced']): if not data['ref'].startswith("refs/tags/"): msg = Push(data).commits() elif event == "commit_comment": if data['action'] == "created": msg = CommitComment(data).created() elif event == "gollum": msg = Wiki(data).updated() elif event == "status": if data["state"] in ["failure", "error"]: msg = Status(data).updated() if msg: post(msg, config.MATTERMOST_WEBHOOK_URL.rstrip( '/') + '/' + hook_id, channel) return "Notification posted to Mattermost" else: return "Not implemented", 400