This commit is contained in:
2026-08-19 02:15:57 +07:00
parent 72605a3cd4
commit 204a20c814
25 changed files with 2892 additions and 500 deletions
+21 -1
View File
@@ -27,6 +27,7 @@ import (
"net"
"net/http"
"os"
"strings"
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
"github.com/jackc/pgx/v5/pgxpool"
@@ -125,6 +126,9 @@ func main() {
"/crabs.evening_detective_server.EveningDetectiveServer/GetScenariosCatalog": true,
"/crabs.evening_detective_server.EveningDetectiveServer/GetTeamStory": true,
"/crabs.evening_detective_server.EveningDetectiveServer/AddTeamAction": true,
"/crabs.evening_detective_server.EveningDetectiveServer/GetTerms": true,
"/crabs.evening_detective_server.EveningDetectiveServer/GetPrivacy": true,
"/crabs.evening_detective_server.EveningDetectiveServer/GetConsent": true,
},
processorJWT,
),
@@ -158,7 +162,23 @@ func main() {
log.Fatalln("Failed to dial server:", err)
}
gwmux := runtime.NewServeMux()
// X-Real-IP пробрасывается от доверенного обратного прокси (если фронт-
// контур развёрнут перед gateway, см. docs/COMPLIANCE.md п. 6.6) и
// используется в clientInfoFromContext для фиксации IP клиента при
// акцепте соглашений (ст. 9 152-ФЗ). X-Password — подтверждение паролем
// при удалении аккаунта (не в query, чтобы не светить креденшел в URL
// и логах).
gwmux := runtime.NewServeMux(
runtime.WithIncomingHeaderMatcher(func(key string) (string, bool) {
switch {
case strings.EqualFold(key, "X-Real-IP"):
return "x-real-ip", true
case strings.EqualFold(key, "X-Password"):
return "x-password", true
}
return runtime.DefaultHeaderMatcher(key)
}),
)
// Register Greeter
err = proto.RegisterEveningDetectiveServerHandler(context.Background(), gwmux, conn)
if err != nil {
@@ -16,6 +16,30 @@
"application/json"
],
"paths": {
"/api/auth/delete-account": {
"delete": {
"summary": "Удалить учётную запись и персональные данные",
"description": "Удаляет учётную запись и персональные данные текущего пользователя (ст. 21 152-ФЗ). Требует заголовок X-Password с паролем учётной записи (подтверждение владельца; пароль не передаётся в URL).",
"operationId": "EveningDetectiveServer_DeleteAccount",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverDeleteAccountRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Регистрация и вход"
]
}
},
"/api/auth/login": {
"post": {
"summary": "Войти и получить токена доступа",
@@ -1506,6 +1530,75 @@
"Пользователи"
]
}
},
"/consent": {
"get": {
"summary": "Получить текст согласия на обработку персональных данных",
"operationId": "EveningDetectiveServer_GetConsent",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetConsentRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Документы"
]
}
},
"/privacy": {
"get": {
"summary": "Получить текст Политики конфиденциальности",
"operationId": "EveningDetectiveServer_GetPrivacy",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetPrivacyRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Документы"
]
}
},
"/terms": {
"get": {
"summary": "Получить текст Пользовательского соглашения (оферты)",
"operationId": "EveningDetectiveServer_GetTerms",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetTermsRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Документы"
]
}
}
},
"definitions": {
@@ -1758,6 +1851,14 @@
}
}
},
"evening_detective_serverDeleteAccountRsp": {
"type": "object",
"properties": {
"error": {
"type": "string"
}
}
},
"evening_detective_serverDeleteGameRsp": {
"type": "object",
"properties": {
@@ -1888,6 +1989,17 @@
}
}
},
"evening_detective_serverGetConsentRsp": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"text": {
"type": "string"
}
}
},
"evening_detective_serverGetGameRsp": {
"type": "object",
"properties": {
@@ -1954,6 +2066,17 @@
}
}
},
"evening_detective_serverGetPrivacyRsp": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"text": {
"type": "string"
}
}
},
"evening_detective_serverGetScenarioRsp": {
"type": "object",
"properties": {
@@ -1994,6 +2117,17 @@
}
}
},
"evening_detective_serverGetTermsRsp": {
"type": "object",
"properties": {
"error": {
"type": "string"
},
"text": {
"type": "string"
}
}
},
"evening_detective_serverGetUserByIdRsp": {
"type": "object",
"properties": {
@@ -2222,6 +2356,12 @@
},
"email": {
"type": "string"
},
"acceptTerms": {
"type": "boolean"
},
"acceptPrivacy": {
"type": "boolean"
}
}
},