#!/usr/bin/env python3

from rauth import OAuth1Session
from bottle import redirect, request, response, route, run

from common import *

COOKIE_NAME = 'c'

# This secret is used for signing cookies.
# Generate a value with uuidgen.
SECRET = None

HOST = 'localhost'
PORT = 8090

# In your SmugMug Account Settings, configure your API Key
# to use this callback URI.
CALLBACK_URI = 'http://' + HOST + ':' + str(PORT) + '/callback'

@route('/')
def index():
    return '''
        <html><body><ul>
            <li><a href='/authorize'>Authorize</a></li>
            <li>
                <form action='/test' method='GET'>
                    <label for='path'>API URI Path:</label>
                    <input type='text' name='path' id='path'
                        value='/api/v2!authuser'>
                    <input type='submit' value='GET'>
                </form>
            </li>
        </ul></body></html>
    ''';

def set_cookie(obj):
    response.set_cookie(
            COOKIE_NAME, obj, secret=SECRET, httponly=True, path='/')

@route('/authorize')
def authorize():
    rt, rts = SERVICE.get_request_token(params={'oauth_callback': 'http://localhost:8090/callback'})
    set_cookie({'rt': rt, 'rts': rts})
    auth_url = SERVICE.get_authorize_url(rt)
    redirect(auth_url)

@route('/callback')
def callback():
    cookie = request.get_cookie(COOKIE_NAME, secret=SECRET)
    at, ats = SERVICE.get_access_token(cookie['rt'], cookie['rts'], params={'oauth_verifier': request.query['oauth_verifier']})
    set_cookie({'at': at, 'ats': ats})
    redirect('/')

@route('/test')
def test():
    cookie = request.get_cookie(COOKIE_NAME, secret=SECRET)
    session = OAuth1Session(
            API_KEY, API_KEY_SECRET,
            access_token=cookie['at'], access_token_secret=cookie['ats'])
    response.set_header('Content-Type', 'application/json')
    return session.get(
            API_ORIGIN + request.query['path'],
            headers={'Accept': 'application/json'}).text

if __name__ == '__main__':
    run(host=HOST, port=PORT)