#!/usr/bin/env python
import json, requests, os, sys, tempfile
import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()

config_path = '/etc/github_users.conf'
data = False

with open(config_path) as data_file:
    config = json.load(data_file)

ORG = config['organization']
TOKEN= config['github_token']
GLOBAL_USER = config['global_user']
SSH_DIR = "/home/%s/.ssh" % GLOBAL_USER
OUTPUT = "%s/authorized_keys" % SSH_DIR

API_URL = 'https://api.github.com'
ORG_MEMBERS_URI = '/orgs/%s/members' % ORG
USER_KEYS_URI = '/users/%s/keys'

def get_w_auth(service):
    url = '%s%s?per_page=1000&access_token=%s' % (API_URL, service, TOKEN)
    r = requests.get(url)
    return r

def get_team_id(team_name):
    teams_service = '/orgs/%s/teams' % (ORG)
    r = get_w_auth(teams_service)
    if r.status_code != 200:
        return False
    teams = r.json()
    team = filter(lambda t: t['name'] == team_name, teams)
    if len(team) == 0:
        return False
    return team[0]['id']

def get_team_members(team_name):
    team_id = get_team_id(team_name)
    service = '/teams/%s/members' % team_id
    r = get_w_auth(service)
    if r.status_code != 200:
        return False
    members = r.json()
    return members


TMP_OUTPUT = False
with tempfile.NamedTemporaryFile(mode='w', delete=False) as fi:
    TMP_OUTPUT = fi.name
    members = get_team_members(config['team'])

    for user in members:
        username = user['login']
        r = requests.get('https://github.com/%s.keys' % username)
        if r.ok:
            fi.write('# %s\n' % username)
            fi.write('%s\n' % r.text)

if not os.path.isdir(SSH_DIR):
    os.mkdir(SSH_DIR)
os.rename(TMP_OUTPUT, OUTPUT)
