Mercurial > piecrust2
annotate foodtruck/web.py @ 657:c1a94e1beb9d
admin: Show a more classic blog post listing in FoodTruck.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Thu, 25 Feb 2016 22:30:16 -0800 |
parents | 59968ee07a07 |
children | 65706804e1de |
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 |
601
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
597
diff
changeset
|
6 from .configuration import ( |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
7 FoodTruckConfigNotFoundError, get_foodtruck_config) |
601
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
597
diff
changeset
|
8 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
|
9 |
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 logger = logging.getLogger(__name__) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
12 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
13 app = Flask(__name__) |
597
79a31a3c947b
admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents:
587
diff
changeset
|
14 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
|
15 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
|
16 |
597
79a31a3c947b
admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents:
587
diff
changeset
|
17 admin_root = app.config['FOODTRUCK_ROOT'] or os.getcwd() |
79a31a3c947b
admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents:
587
diff
changeset
|
18 config_path = os.path.join(admin_root, 'app.cfg') |
610
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
19 |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
20 # 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
|
21 # website, do a few things differently. |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
22 _procedural_config = None |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
23 |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
24 if (app.config['FOODTRUCK_CMDLINE_MODE'] and |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
25 os.path.isfile(os.path.join(admin_root, 'config.yml'))): |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
26 app.secret_key = os.urandom(22) |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
27 app.config['LOGIN_DISABLED'] = True |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
28 _procedural_config = { |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
29 'sites': { |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
30 'local': admin_root} |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
31 } |
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 |
597
79a31a3c947b
admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents:
587
diff
changeset
|
34 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
|
35 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
|
36 |
79a31a3c947b
admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents:
587
diff
changeset
|
37 if app.config['DEBUG']: |
79a31a3c947b
admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents:
587
diff
changeset
|
38 l = logging.getLogger() |
79a31a3c947b
admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents:
587
diff
changeset
|
39 l.setLevel(logging.DEBUG) |
79a31a3c947b
admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents:
587
diff
changeset
|
40 |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
41 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
|
42 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
43 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
44 def after_this_request(f): |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
45 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
|
46 g.after_request_callbacks = [] |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
47 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
|
48 return f |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
49 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
50 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
51 class LazySomething(object): |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
52 def __init__(self, factory): |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
53 self._factory = factory |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
54 self._something = None |
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 def __getattr__(self, name): |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
57 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
|
58 return getattr(self._something, name) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
59 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
60 self._something = self._factory() |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
61 return getattr(self._something, name) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
62 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
63 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
64 @app.before_request |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
65 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
|
66 def _get_config(): |
610
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
67 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
|
68 |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
69 def _get_sites(): |
610
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
70 names = g.config.get('sites') |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
71 if not names or not isinstance(names, dict): |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
72 raise InvalidSiteError( |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
73 "No sites are defined in the configuration file.") |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
74 |
597
79a31a3c947b
admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents:
587
diff
changeset
|
75 current = request.cookies.get('foodtruck_site_name') |
610
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
76 if current is not None and current not in names: |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
77 current = None |
597
79a31a3c947b
admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents:
587
diff
changeset
|
78 if current is None: |
79a31a3c947b
admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents:
587
diff
changeset
|
79 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
|
80 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
|
81 return s |
597
79a31a3c947b
admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents:
587
diff
changeset
|
82 |
610
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
83 def _get_current_site(): |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
84 return g.sites.get() |
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
85 |
597
79a31a3c947b
admin: Better production config for FoodTruck, provide proper first site.
Ludovic Chabant <ludovic@chabant.com>
parents:
587
diff
changeset
|
86 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
|
87 g.sites = LazySomething(_get_sites) |
610
efc1dc916e7c
admin: Configuration changes.
Ludovic Chabant <ludovic@chabant.com>
parents:
608
diff
changeset
|
88 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
|
89 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
90 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
91 @app.after_request |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
92 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
|
93 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
|
94 callback(response) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
95 return response |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
96 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
97 |
601
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
597
diff
changeset
|
98 if not app.config['DEBUG']: |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
99 logger.debug("Registering exception handlers.") |
601
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
597
diff
changeset
|
100 |
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
597
diff
changeset
|
101 @app.errorhandler(FoodTruckConfigNotFoundError) |
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
597
diff
changeset
|
102 def _on_config_missing(ex): |
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
597
diff
changeset
|
103 return render_template('install.html') |
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
597
diff
changeset
|
104 |
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
597
diff
changeset
|
105 @app.errorhandler(InvalidSiteError) |
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
597
diff
changeset
|
106 def _on_invalid_site(ex): |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
107 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
|
108 str(ex)} |
601
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
597
diff
changeset
|
109 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
|
110 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
111 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
112 @app.errorhandler |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
113 def _on_error(ex): |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
114 logging.exception(ex) |
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 |
608
8e1b38632702
admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents:
602
diff
changeset
|
117 _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
|
118 |
8e1b38632702
admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents:
602
diff
changeset
|
119 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
|
120 # 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
|
121 # 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
|
122 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
|
123 _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
|
124 |
8e1b38632702
admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents:
602
diff
changeset
|
125 |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
126 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
|
127 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
128 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
129 class User(UserMixin): |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
130 def __init__(self, uid, pwd): |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
131 self.id = uid |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
132 self.password = pwd |
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 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
135 def load_user(user_id): |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
136 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
|
137 if admin_id == user_id: |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
138 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
|
139 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
|
140 return None |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
141 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
142 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
143 login_manager = LoginManager() |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
144 login_manager.init_app(app) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
145 login_manager.login_view = 'login' |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
146 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
|
147 |
608
8e1b38632702
admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents:
602
diff
changeset
|
148 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
|
149 def _handler(): |
8e1b38632702
admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents:
602
diff
changeset
|
150 raise FoodTruckConfigNotFoundError() |
8e1b38632702
admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents:
602
diff
changeset
|
151 |
8e1b38632702
admin: Show the install page if no secret key is available.
Ludovic Chabant <ludovic@chabant.com>
parents:
602
diff
changeset
|
152 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
|
153 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
|
154 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
|
155 |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
156 |
640
59968ee07a07
admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
610
diff
changeset
|
157 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
|
158 if (getattr(Bcrypt, 'is_fallback_bcrypt', None) is True and |
59968ee07a07
admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
610
diff
changeset
|
159 not app.config['FOODTRUCK_CMDLINE_MODE']): |
59968ee07a07
admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
610
diff
changeset
|
160 raise Exception( |
59968ee07a07
admin: Don't require `bcrypt` for running FoodTruck with `chef`.
Ludovic Chabant <ludovic@chabant.com>
parents:
610
diff
changeset
|
161 "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
|
162 "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
|
163 app.bcrypt = Bcrypt(app) |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
164 |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
165 |
657
c1a94e1beb9d
admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents:
640
diff
changeset
|
166 @app.template_filter('iso8601') |
c1a94e1beb9d
admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents:
640
diff
changeset
|
167 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
|
168 t = time.localtime(t) |
c1a94e1beb9d
admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents:
640
diff
changeset
|
169 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
|
170 |
c1a94e1beb9d
admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents:
640
diff
changeset
|
171 @app.template_filter('datetime') |
c1a94e1beb9d
admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents:
640
diff
changeset
|
172 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
|
173 fmt = fmt or '%x' |
c1a94e1beb9d
admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents:
640
diff
changeset
|
174 t = time.localtime(t) |
c1a94e1beb9d
admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents:
640
diff
changeset
|
175 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
|
176 |
c1a94e1beb9d
admin: Show a more classic blog post listing in FoodTruck.
Ludovic Chabant <ludovic@chabant.com>
parents:
640
diff
changeset
|
177 |
587
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
178 import foodtruck.views.create # NOQA |
601
effbc78b5528
admin: Better error reporting, general clean-up.
Ludovic Chabant <ludovic@chabant.com>
parents:
597
diff
changeset
|
179 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
|
180 import foodtruck.views.edit # NOQA |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
181 import foodtruck.views.menu # NOQA |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
182 import foodtruck.views.preview # NOQA |
602
c6bc0ef03f82
admin: Better UI for publishing websites.
Ludovic Chabant <ludovic@chabant.com>
parents:
601
diff
changeset
|
183 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
|
184 import foodtruck.views.sources # NOQA |
d4a01a023998
admin: Add "FoodTruck" admin panel from the side experiment project.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
185 |