mirror of
https://github.com/LukeHagar/pypistats.org.git
synced 2025-12-06 04:21:09 +00:00
* update ignore files * setup poetry * add db seeds * black * set up compose * backfill script * add makefile, update readme * update poetry * readme * Fixes * cleanup and rate limit changes * poetry 1.0.5 * some more cleanup * k8s * k8s * update yml * cleanup and admin * deploy
40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
"""Run the application."""
|
|
import os
|
|
|
|
from flask import g
|
|
from flask import redirect
|
|
from flask import request
|
|
from flask import session
|
|
from flask_limiter import Limiter
|
|
from flask_limiter.util import get_remote_address
|
|
from werkzeug.middleware.proxy_fix import ProxyFix
|
|
|
|
from pypistats.application import create_app
|
|
from pypistats.config import configs
|
|
from pypistats.models.user import User
|
|
|
|
# change this for migrations
|
|
env = os.environ.get("ENV", "development")
|
|
|
|
app = create_app(configs[env])
|
|
|
|
# Rate limiting per IP/worker
|
|
app.wsgi_app = ProxyFix(app.wsgi_app)
|
|
limiter = Limiter(app, key_func=get_remote_address, application_limits=["5 per second", "30 per minute"])
|
|
|
|
app.logger.info(f"Environment: {env}")
|
|
|
|
|
|
@app.before_request
|
|
def before_request():
|
|
"""Execute before requests."""
|
|
# http -> https
|
|
scheme = request.headers.get("X-Forwarded-Proto")
|
|
if scheme and scheme == "http" and request.url.startswith("http://"):
|
|
url = request.url.replace("http://", "https://", 1)
|
|
return redirect(url, code=301)
|
|
# set user
|
|
g.user = None
|
|
if "user_id" in session:
|
|
g.user = User.query.get(session["user_id"])
|