#!/usr/bin/env python2 import os import sys import json import socket import urllib2 import time if len(sys.argv) == 1: print "Error not supplied!" sys.exit(1) configfile = '/etc/di-gogs-sshkeys.conf' if len(sys.argv) > 2: configfile = sys.argv[2] # Load configuration from JSON file f = open(configfile, 'r') cfg = json.load(f) f.close() # Set user, user keyfile, and api endpoint user = sys.argv[1] user_keys_file = cfg['cachedir'] + '/' + user gogs_api_keys_endpoint = '/users/' + user + '/keys' def gogs_api_read(endpoint): url = cfg['gogs_api_url'] + endpoint + '?token=' + cfg['gogs_api_token'] req = urllib2.Request(url) try: res = urllib2.urlopen(req, timeout=5) except socket.timeout, e: print "# url timeout" return None except: print "# url error" return None return res.read() def user_load_keys(): keys = "" try: with open(user_keys_file, 'r') as keys: keys = keys.read() except: return "" f.close() return keys def user_store_keys(data): try: f = open(user_keys_file, 'w') keys = json.loads(data) except: return f.write("###\n") f.write("# last fetch: " + time.strftime("%Y-%m-%d %H:%M:%S") + '\n') f.write("# user: " + user + '\n') f.write("# url: " + cfg['gogs_api_url'] + '\n') f.write("###\n") for k in keys: key = k['key'].strip(' \t\r\n') f.write(key + '\n') f.close() def user_fetch_keys(): data = gogs_api_read(gogs_api_keys_endpoint) if data != None: user_store_keys(data) print user_load_keys() ### # Start work now ### if not os.path.exists(cfg['cachedir']): os.makedirs(cfg['cachedir']) if user == "ansible": sys.exit(0) user_fetch_keys()