P0.2: JWT принимается только при явном 2xx от Nubes API
Раньше любой статус, кроме 401/403 (включая 5xx/429/редиректы), считался подтверждением токена. Теперь валидность подтверждается только явным 2xx; 401/403 — отклонён, прочие статусы — ошибка стенда (пробуем следующий).
This commit is contained in:
+9
-3
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user