diff options
author | Oliver Poignant <oliver@poignant.se> | 2016-08-26 23:07:25 +0200 |
---|---|---|
committer | Oliver Poignant <oliver@poignant.se> | 2016-08-26 23:07:25 +0200 |
commit | 8e9f5e90c9f1a7aacb4fc4f4313beb1e47e6907c (patch) | |
tree | b6ff14d04f38e6b6a35ba91ebb0dca080d5426df /gitautodeploy/parsers/coding.py | |
parent | 52a1ed53d3790733d16c6f3dde6990c27bebd267 (diff) | |
parent | 654c925b66c2ff09bfe20cf9d5eaa4929cf78da6 (diff) | |
download | Git-Auto-Deploy-8e9f5e90c9f1a7aacb4fc4f4313beb1e47e6907c.zip Git-Auto-Deploy-8e9f5e90c9f1a7aacb4fc4f4313beb1e47e6907c.tar.gz Git-Auto-Deploy-8e9f5e90c9f1a7aacb4fc4f4313beb1e47e6907c.tar.bz2 |
Merge branch 'master' of git://github.com/xohozu/Git-Auto-Deploy into xohozu-master
Diffstat (limited to 'gitautodeploy/parsers/coding.py')
-rw-r--r-- | gitautodeploy/parsers/coding.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/gitautodeploy/parsers/coding.py b/gitautodeploy/parsers/coding.py new file mode 100644 index 0000000..80ab77e --- /dev/null +++ b/gitautodeploy/parsers/coding.py @@ -0,0 +1,54 @@ +from common import WebhookRequestParser + +class CodingRequestParser(WebhookRequestParser): + + def get_repo_params_from_request(self, request_headers, request_body): + import json + import logging + + logger = logging.getLogger() + data = json.loads(request_body) + + repo_urls = [] + ref = "" + action = "" + + coding_event = 'x-coding-event' in request_headers and request_headers['x-coding-event'] + + logger.debug("Received '%s' event from Coding" % coding_event) + + if 'repository' not in data: + logger.error("Unable to recognize data format") + return [], ref or "master", action + + # One repository may posses multiple URLs for different protocols + for k in ['web_url', 'https_url', 'ssh_url']: + if k in data['repository']: + repo_urls.append(data['repository'][k]) + + # extract the branch + if 'ref' in data: + ref = data['ref'] + + # set the action + if 'event' in data: + action = data['event'] + + # Get a list of configured repositories that matches the incoming web hook reqeust + items = self.get_matching_repo_configs(repo_urls) + + repo_configs = [] + for repo_config in items: + # Validate secret token if present + if 'secret-token' in repo_config: + if 'token' not in data or not self.verify_token(repo_config['secret-token'], data['token']): + logger.warning("Request token does not match the 'secret-token' configured for repository %s." % repo_config['url']) + continue + + repo_configs.append(repo_config) + + return repo_configs, ref or "master", action, repo_urls + + + def verify_token(self, secret_token, request_token): + return secret_token == request_token |