P0.2: JWT принимается только при явном 2xx от Nubes API

Раньше любой статус, кроме 401/403 (включая 5xx/429/редиректы), считался
подтверждением токена. Теперь валидность подтверждается только явным 2xx;
401/403 — отклонён, прочие статусы — ошибка стенда (пробуем следующий).
This commit is contained in:
Repinoid
2026-10-06 18:04:42 +03:00
parent c19a056de3
commit 12b25e393d
+9 -3
View File
@@ -80,8 +80,9 @@ var nubesAPIEndpoints = []string{
// PingNubesAPI — проверяет валидность токена перебором стендов Nubes API.
// endpoint (если задан через NUBES_ENDPOINT) пробуется первым.
// Логика: 401/403 → токен отклонён ЭТИМ стендом, пробуем следующий.
// Любой другой HTTP статус → токен принят.
// Логика: токен принимается ТОЛЬКО при явном HTTP 2xx от стенда.
// 401/403 → токен отклонён ЭТИМ стендом (ErrTokenRejected), пробуем следующий.
// Любой другой статус (4xx/5xx) → стенд НЕ подтвердил токен, пробуем следующий.
func PingNubesAPI(ctx context.Context, endpoint, token string) error {
candidates := make([]string, 0, len(nubesAPIEndpoints)+1)
if endpoint != "" {
@@ -111,11 +112,16 @@ func PingNubesAPI(ctx context.Context, endpoint, token string) error {
}
resp.Body.Close()
// Принимаем токен ТОЛЬКО при явном 2xx: никакой другой статус (5xx,
// 429, редирект и т.п.) не должен считаться подтверждением валидности.
if resp.StatusCode >= http.StatusOK && resp.StatusCode < http.StatusMultipleChoices {
return nil
}
if resp.StatusCode == http.StatusUnauthorized || resp.StatusCode == http.StatusForbidden {
lastErr = fmt.Errorf("%w (HTTP %d)", ErrTokenRejected, resp.StatusCode)
continue
}
return nil
lastErr = fmt.Errorf("nubes API %s returned unexpected status HTTP %d", ep, resp.StatusCode)
}
if lastErr == nil {
lastErr = fmt.Errorf("nubes API rejected token")