add: api for rate control

This commit is contained in:
h z
2024-12-06 16:12:44 +00:00
parent b3ec244e06
commit eaa2350b72
6 changed files with 70 additions and 18 deletions

View File

@@ -1,6 +1,7 @@
#api/markdown.py
from flask import Blueprint, request, jsonify
import api
from api import require_auth
from contexts.RequestContext import RequestContext
from db import get_db
@@ -12,14 +13,14 @@ logger = logging.getLogger(__name__)
markdown_bp = Blueprint('markdown', __name__, url_prefix='/api/markdown')
@markdown_bp.route('/', methods=['GET'])
@limiter.limit('5 per minute')
@limiter.limit(api.get_rate_limit)
def get_markdowns():
with get_db() as session:
mds = session.query(Markdown).all()
return jsonify([md.to_dict() for md in mds]), 200
@markdown_bp.route('/by_path/<int:path_id>', methods=['GET'])
@limiter.limit('5 per minute')
@limiter.limit(api.get_rate_limit)
def get_markdowns_by_path(path_id):
with get_db() as session:
markdowns = session.query(Markdown).filter(Markdown.path_id == path_id).all()
@@ -28,7 +29,7 @@ def get_markdowns_by_path(path_id):
@markdown_bp.route('/<int:markdown_id>', methods=['GET'])
@limiter.limit('120 per minute')
@limiter.limit(api.get_rate_limit)
def get_markdown(markdown_id):
with get_db() as session:
markdown = session.query(Markdown).get(markdown_id)
@@ -38,7 +39,7 @@ def get_markdown(markdown_id):
@markdown_bp.route('/', methods=['POST'])
@require_auth(roles=['admin', 'creator'])
@limiter.limit('20 per minute')
@limiter.limit(api.get_rate_limit)
def create_markdown():
data = request.json
title = data.get('title')
@@ -60,7 +61,7 @@ def create_markdown():
@markdown_bp.route('/<int:markdown_id>', methods=['PUT'])
@require_auth(roles=['admin', 'creator'])
@limiter.limit('20 per minute')
@limiter.limit(api.get_rate_limit)
def update_markdown(markdown_id):
with get_db() as session:
markdown = session.query(Markdown).get(markdown_id)
@@ -75,7 +76,7 @@ def update_markdown(markdown_id):
@markdown_bp.route('/<int:markdown_id>', methods=['DELETE'])
@require_auth(roles=['admin'])
@limiter.limit('20 per minute')
@limiter.limit(api.get_rate_limit)
def delete_markdown(markdown_id):
with get_db() as session:
markdown = session.query(Markdown).get(markdown_id)