summaryrefslogtreecommitdiffstats
path: root/gitautodeploy/parsers/coding.py
diff options
context:
space:
mode:
authorOliver Poignant <oliver@poignant.se>2016-08-26 23:07:25 +0200
committerOliver Poignant <oliver@poignant.se>2016-08-26 23:07:25 +0200
commit8e9f5e90c9f1a7aacb4fc4f4313beb1e47e6907c (patch)
treeb6ff14d04f38e6b6a35ba91ebb0dca080d5426df /gitautodeploy/parsers/coding.py
parent52a1ed53d3790733d16c6f3dde6990c27bebd267 (diff)
parent654c925b66c2ff09bfe20cf9d5eaa4929cf78da6 (diff)
downloadGit-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.py54
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