diff options
author | Ralf Jung <post@ralfj.de> | 2015-02-22 16:14:46 +0100 |
---|---|---|
committer | Ralf Jung <post@ralfj.de> | 2015-02-22 16:14:46 +0100 |
commit | 7373610f7eb8e516b6610370411b57a20e7af2a0 (patch) | |
tree | 0601cdada6949055bc9c0c454ceb98d8930d6ad7 /webhook.py | |
parent | 2e049a06806faee3cfd40bb36adeffddacce9620 (diff) |
add support for github -> local sync
Diffstat (limited to 'webhook.py')
-rwxr-xr-x | webhook.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/webhook.py b/webhook.py new file mode 100755 index 0000000..a7ae5f8 --- /dev/null +++ b/webhook.py @@ -0,0 +1,22 @@ +#!/usr/bin/python3 +import urllib.request, urllib.parse, json, os, sys + +def is_github(remote_addr): + '''Returns whether the address is a github hook address. This function requires Python 3.3.''' + from ipaddress import ip_address, ip_network + remote_addr = ip_address(ip_network) + github = urllib.request.urlopen('https://api.github.com/meta').read() + github = json.loads(github.decode('utf-8')) + for net in github['hooks']: + if remote_addr in ip_network(net): + return True + +# get repository from query string +query = os.getenv("QUERY_STRING") +query = urllib.parse.parse_qs(query) +repository = query.get('repository', []) +repository = repository[0] if len(repository) else '' + +# execute the actual script +git_mirror = "/home/ralf/git-mirror/update.py" +os.execlp("sudo", "sudo", "-n", "-u", "git", git_mirror, "--web-hook", "--repository", repository) |