src.dualinventive.com/devops/ansible/roles/common/files/di-gogs-sshkeys.py

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()