feat: implement async modpack import with websockets
This commit is contained in:
@@ -16,15 +16,25 @@ const ClaimsContextKey = contextKey("claims")
|
||||
// AuthMiddleware проверяет JWT токен и добавляет claims в контекст запроса.
|
||||
func AuthMiddleware(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
var tokenString string
|
||||
|
||||
// 1. Проверяем заголовок Authorization
|
||||
authHeader := r.Header.Get("Authorization")
|
||||
if authHeader == "" {
|
||||
http.Error(w, "Authorization header required", http.StatusUnauthorized)
|
||||
return
|
||||
if authHeader != "" {
|
||||
tokenString = strings.TrimPrefix(authHeader, "Bearer ")
|
||||
if tokenString == authHeader { // Не было префикса Bearer
|
||||
http.Error(w, "Invalid token format", http.StatusUnauthorized)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
tokenString := strings.TrimPrefix(authHeader, "Bearer ")
|
||||
if tokenString == authHeader {
|
||||
http.Error(w, "Invalid token format", http.StatusUnauthorized)
|
||||
// 2. Если заголовка нет, проверяем параметр query (для WebSocket)
|
||||
if tokenString == "" {
|
||||
tokenString = r.URL.Query().Get("token")
|
||||
}
|
||||
|
||||
if tokenString == "" {
|
||||
http.Error(w, "Authorization required", http.StatusUnauthorized)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user