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/>.
|
2024-02-20 23:00:22 -08:00
|
|
|
from datetime import datetime
|
|
|
|
|
2023-10-02 02:16:44 -07:00
|
|
|
from flask_babel import get_locale
|
2024-02-20 23:00:22 -08:00
|
|
|
from flask_login import current_user
|
2023-08-22 02:24:11 -07:00
|
|
|
|
2023-07-27 21:22:12 -07:00
|
|
|
from app import create_app, db, cli
|
2023-08-29 03:01:06 -07:00
|
|
|
import os, click
|
2024-02-22 19:52:17 -08:00
|
|
|
from flask import session, g, json, request, current_app
|
2023-10-02 02:16:44 -07:00
|
|
|
from app.constants import POST_TYPE_LINK, POST_TYPE_IMAGE, POST_TYPE_ARTICLE
|
2023-12-16 03:12:49 -08:00
|
|
|
from app.models import Site
|
2024-01-01 22:41:00 -08:00
|
|
|
from app.utils import getmtime, gibberish, shorten_string, shorten_url, digits, user_access, community_membership, \
|
2024-02-06 20:31:12 -08:00
|
|
|
can_create, can_upvote, can_downvote, shorten_number, ap_datetime, current_theme
|
2023-07-27 21:22:12 -07:00
|
|
|
|
|
|
|
app = create_app()
|
|
|
|
cli.register(app)
|
|
|
|
|
|
|
|
|
|
|
|
@app.context_processor
|
2023-12-21 01:14:43 -08:00
|
|
|
def app_context_processor():
|
2023-07-27 21:22:12 -07:00
|
|
|
def getmtime(filename):
|
|
|
|
return os.path.getmtime('app/static/' + filename)
|
2023-10-02 02:16:44 -07:00
|
|
|
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}
|
2023-08-29 03:01:06 -07:00
|
|
|
|
|
|
|
|
|
|
|
with app.app_context():
|
|
|
|
app.jinja_env.globals['getmtime'] = getmtime
|
2023-10-02 02:16:44 -07:00
|
|
|
app.jinja_env.globals['len'] = len
|
2023-10-10 02:25:37 -07:00
|
|
|
app.jinja_env.globals['digits'] = digits
|
2023-10-02 02:16:44 -07:00
|
|
|
app.jinja_env.globals['str'] = str
|
2024-01-09 12:44:59 -08:00
|
|
|
app.jinja_env.globals['shorten_number'] = shorten_number
|
2023-12-03 01:41:15 -08:00
|
|
|
app.jinja_env.globals['community_membership'] = community_membership
|
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
|
2024-01-23 20:02:48 -08:00
|
|
|
app.jinja_env.globals['ap_datetime'] = ap_datetime
|
2024-01-01 22:41:00 -08:00
|
|
|
app.jinja_env.globals['can_create'] = can_create
|
|
|
|
app.jinja_env.globals['can_upvote'] = can_upvote
|
|
|
|
app.jinja_env.globals['can_downvote'] = can_downvote
|
2024-02-06 20:31:12 -08:00
|
|
|
app.jinja_env.globals['theme'] = current_theme
|
|
|
|
app.jinja_env.globals['file_exists'] = os.path.exists
|
2023-10-02 02:16:44 -07:00
|
|
|
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())
|
2023-12-16 03:12:49 -08:00
|
|
|
g.site = Site.query.get(1)
|
2024-02-20 23:00:22 -08:00
|
|
|
if current_user.is_authenticated:
|
|
|
|
current_user.last_seen = datetime.utcnow()
|
2024-02-22 19:52:17 -08:00
|
|
|
current_user.email_unread_sent = False
|
|
|
|
else:
|
|
|
|
if session.get('Referer') is None and \
|
|
|
|
request.headers.get('Referer') is not None and \
|
|
|
|
current_app.config['SERVER_NAME'] not in request.headers.get('Referer'):
|
|
|
|
session['Referer'] = request.headers.get('Referer')
|
2023-10-02 02:16:44 -07:00
|
|
|
|
|
|
|
|
|
|
|
@app.after_request
|
|
|
|
def after_request(response):
|
2024-01-17 18:26:37 -08:00
|
|
|
if 'auth/register' not in request.path:
|
|
|
|
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'
|
2023-10-02 02:16:44 -07:00
|
|
|
return response
|