Update backend #6

Merged
d3m0k1d merged 9 commits from develop into master 2026-02-11 13:48:10 +00:00
6 changed files with 63 additions and 7 deletions
Showing only changes of commit 4a5c42ca06 - Show all commits

View File

@@ -16,7 +16,7 @@ func GenerateJWT(user storage.User) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS512, jwt.MapClaims{ token := jwt.NewWithClaims(jwt.SigningMethodHS512, jwt.MapClaims{
"id": user.ID, "id": user.ID,
"email": user.Email, "email": user.Email,
"login": user.GithubLogin, "github_id": user.GithubID,
}) })
tokenString, err := token.SignedString(jwtSecret) tokenString, err := token.SignedString(jwtSecret)
if err != nil { if err != nil {

View File

@@ -1,6 +1,7 @@
package handlers package handlers
import ( import (
"encoding/json"
"os" "os"
"gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/logger" "gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/logger"
@@ -81,7 +82,35 @@ func (h *AuthHandlers) CallbackGithub(c *gin.Context) {
c.JSON(500, gin.H{"error": "exchange failed", "details": err.Error()}) c.JSON(500, gin.H{"error": "exchange failed", "details": err.Error()})
return return
} }
client := h.config.Client(c.Request.Context(), token)
resp, err := client.Get("https://api.github.com/user")
if err != nil {
h.logger.Error("Get failed: " + err.Error())
c.JSON(500, gin.H{"error": "get request failed to github", "details": err.Error()})
return
}
var ghUser struct {
ID int `json:"id"`
Login string `json:"login"`
Email string `json:"email"`
AvatarURL string `json:"avatar_url"`
}
err = json.NewDecoder(resp.Body).Decode(&ghUser)
if err != nil {
h.logger.Error("Decode failed: " + err.Error())
c.JSON(500, gin.H{"error": "decode failed", "details": err.Error()})
return
}
isreg, err := h.repo.IsRegistered(c.Request.Context(), ghUser.ID)
if err != nil {
c.JSON(500, gin.H{"error": "database error", "details": err.Error()})
return
}
if isreg {
c.JSON(200, gin.H{"user": ghUser})
return
}
h.logger.Info("200 OK - token received") h.logger.Info("200 OK - token received")
c.JSON(200, gin.H{"token": token}) c.JSON(200, gin.H{"user": ghUser})
} }

View File

@@ -5,6 +5,7 @@ import (
"database/sql" "database/sql"
"gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/logger" "gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/logger"
"gitea.d3m0k1d.ru/d3m0k1d/d3m0k1d.ru/backend/internal/storage"
) )
type authRepository struct { type authRepository struct {
@@ -18,5 +19,23 @@ func NewAuthRepository(db *sql.DB) AuthRepository {
logger: logger.New(false), logger: logger.New(false),
} }
} }
func (a *authRepository) Test(ctx context.Context) {
func (a *authRepository) Register(ctx context.Context, user storage.UserReg) error {
_, 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.Info("User registered:", "email", user.Email)
return nil
}
func (a *authRepository) IsRegistered(ctx context.Context, github_id int) (bool, error) {
row := a.db.QueryRow("SELECT id FROM users WHERE github_id = ?", github_id)
if row != nil {
return true, nil
}
return false, nil
} }

View File

@@ -15,5 +15,6 @@ type PostRepository interface {
} }
type AuthRepository interface { type AuthRepository interface {
Test(ctx context.Context) Register(ctx context.Context, user storage.UserReg) error
IsRegistered(ctx context.Context, github_id int) (bool, error)
} }

View File

@@ -11,7 +11,7 @@ CREATE TABLE IF NOT EXISTS posts(
CREATE TABLE IF NOT EXISTS users( CREATE TABLE IF NOT EXISTS users(
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
email TEXT, email TEXT,
github_id TEXT, github_id INTEGER,
github_login TEXT, github_login TEXT,
avatar_url TEXT avatar_url TEXT
); );

View File

@@ -25,3 +25,10 @@ type User struct {
GithubLogin string `db:"github_login"` GithubLogin string `db:"github_login"`
AvatarURL string `db:"avatar_url"` AvatarURL string `db:"avatar_url"`
} }
type UserReg struct {
Email string `db:"email"`
GithubID string `db:"github_id"`
GithubLogin string `db:"github_login"`
AvatarURL string `db:"avatar_url"`
}