annotate foodtruck/web.py @ 764:f7ddd730c08d

plugins: Abort the command if there's no site.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 02 Jul 2016 01:16:50 -0700
parents e67da1f7293b
children 3885421c29a3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
597
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
1 import os
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
2 import os.path
657
c1a94e1beb9d admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents: 640
diff changeset
3 import time
587
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4 import logging
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5 from flask import Flask, g, request, render_template
706
e67da1f7293b admin: Add support for `.well-known` folder.
Ludovic Chabant <ludovic@chabant.com>
parents: 669
diff changeset
6 from werkzeug import SharedDataMiddleware
601
effbc78b5528 admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents: 597
diff changeset
7 from .configuration import (
587
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 FoodTruckConfigNotFoundError, get_foodtruck_config)
601
effbc78b5528 admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents: 597
diff changeset
9 from .sites import FoodTruckSites, InvalidSiteError
587
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 logger = logging.getLogger(__name__)
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 app = Flask(__name__)
597
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
15 app.config.from_object('foodtruck.settings')
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
16 app.config.from_envvar('FOODTRUCK_SETTINGS', silent=True)
587
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17
669
65706804e1de admin: Fix crash when running FoodTruck as a standalone web app.
Ludovic Chabant <ludovic@chabant.com>
parents: 657
diff changeset
18 admin_root = app.config.get('FOODTRUCK_ROOT', os.getcwd())
597
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
19 config_path = os.path.join(admin_root, 'app.cfg')
610
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
20
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
21 # If we're being run as the `chef admin run` command, from inside a PieCrust
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
22 # website, do a few things differently.
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
23 _procedural_config = None
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
24
669
65706804e1de admin: Fix crash when running FoodTruck as a standalone web app.
Ludovic Chabant <ludovic@chabant.com>
parents: 657
diff changeset
25 if (app.config.get('FOODTRUCK_CMDLINE_MODE', False) and
610
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
26 os.path.isfile(os.path.join(admin_root, 'config.yml'))):
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
27 app.secret_key = os.urandom(22)
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
28 app.config['LOGIN_DISABLED'] = True
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
29 _procedural_config = {
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
30 'sites': {
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
31 'local': admin_root}
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
32 }
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
33
706
e67da1f7293b admin: Add support for `.well-known` folder.
Ludovic Chabant <ludovic@chabant.com>
parents: 669
diff changeset
34 # Add a special route for the `.well-known` directory.
e67da1f7293b admin: Add support for `.well-known` folder.
Ludovic Chabant <ludovic@chabant.com>
parents: 669
diff changeset
35 app.wsgi_app = SharedDataMiddleware(
e67da1f7293b admin: Add support for `.well-known` folder.
Ludovic Chabant <ludovic@chabant.com>
parents: 669
diff changeset
36 app.wsgi_app,
e67da1f7293b admin: Add support for `.well-known` folder.
Ludovic Chabant <ludovic@chabant.com>
parents: 669
diff changeset
37 {'/.well-known': os.path.join(admin_root, '.well-known')})
610
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
38
597
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
39 if os.path.isfile(config_path):
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
40 app.config.from_pyfile(config_path)
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
41
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
42 if app.config['DEBUG']:
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
43 l = logging.getLogger()
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
44 l.setLevel(logging.DEBUG)
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
45
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents: 601
diff changeset
46 logger.debug("Using FoodTruck admin root: %s" % admin_root)
587
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49 def after_this_request(f):
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 if not hasattr(g, 'after_request_callbacks'):
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
51 g.after_request_callbacks = []
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52 g.after_request_callbacks.append(f)
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53 return f
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 class LazySomething(object):
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57 def __init__(self, factory):
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58 self._factory = factory
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 self._something = None
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 def __getattr__(self, name):
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62 if self._something is not None:
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63 return getattr(self._something, name)
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65 self._something = self._factory()
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 return getattr(self._something, name)
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69 @app.before_request
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
70 def _setup_foodtruck_globals():
597
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
71 def _get_config():
610
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
72 return get_foodtruck_config(admin_root, _procedural_config)
597
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
73
587
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
74 def _get_sites():
610
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
75 names = g.config.get('sites')
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
76 if not names or not isinstance(names, dict):
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
77 raise InvalidSiteError(
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
78 "No sites are defined in the configuration file.")
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
79
597
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
80 current = request.cookies.get('foodtruck_site_name')
610
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
81 if current is not None and current not in names:
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
82 current = None
597
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
83 if current is None:
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
84 current = next(iter(names.keys()))
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
85 s = FoodTruckSites(g.config, current)
587
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86 return s
597
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
87
610
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
88 def _get_current_site():
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
89 return g.sites.get()
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
90
597
79a31a3c947b admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents: 587
diff changeset
91 g.config = LazySomething(_get_config)
587
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
92 g.sites = LazySomething(_get_sites)
610
efc1dc916e7c admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents: 608
diff changeset
93 g.site = LazySomething(_get_current_site)
587
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
94
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
95
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
96 @app.after_request
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
97 def _call_after_request_callbacks(response):
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
98 for callback in getattr(g, 'after_request_callbacks', ()):
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
99 callback(response)
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
100 return response
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
101
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
102
601
effbc78b5528 admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents: 597
diff changeset
103 if not app.config['DEBUG']:
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents: 601
diff changeset
104 logger.debug("Registering exception handlers.")
601
effbc78b5528 admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents: 597
diff changeset
105
effbc78b5528 admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents: 597
diff changeset
106 @app.errorhandler(FoodTruckConfigNotFoundError)
effbc78b5528 admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents: 597
diff changeset
107 def _on_config_missing(ex):
effbc78b5528 admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents: 597
diff changeset
108 return render_template('install.html')
effbc78b5528 admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents: 597
diff changeset
109
effbc78b5528 admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents: 597
diff changeset
110 @app.errorhandler(InvalidSiteError)
effbc78b5528 admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents: 597
diff changeset
111 def _on_invalid_site(ex):
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents: 601
diff changeset
112 data = {'error': "The was an error with your configuration file: %s" %
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents: 601
diff changeset
113 str(ex)}
601
effbc78b5528 admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents: 597
diff changeset
114 return render_template('error.html', **data)
587
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
115
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
116
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
117 @app.errorhandler
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
118 def _on_error(ex):
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
119 logging.exception(ex)
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
120
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
121
608
8e1b38632702 admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents: 602
diff changeset
122 _missing_secret_key = False
8e1b38632702 admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents: 602
diff changeset
123
8e1b38632702 admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents: 602
diff changeset
124 if not app.secret_key:
8e1b38632702 admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents: 602
diff changeset
125 # If there's no secret key, create a temp one but mark the app as not
8e1b38632702 admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents: 602
diff changeset
126 # correctly installed so it shows the installation information page.
8e1b38632702 admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents: 602
diff changeset
127 app.secret_key = 'temp-key'
8e1b38632702 admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents: 602
diff changeset
128 _missing_secret_key = True
8e1b38632702 admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents: 602
diff changeset
129
8e1b38632702 admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents: 602
diff changeset
130
587
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
131 from flask.ext.login import LoginManager, UserMixin
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
132
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
133
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
134 class User(UserMixin):
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
135 def __init__(self, uid, pwd):
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
136 self.id = uid
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
137 self.password = pwd
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
138
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
139
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
140 def load_user(user_id):
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
141 admin_id = g.config.get('security/username')
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
142 if admin_id == user_id:
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
143 admin_pwd = g.config.get('security/password')
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
144 return User(admin_id, admin_pwd)
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
145 return None
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
146
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
147
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
148 login_manager = LoginManager()
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
149 login_manager.init_app(app)
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
150 login_manager.login_view = 'login'
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
151 login_manager.user_loader(load_user)
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
152
608
8e1b38632702 admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents: 602
diff changeset
153 if _missing_secret_key:
8e1b38632702 admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents: 602
diff changeset
154 def _handler():
8e1b38632702 admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents: 602
diff changeset
155 raise FoodTruckConfigNotFoundError()
8e1b38632702 admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents: 602
diff changeset
156
8e1b38632702 admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents: 602
diff changeset
157 logger.debug("No secret key found, disabling website.")
8e1b38632702 admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents: 602
diff changeset
158 login_manager.unauthorized_handler(_handler)
8e1b38632702 admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents: 602
diff changeset
159 login_manager.login_view = None
8e1b38632702 admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents: 602
diff changeset
160
587
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
161
640
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents: 610
diff changeset
162 from foodtruck.bcryptfallback import Bcrypt
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents: 610
diff changeset
163 if (getattr(Bcrypt, 'is_fallback_bcrypt', None) is True and
669
65706804e1de admin: Fix crash when running FoodTruck as a standalone web app.
Ludovic Chabant <ludovic@chabant.com>
parents: 657
diff changeset
164 not app.config.get('FOODTRUCK_CMDLINE_MODE', False)):
640
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents: 610
diff changeset
165 raise Exception(
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents: 610
diff changeset
166 "You're running FoodTruck outside of `chef`, and will need to "
59968ee07a07 admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents: 610
diff changeset
167 "install Flask-Bcrypt to get more proper security.")
587
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
168 app.bcrypt = Bcrypt(app)
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
169
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
170
657
c1a94e1beb9d admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents: 640
diff changeset
171 @app.template_filter('iso8601')
c1a94e1beb9d admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents: 640
diff changeset
172 def timestamp_to_iso8601(t):
c1a94e1beb9d admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents: 640
diff changeset
173 t = time.localtime(t)
c1a94e1beb9d admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents: 640
diff changeset
174 return time.strftime('%Y-%m-%dT%H:%M:%SZ', t)
c1a94e1beb9d admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents: 640
diff changeset
175
c1a94e1beb9d admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents: 640
diff changeset
176 @app.template_filter('datetime')
c1a94e1beb9d admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents: 640
diff changeset
177 def timestamp_to_datetime(t, fmt=None):
c1a94e1beb9d admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents: 640
diff changeset
178 fmt = fmt or '%x'
c1a94e1beb9d admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents: 640
diff changeset
179 t = time.localtime(t)
c1a94e1beb9d admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents: 640
diff changeset
180 return time.strftime(fmt, t)
c1a94e1beb9d admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents: 640
diff changeset
181
c1a94e1beb9d admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents: 640
diff changeset
182
587
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
183 import foodtruck.views.create # NOQA
601
effbc78b5528 admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents: 597
diff changeset
184 import foodtruck.views.dashboard # NOQA
587
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
185 import foodtruck.views.edit # NOQA
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
186 import foodtruck.views.menu # NOQA
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
187 import foodtruck.views.preview # NOQA
602
c6bc0ef03f82 admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents: 601
diff changeset
188 import foodtruck.views.publish # NOQA
587
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
189 import foodtruck.views.sources # NOQA
d4a01a023998 admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
190