#!/usr/bin/python

import os
import base64
from wsgiref.simple_server import make_server
from webob.dec import wsgify
from webob import exc
from yubiadmin import server
from yubiadmin.static import FileApp, DirectoryApp
from yubiadmin.config import settings

REALM = 'YubiADMIN'
STATIC_ASSETS = ['js', 'css', 'img', 'favicon.ico']


if __name__ == '__main__':
    # TODO: Take command line args to set port.
    mod_dir = os.path.dirname(server.__file__)
    base_dir = os.path.abspath(os.path.join(mod_dir))
    static_dir = os.path.join(base_dir, 'static')

    static_app = DirectoryApp(static_dir)
    favicon_app = FileApp(os.path.join(static_dir, 'favicon.ico'))

    @wsgify
    def with_static(request):
        if request.authorization:
            _, auth = request.authorization
            if base64.b64decode(auth) == '%s:%s' % (settings['user'],
                                                    settings['pass']):
                base = request.path_info_peek()
                if base in STATIC_ASSETS:
                    return request.get_response(static_app)
                return request.get_response(server.application)

        #Deny access
        response = exc.HTTPUnauthorized()
        response.www_authenticate = ('Basic', {'realm': REALM})
        return response

    httpd = make_server(settings['iface'], settings['port'], with_static)
    httpd.serve_forever()
