#!/usr/bin/env python

# The purpose of this file is to handle all requests
# to the Github API, which will make sure that all
# requests are to the same account, and that all requests
# authenticated correctly and securely
# The sole purpose of this is to authenticate, and it will
# return the requests session that is properly authenticated
import logging
import os
import requests
import six.moves.configparser


# This file contains the oauth token for a github user, their username, and optionally, a repository
# name and owner. All in the format:
# github_repo
# github_repo_owner
# github_username
# github_token
CONFIG_FILE = '~/.github-auth.conf'

global config
config = six.moves.configparser.ConfigParser()  # Sets up the configParser to read the .conf file
config.read([os.path.expanduser(CONFIG_FILE)])  # Reads the config file


def auth():
    # Creates and authorises a requests session
    session = requests.session()
    session.auth = (get_username(), get_oauth_token())

    return session


def get_oauth_token():
    _get_data('token')


def get_username():
    _get_data('username')


def get_repo():
    _get_data('repo')


def get_repo_owner():
    _get_data('repo_owner')


def _get_data(key):
    try:
        return config.get('github', 'github_%s' % (key))
    except Exception:
        logging.exception('GitHub %s not supplied in ~/.github-auth.conf.' % (key))