Skip to content

Commit 3c36a9e

Browse files
committed
Include packages for redis and Flask_Limiter to limit rates for API endpoints
1 parent 7bc3b48 commit 3c36a9e

File tree

3 files changed

+169
-1
lines changed

3 files changed

+169
-1
lines changed

backend/pyproject.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ requires-python = ">=3.12"
55
dependencies = [
66
"flask",
77
"Flask-Mail",
8+
"Flask_Limiter",
89
"xhtml2pdf",
10+
"redis",
911
"valkey",
1012
"gunicorn",
1113
"openai==1.89",

backend/tenantfirstaid/app.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from pathlib import Path
22
from flask import Flask, jsonify, session
33
from flask_mail import Mail
4+
from flask_limiter import Limiter
5+
from flask_limiter.util import get_remote_address
46
import os
57
import secrets
68

@@ -19,6 +21,25 @@
1921
app = Flask(__name__)
2022
mail = Mail(app)
2123

24+
25+
def build_valkey_uri():
26+
host = os.getenv("DB_HOST", "127.0.0.1")
27+
port = os.getenv("DB_PORT", 6379)
28+
password = os.getenv("DB_PASSWORD")
29+
ssl = False if os.getenv("DB_USE_SSL") == "false" else True
30+
scheme = "rediss" if ssl else "redis"
31+
32+
if password:
33+
return f"{scheme}://:{password}@{host}:{port}"
34+
return f"{scheme}://{host}:{port}"
35+
36+
37+
limiter = Limiter(
38+
get_remote_address,
39+
app=app,
40+
storage_uri=build_valkey_uri(),
41+
)
42+
2243
# Configure Flask sessions
2344
app.secret_key = os.getenv("FLASK_SECRET_KEY", secrets.token_hex(32))
2445
app.config["SESSION_COOKIE_HTTPONLY"] = True
@@ -66,10 +87,16 @@ def clear_session():
6687
"/api/citation", endpoint="citation", view_func=get_citation, methods=["GET"]
6788
)
6889

90+
91+
@limiter.limit("3 per minute")
92+
def feedback_route():
93+
return send_feedback(mail)
94+
95+
6996
app.add_url_rule(
7097
"/api/feedback",
7198
endpoint="feedback",
72-
view_func=lambda: send_feedback(mail),
99+
view_func=feedback_route,
73100
methods=["POST"],
74101
)
75102

0 commit comments

Comments
 (0)