package auth import ( "errors" "net/http" ) type AuthHandler struct { authService *AuthService } func NewAuthHandler(authService *AuthService) *AuthHandler { return &AuthHandler{ authService: authService, } } func (h *AuthHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) return } apiKey := r.Header.Get("X-API-Key") if apiKey == "" { http.Error(w, "API key required", http.StatusUnauthorized) return } token, err := h.authService.Authenticate(apiKey) if err != nil { if errors.Is(err, ErrInvalidAPIKey) { http.Error(w, "Invalid API key", http.StatusUnauthorized) } else { http.Error(w, "Authentication error", http.StatusInternalServerError) } return } w.Header().Set("Content-Type", "application/json") w.Write([]byte(`{"token":"` + token + `"}`)) }