pyfedi/pyfedi.py

51 lines
1.9 KiB
Python
Raw Normal View History

2023-08-22 02:24:11 -07:00
# This file is part of pyfedi, which is licensed under the GNU General Public License (GPL) version 3.0.
# You should have received a copy of the GPL along with this program. If not, see <http://www.gnu.org/licenses/>.
from flask_babel import get_locale
2023-08-22 02:24:11 -07:00
2023-07-27 21:22:12 -07:00
from app import create_app, db, cli
import os, click
2023-11-24 01:28:31 -08:00
from flask import session, g, json
from app.constants import POST_TYPE_LINK, POST_TYPE_IMAGE, POST_TYPE_ARTICLE
2023-10-20 19:49:01 -07:00
from app.utils import getmtime, gibberish, shorten_string, shorten_url, digits, user_access
2023-07-27 21:22:12 -07:00
app = create_app()
cli.register(app)
@app.context_processor
def app_context_processor(): # NB there needs to be an identical function in cb.wsgi to make this work in production
def getmtime(filename):
return os.path.getmtime('app/static/' + filename)
return dict(getmtime=getmtime, post_type_link=POST_TYPE_LINK, post_type_image=POST_TYPE_IMAGE, post_type_article=POST_TYPE_ARTICLE)
2023-07-27 21:22:12 -07:00
@app.shell_context_processor
def make_shell_context():
2023-09-17 02:19:51 -07:00
return {'db': db, 'app': app}
with app.app_context():
app.jinja_env.globals['getmtime'] = getmtime
app.jinja_env.globals['len'] = len
2023-10-10 02:25:37 -07:00
app.jinja_env.globals['digits'] = digits
app.jinja_env.globals['str'] = str
2023-11-24 01:28:31 -08:00
app.jinja_env.globals['json_loads'] = json.loads
2023-10-20 19:49:01 -07:00
app.jinja_env.globals['user_access'] = user_access
app.jinja_env.filters['shorten'] = shorten_string
app.jinja_env.filters['shorten_url'] = shorten_url
@app.before_request
def before_request():
session['nonce'] = gibberish()
g.locale = str(get_locale())
@app.after_request
def after_request(response):
response.headers['Content-Security-Policy'] = f"script-src 'self' https://cdnjs.cloudflare.com https://cdn.jsdelivr.net 'nonce-{session['nonce']}'"
response.headers['Strict-Transport-Security'] = 'max-age=63072000; includeSubDomains; preload'
response.headers['X-Content-Type-Options'] = 'nosniff'
response.headers['X-Frame-Options'] = 'DENY'
return response