package server import ( "log/slog" "net/http" "level3.git.onstackit.cloud/LEVEL3/gabriel/src/api" "level3.git.onstackit.cloud/LEVEL3/gabriel/src/auth" ) func (s *Server) LoginUser(w http.ResponseWriter, r *http.Request) { slog.Debug("LoginUser endpoint called") req, err := reqBody[api.AuthRequest](r.Body) if err != nil { slog.Debug("Failed to parse login request body", "error", err) http.Error(w, err.Error(), http.StatusBadRequest) return } user, err := auth.Login(auth.UserData{ Username: req.Username, Password: req.Password, }) if err != nil { switch err { case auth.ErrUserNotFound, auth.ErrInvalidPassword: slog.Debug("Invalid username or password", "username", req.Username) writeJSONResponse(w, http.StatusUnauthorized, map[string]string{"error": "invalid username or password"}) default: slog.Error("Failed to login user", "username", req.Username, "error", err) writeJSONResponse(w, http.StatusInternalServerError, map[string]string{"error": "internal server error"}) } return } slog.Debug("User login successful", "username", req.Username) writeJSONResponse(w, http.StatusOK, api.AuthResponse{ Token: user.Token, Role: api.Default, }) } func (s *Server) RegisterUser(w http.ResponseWriter, r *http.Request) { slog.Debug("RegisterUser endpoint called") req, err := reqBody[api.AuthRequest](r.Body) if err != nil { slog.Debug("Failed to parse registration request body", "error", err) http.Error(w, err.Error(), http.StatusBadRequest) return } if s.inviteCode != "" { if req.InviteCode == nil || *req.InviteCode != s.inviteCode { slog.Debug("Invalid invite code", "username", req.Username) writeJSONResponse(w, http.StatusForbidden, map[string]string{"error": "invalid invite code"}) return } } if err := auth.Register(auth.UserData{ Username: req.Username, Password: req.Password, }); err != nil { slog.Error("Failed to register user", "username", req.Username, "error", err) writeJSONResponse(w, http.StatusInternalServerError, map[string]string{"error": "failed to register user"}) return } slog.Debug("User registered successfully", "username", req.Username) user, err := auth.Login(auth.UserData{ Username: req.Username, Password: req.Password, }) if err != nil { slog.Error("Failed to login user after registration", "username", req.Username, "error", err) writeJSONResponse(w, http.StatusInternalServerError, map[string]string{"error": "failed to login after registration"}) return } slog.Debug("User login successful after registration", "username", req.Username) writeJSONResponse(w, http.StatusCreated, api.AuthResponse{ Token: user.Token, Role: api.Default, }) }