diff --git a/backend/internal/handlers/auth_handlers.go b/backend/internal/handlers/auth_handlers.go index 54c9a6b..c404a39 100644 --- a/backend/internal/handlers/auth_handlers.go +++ b/backend/internal/handlers/auth_handlers.go @@ -67,6 +67,7 @@ func (h *AuthHandlers) LoginGithub(c *gin.Context) { // @Failure 500 {object} map[string]string "Exchange failed" // @Router /callback/github [get] func (h *AuthHandlers) CallbackGithub(c *gin.Context) { + var id int h.logger.Info("CallbackGithub called") code := c.Query("code") @@ -84,6 +85,7 @@ func (h *AuthHandlers) CallbackGithub(c *gin.Context) { c.JSON(500, gin.H{"error": "exchange failed", "details": err.Error()}) return } + client := h.config.Client(c.Request.Context(), token) resp, err := client.Get("https://api.github.com/user") if err != nil { @@ -91,6 +93,7 @@ func (h *AuthHandlers) CallbackGithub(c *gin.Context) { c.JSON(500, gin.H{"error": "get request failed to github", "details": err.Error()}) return } + var ghUser storage.UserReg err = json.NewDecoder(resp.Body).Decode(&ghUser) if err != nil { @@ -98,20 +101,41 @@ func (h *AuthHandlers) CallbackGithub(c *gin.Context) { c.JSON(500, gin.H{"error": "decode failed", "details": err.Error()}) return } + isreg, err := h.repo.IsRegistered(c.Request.Context(), ghUser.GithubID) if err != nil { + h.logger.Error("Database check failed: " + err.Error()) c.JSON(500, gin.H{"error": "database error", "details": err.Error()}) return } - if isreg { - c.JSON(200, gin.H{"user": ghUser}) - - reg := h.repo.Register(c.Request.Context(), ghUser) - if reg = nil { - c.JSON(500, gin.H{"error": "database error", "details": reg.Error()}) - } + if !isreg { + h.logger.Info("New user, registering: " + ghUser.GithubLogin) + id, err = h.repo.Register(c.Request.Context(), ghUser) + if err != nil { + h.logger.Error("Registration failed: " + err.Error()) + c.JSON(500, gin.H{"error": "registration failed", "details": err.Error()}) + return } } + user := storage.User{ + ID: id, + GithubID: ghUser.GithubID, + GithubLogin: ghUser.GithubLogin, + Email: ghUser.Email, + AvatarURL: ghUser.AvatarURL, + } + jwtToken, err := auth.GenerateJWT(user) + if err != nil { + h.logger.Error("JWT generation failed: " + err.Error()) + c.JSON(500, gin.H{"error": "token generation failed", "details": err.Error()}) + return + } + h.logger.Info("Authentication successful for user: " + ghUser.GithubLogin) + + c.JSON(200, gin.H{ + "token": jwtToken, + "user": ghUser, + }) } diff --git a/backend/internal/repositories/auth_repository.go b/backend/internal/repositories/auth_repository.go index a0c6e14..5361516 100644 --- a/backend/internal/repositories/auth_repository.go +++ b/backend/internal/repositories/auth_repository.go @@ -30,7 +30,11 @@ func (a *authRepository) Register(ctx context.Context, user storage.UserReg) (in return 0, err } row := a.db.QueryRow("SELECT id FROM users WHERE github_id = ?", user.GithubID) - row.Scan(&id) + err = row.Scan(&id) + if err != nil { + a.logger.Error("error scan: " + err.Error()) + return 0, err + } a.logger.Info("User registered:", "email", user.Email) return id, nil