chore(iot): убрать мёртвый mqtt_auth.go + constant-time админ-токен (Этап 5)

- Удалён internal/service/api/handler/mqtt_auth.go: методы MQTTAuth/MQTTAcl
  нигде не подключены (мёртвый код; при подключении небезопасен — доверял
  клиентскому clientid и разрешал subscribe на '#').
- admin.go: сравнение ADMIN_STATS_TOKEN через subtle.ConstantTimeCompare.
This commit is contained in:
Repinoid
2026-10-10 19:14:16 +03:00
parent faba28f824
commit e429f11e7f
2 changed files with 5 additions and 168 deletions
+5 -1
View File
@@ -7,6 +7,7 @@ package handler
import (
"context"
"crypto/subtle"
"net/http"
"strings"
"time"
@@ -19,8 +20,11 @@ func (h *Handler) AdminStats(w http.ResponseWriter, r *http.Request) {
return
}
// Constant-time сравнение токена: обычное != давало утечку по времени (ревью 2026-10-10).
authHeader := r.Header.Get("Authorization")
if !strings.HasPrefix(authHeader, "Bearer ") || strings.TrimPrefix(authHeader, "Bearer ") != h.Cfg.AdminStatsToken {
token := strings.TrimPrefix(authHeader, "Bearer ")
if !strings.HasPrefix(authHeader, "Bearer ") ||
subtle.ConstantTimeCompare([]byte(token), []byte(h.Cfg.AdminStatsToken)) != 1 {
writeJSON(w, http.StatusUnauthorized, errResp("unauthorized"))
return
}