87 lines
1.6 KiB
Python
Executable File
87 lines
1.6 KiB
Python
Executable File
#!/usr/bin/env python2
|
|
import os
|
|
import sys
|
|
import json
|
|
import socket
|
|
import urllib2
|
|
import time
|
|
|
|
if len(sys.argv) == 1:
|
|
print "Error <user> 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()
|