Major update. Now uses Flask instead of web.py, and authenticates via OpenID.