This commit is contained in:
frogolonso
2026-08-26 12:53:27 +03:00
parent 12b1d02f39
commit 0d1b49ac1b
7 changed files with 133 additions and 34 deletions
+16
View File
@@ -11,6 +11,16 @@ IMG_MIN, IMG_MAX = 1, 16
# Поля профиля, которые вообще могут существовать
ALLOWED_FIELDS = {"password", "first_name", "second_name", "email", "msg"}
# PATCH V4: database без auth. Даже если :38002 снова опубликуют на 0.0.0.0,
# без этого заголовка (его знают только logic/content) чужие запросы отсекаются.
INTERNAL = os.environ.get("RUSGRAM_INTERNAL", "e9b2f6d14a8c7035e1d0a6b8c4f2e7a9")
def require_internal():
if request.headers.get("X-Internal") != INTERNAL:
return make_response({"status": "forbidden"}, 403)
return None
def safe_username(username):
"""Имя юзера становится именем файла в db/users/ — режем всё, что уводит
@@ -30,6 +40,9 @@ def user_path(username):
@app.route('/users/<string:username>/<string:field>', methods=["GET", "POST"])
def users(username, field):
denied = require_internal()
if denied is not None:
return denied
if not safe_username(username) or field not in ALLOWED_FIELDS:
return make_response({"status": "bad_request"}, 400)
path = user_path(username)
@@ -82,6 +95,9 @@ def users(username, field):
@app.route('/images/<string:id>', methods=["GET", "POST"])
def images(id):
denied = require_internal()
if denied is not None:
return denied
# PATCH V8: раньше любой нечисловой/несуществующий id давал 500
try:
img_id = int(id)