From 809879971a7b9b55779bef9e76f2cdc88c88adcb Mon Sep 17 00:00:00 2001 From: d3m0k1d Date: Thu, 12 Feb 2026 19:14:23 +0300 Subject: [PATCH 1/2] feat: update auth and fix url for gitea --- ...ous=NORMAL&_cache_size=2000&_foreign_keys=ON | Bin 0 -> 12288 bytes backend/internal/handlers/auth_handlers.go | 8 +++----- .../internal/repositories/auth_repository.go | 12 ++++++++---- backend/internal/repositories/interface.go | 2 +- frontend/src/components/Skills.tsx | 2 +- 5 files changed, 13 insertions(+), 11 deletions(-) create mode 100644 backend/?_journal_mode=WAL&_busy_timeout=5000&_synchronous=NORMAL&_cache_size=2000&_foreign_keys=ON diff --git a/backend/?_journal_mode=WAL&_busy_timeout=5000&_synchronous=NORMAL&_cache_size=2000&_foreign_keys=ON b/backend/?_journal_mode=WAL&_busy_timeout=5000&_synchronous=NORMAL&_cache_size=2000&_foreign_keys=ON new file mode 100644 index 0000000000000000000000000000000000000000..2da59199711ade765b4a60ce392b675daaff5344 GIT binary patch literal 12288 zcmeI#y-ve05C?F(MW96DW6OGDt40j)0+`mIs7V@9Mvj^p6Bt`;rhM5ZP|Y%3xeE8lS)GdGncC2tkQ6Fagn^j&ARtc|YCul=t_jS8V?WZzi@ zk))Bl5?QEdn5C(`v}iY{N<@k4^xNLtHvI?)KmY;|fB*y_009U<00Izz00eee0R8_C c|6F_;1Rwwb2tWV=5P$##AOHafK;T>86Di|a>Hq)$ literal 0 HcmV?d00001 diff --git a/backend/internal/handlers/auth_handlers.go b/backend/internal/handlers/auth_handlers.go index 37d2dd2..54c9a6b 100644 --- a/backend/internal/handlers/auth_handlers.go +++ b/backend/internal/handlers/auth_handlers.go @@ -4,6 +4,7 @@ import ( "encoding/json" "os" + "gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/auth" "gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/logger" "gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/repositories" "gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/storage" @@ -106,13 +107,10 @@ func (h *AuthHandlers) CallbackGithub(c *gin.Context) { c.JSON(200, gin.H{"user": ghUser}) reg := h.repo.Register(c.Request.Context(), ghUser) - if reg != nil { + if reg = nil { c.JSON(500, gin.H{"error": "database error", "details": reg.Error()}) - err := h.repo.Register(c.Request.Context(), ghUser) - if err != nil { - c.JSON(500, gin.H{"error": "database error", "details": err.Error()}) - h.logger.Error("Database eer in gh callback handler") } + } } diff --git a/backend/internal/repositories/auth_repository.go b/backend/internal/repositories/auth_repository.go index 7ef2caf..a0c6e14 100644 --- a/backend/internal/repositories/auth_repository.go +++ b/backend/internal/repositories/auth_repository.go @@ -20,16 +20,20 @@ func NewAuthRepository(db *sql.DB) AuthRepository { } } -func (a *authRepository) Register(ctx context.Context, user storage.UserReg) error { +func (a *authRepository) Register(ctx context.Context, user storage.UserReg) (int, error) { + var id int _, err := a.db.Exec( "INSERT INTO users(email, github_id, github_login, avatar_url) VALUES(?, ?, ?, ?)", ) if err != nil { - a.logger.Error("error scan: " + err.Error()) - return err + a.logger.Error("error request: " + err.Error()) + return 0, err } + row := a.db.QueryRow("SELECT id FROM users WHERE github_id = ?", user.GithubID) + row.Scan(&id) + a.logger.Info("User registered:", "email", user.Email) - return nil + return id, nil } func (a *authRepository) IsRegistered(ctx context.Context, github_id int) (bool, error) { diff --git a/backend/internal/repositories/interface.go b/backend/internal/repositories/interface.go index 1c1cbcc..b49bdcf 100644 --- a/backend/internal/repositories/interface.go +++ b/backend/internal/repositories/interface.go @@ -15,6 +15,6 @@ type PostRepository interface { } type AuthRepository interface { - Register(ctx context.Context, user storage.UserReg) error + Register(ctx context.Context, user storage.UserReg) (int, error) IsRegistered(ctx context.Context, github_id int) (bool, error) } diff --git a/frontend/src/components/Skills.tsx b/frontend/src/components/Skills.tsx index cfc45d6..0385dab 100644 --- a/frontend/src/components/Skills.tsx +++ b/frontend/src/components/Skills.tsx @@ -12,7 +12,7 @@ export default function About() { 💻 Github Date: Thu, 12 Feb 2026 19:28:22 +0300 Subject: [PATCH 2/2] feat: test auth full handler and fix liner --- backend/internal/handlers/auth_handlers.go | 38 +++++++++++++++---- .../internal/repositories/auth_repository.go | 6 ++- 2 files changed, 36 insertions(+), 8 deletions(-) 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 -- 2.52.0