Thermos is a simple Django-like user-management system written in python, designed to be used with bottle.py, SQLAlchemy and repoze.what.
Thermos is free software, licenced under the GNU General Public Licence, version 3
from bottle import route, run, app, get, post, abort, request, debug from bottle import template, redirect from repoze.what.plugins.quickstart import setup_sql_auth from thermos.auth.models import User, Group, Permission, ThermosBase, translations from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker import logging, sys import os import pprint @get('/') def root(): identity = request.environ.get('repoze.who.identity') if identity is None: return "<p>Not logged in. <a href='/login'>Login</a>" user = identity.get('repoze.who.userid') return "Logged in as %s. <a href='/logout_handler'>Logout</a>" % (user) @route('/login') def login(): came_from = request.params.get("came_from") or "/" return template("login", came_from=came_from) @route('/welcome_back') def post_login(): identity = request.environ.get('repoze.who.identity') if identity is None: return "<p>Username or password incorrect. <a href='/login'>Login</a>" came_from = request.params.get("came_from") or "/" return "<p>You are now logged in. <a href='/logout_handler'>Logout</a></p>" @route('/see_you_later') def post_login(): return "<p>You are now logged out. <a href='/'>Home</a></p>" def add_auth(app,session): return setup_sql_auth(app=app, user_class=User, group_class=Group, permission_class=Permission, dbsession=session, post_login_url='/welcome_back', post_logout_url='/see_you_later', translations=translations) log_stream = None if os.environ.get('WHO_LOG'): log_stream = sys.stdout engine = create_engine('sqlite:///:memory:', echo=False) ThermosBase.metadata.create_all(engine) Session = sessionmaker(bind=engine) session = Session() middleware = add_auth(app(),session) admins = Group(u'admins') session.add(admins) admin = User(u'admin') admin.set_password('admin') admin.groups.append(admins) session.add(admin) session.commit() run(app=middleware, host='0.0.0.0', port=8080, reloader=True)