Mercurial > piecrust2
view foodtruck/web.py @ 587:d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sat, 16 Jan 2016 14:24:35 -0800 |
parents | |
children | 79a31a3c947b |
line wrap: on
line source
import logging from flask import Flask, g, request, render_template from .config import ( FoodTruckConfigNotFoundError, get_foodtruck_config) from .sites import FoodTruckSites logger = logging.getLogger(__name__) app = Flask(__name__) c = get_foodtruck_config() app.secret_key = c.get('foodtruck/secret_key') del c def after_this_request(f): if not hasattr(g, 'after_request_callbacks'): g.after_request_callbacks = [] g.after_request_callbacks.append(f) return f class LazySomething(object): def __init__(self, factory): self._factory = factory self._something = None def __getattr__(self, name): if self._something is not None: return getattr(self._something, name) self._something = self._factory() return getattr(self._something, name) @app.before_request def _setup_foodtruck_globals(): def _get_sites(): s = FoodTruckSites(g.config, request.cookies.get('foodtruck_site_name')) return s g.config = LazySomething(get_foodtruck_config) g.sites = LazySomething(_get_sites) @app.after_request def _call_after_request_callbacks(response): for callback in getattr(g, 'after_request_callbacks', ()): callback(response) return response @app.errorhandler(FoodTruckConfigNotFoundError) def _on_config_missing(ex): return render_template('install.html') @app.errorhandler def _on_error(ex): logging.exception(ex) from flask.ext.login import LoginManager, UserMixin class User(UserMixin): def __init__(self, uid, pwd): self.id = uid self.password = pwd def load_user(user_id): admin_id = g.config.get('security/username') if admin_id == user_id: admin_pwd = g.config.get('security/password') return User(admin_id, admin_pwd) return None login_manager = LoginManager() login_manager.init_app(app) login_manager.login_view = 'login' login_manager.user_loader(load_user) try: from flask.ext.bcrypt import Bcrypt except ImportError: logging.warning("Bcrypt not available... falling back to SHA512.") logging.warning("Run `pip install Flask-Bcrypt` for more secure " "password hashing.") import hashlib def generate_password_hash(password): return hashlib.sha512(password.encode('utf8')).hexdigest() def check_password_hash(reference, check): check_hash = hashlib.sha512(check.encode('utf8')).hexdigest() return check_hash == reference class SHA512Fallback(object): def __init__(self, app=None): self.generate_password_hash = generate_password_hash self.check_password_hash = check_password_hash Bcrypt = SHA512Fallback app.bcrypt = Bcrypt(app) import foodtruck.views.baking # NOQA import foodtruck.views.create # NOQA import foodtruck.views.edit # NOQA import foodtruck.views.main # NOQA import foodtruck.views.menu # NOQA import foodtruck.views.preview # NOQA import foodtruck.views.settings # NOQA import foodtruck.views.sources # NOQA