feat: rate limiting
This commit is contained in:
+1
-1
@@ -14,7 +14,7 @@ class Database:
|
||||
self.env = params.env
|
||||
self.logger = logging.getLogger(self.__class__.__name__)
|
||||
self.config = tortoise.config.TortoiseConfig(
|
||||
connections={"default": tortoise.config.DBUrlConfig(params.db_url)},
|
||||
connections={"default": tortoise.config.DBUrlConfig(params.db_uri)},
|
||||
apps={
|
||||
"models": tortoise.config.AppConfig(
|
||||
models=["app.models"],
|
||||
|
||||
+13
-5
@@ -15,7 +15,8 @@ class Parameters:
|
||||
port: int = 5000
|
||||
workers: int = 4
|
||||
timeout: int = 120
|
||||
db_url: str = "postgres://postgres:5432/tout-doux"
|
||||
db_uri: str = "postgres://localhost:5432/tout-doux"
|
||||
cache_uri: str = "redis://localhost:6379"
|
||||
|
||||
@classmethod
|
||||
def from_namespace(cls, args: argparse.Namespace) -> Parameters:
|
||||
@@ -115,10 +116,17 @@ def parse_parameters(args: typing.Sequence[str]) -> Parameters:
|
||||
)
|
||||
__add_arg_str(
|
||||
parser,
|
||||
"--db-url",
|
||||
env_var="DB_URL",
|
||||
default=default_values.db_url,
|
||||
help_txt="database connection url",
|
||||
"--db-uri",
|
||||
env_var="DB_URI",
|
||||
default=default_values.db_uri,
|
||||
help_txt="database connection URI",
|
||||
)
|
||||
__add_arg_str(
|
||||
parser,
|
||||
"--cache-uri",
|
||||
env_var="CACHE_URI",
|
||||
default=default_values.cache_uri,
|
||||
help_txt="cache connection URI",
|
||||
)
|
||||
parsed_args = parser.parse_args(args)
|
||||
return Parameters.from_namespace(parsed_args)
|
||||
|
||||
@@ -2,6 +2,8 @@ import logging
|
||||
import typing
|
||||
|
||||
import flask
|
||||
import flask_limiter
|
||||
import flask_limiter.util
|
||||
import gunicorn.app.base
|
||||
|
||||
from app import PKG_NAME
|
||||
@@ -22,12 +24,19 @@ class Server(gunicorn.app.base.BaseApplication):
|
||||
self.app = flask.Flask(
|
||||
PKG_NAME, static_folder="dist/assets", template_folder="dist"
|
||||
)
|
||||
self.limiter = flask_limiter.Limiter(
|
||||
flask_limiter.util.get_remote_address,
|
||||
app=self.app,
|
||||
default_limits=["100 per minute"],
|
||||
storage_uri=params.cache_uri,
|
||||
)
|
||||
self._index_content: str | None = None
|
||||
self.logger: logging.Logger = logging.getLogger(self.__class__.__name__)
|
||||
super().__init__()
|
||||
|
||||
def register_routes(self) -> typing.Self:
|
||||
@self.app.route("/")
|
||||
@self.limiter.exempt
|
||||
def index() -> str:
|
||||
return flask.render_template("index.html")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user