From 8985c03ac921f5115f84b069718711aacbad6d88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=E8=8F=8C?= Date: Wed, 29 Mar 2023 02:40:21 +0800 Subject: [PATCH] update --- getway/main.go | 36 +++++++++++++++----- pkg/getway/db/db.go | 71 +++++++++++++++++++++++++++++++++++++++ pkg/opencatd/db/db.go | 35 ------------------- pkg/opencatd/db/keydb.go | 41 ++++++++++++++++++++++ pkg/opencatd/db/userdb.go | 38 +++++++++++++++++++++ 5 files changed, 177 insertions(+), 44 deletions(-) create mode 100644 pkg/getway/db/db.go create mode 100644 pkg/opencatd/db/keydb.go create mode 100644 pkg/opencatd/db/userdb.go diff --git a/getway/main.go b/getway/main.go index fab2799..a30e6c7 100644 --- a/getway/main.go +++ b/getway/main.go @@ -3,6 +3,7 @@ package main import ( "crypto/rand" "encoding/base64" + "fmt" "log" "net/http" "os" @@ -120,12 +121,12 @@ func githubCallbackHandler(c *gin.Context) { } func initDB() { - dsn := "chat:123456@tcp(42.192.36.14:3306)/chat?charset=utf8mb4&parseTime=True&loc=Local" + dsn := os.Getenv("MYSQL_DSN") db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { log.Fatal("Error opening database:", err) } - + // db.AutoMigrate() sqlDB, err := db.DB() if err != nil { log.Fatal("Error connecting to database:", err) @@ -198,7 +199,7 @@ func generateJWTToken(userID int64) (string, error) { token := jwt.New(jwt.SigningMethodHS256) claims := token.Claims.(jwt.MapClaims) - claims["userID"] = userID + claims["user"] = userID claims["exp"] = time.Now().Add(time.Hour * 24).Unix() jwtToken, err := token.SignedString(jwtSecret) @@ -209,10 +210,27 @@ func generateJWTToken(userID int64) (string, error) { return jwtToken, nil } -type GithubUser struct { - ID int `json:"id"` - Login string `json:"login"` - Name string `json:"name"` - AvatarURL string `json:"avatar_url"` - Email string `json:"email"` +func verifyJWTToken(tokenString string) { + // 验证 token + tokenValue, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { + // 该函数用于验证令牌的签名方法是否正确 + if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { + return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) + } + + return jwtSecret, nil + }) + if err != nil { + fmt.Println("Error parsing token string:", err) + return + } + + // 获取声明信息 + if claims, ok := tokenValue.Claims.(jwt.MapClaims); ok && tokenValue.Valid { + // fmt.Println("Authorized:", claims["authorized"]) + fmt.Println("User:", claims["user"]) + fmt.Println("Expiration time:", time.Unix(int64(claims["exp"].(float64)), 0)) + } else { + fmt.Println("Invalid token.") + } } diff --git a/pkg/getway/db/db.go b/pkg/getway/db/db.go new file mode 100644 index 0000000..ea44e04 --- /dev/null +++ b/pkg/getway/db/db.go @@ -0,0 +1,71 @@ +package db + +import ( + "os" + + "gorm.io/driver/mysql" + "gorm.io/gorm" +) + +// 定义User模型 +type User struct { + UserID int `gorm:"primaryKey"` + Username string `gorm:"not null"` + Email string `gorm:"not null"` + AvatarURL string + AccessToken string `gorm:"not null"` +} + +// 初始化GORM数据库 +func initializeDB() (*gorm.DB, error) { + dsn := os.Getenv("MYSQL_DSN") + + db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) + if err != nil { + return nil, err + } + + return db, nil +} + +// 创建用户 +func createUser(db *gorm.DB, user *User) error { + result := db.Create(user) + if result.Error != nil { + return result.Error + } + + return nil +} + +// 根据用户ID查询用户 +func getUserByID(db *gorm.DB, userID int) (*User, error) { + var user User + + result := db.First(&user, userID) + if result.Error != nil { + return nil, result.Error + } + + return &user, nil +} + +// 更新用户 +func updateUser(db *gorm.DB, user *User) error { + result := db.Save(user) + if result.Error != nil { + return result.Error + } + + return nil +} + +// 删除用户 +func deleteUser(db *gorm.DB, user *User) error { + result := db.Delete(user) + if result.Error != nil { + return result.Error + } + + return nil +} diff --git a/pkg/opencatd/db/db.go b/pkg/opencatd/db/db.go index 0b44a64..7f7e6aa 100644 --- a/pkg/opencatd/db/db.go +++ b/pkg/opencatd/db/db.go @@ -5,12 +5,6 @@ import ( "gorm.io/gorm" ) -type User struct { - gorm.Model - Name string `gorm:"not null"` - Token string `gorm:"unique;not null"` -} - var db *gorm.DB func init() { @@ -26,32 +20,3 @@ func init() { panic(err) } } - -// 添加用户 -func AddUser(name, token string) error { - user := &User{Name: name, Token: token} - result := db.Create(&user) - if result.Error != nil { - return result.Error - } - return nil -} - -// 删除用户 -func DeleteUser(id uint) error { - result := db.Delete(&User{}, id) - if result.Error != nil { - return result.Error - } - return nil -} - -// 修改用户 -func UpdateUser(id uint, name, token string) error { - user := &User{Name: name, Token: token} - result := db.Model(&User{}).Where("id = ?", id).Updates(user) - if result.Error != nil { - return result.Error - } - return nil -} diff --git a/pkg/opencatd/db/keydb.go b/pkg/opencatd/db/keydb.go new file mode 100644 index 0000000..e2709e0 --- /dev/null +++ b/pkg/opencatd/db/keydb.go @@ -0,0 +1,41 @@ +package db + +import "gorm.io/gorm" + +type Key struct { + gorm.Model + ApiKey string + UserId string +} + +// 添加记录 +func AddKey(apiKey string, userId string) error { + key := Key{ + ApiKey: apiKey, + UserId: userId, + } + if err := db.Create(&key).Error; err != nil { + return err + } + return nil +} + +// 删除记录 +func DeleteKey(id uint) error { + if err := db.Delete(&Key{}, id).Error; err != nil { + return err + } + return nil +} + +// 更新记录 +func UpdateKey(id uint, apiKey string, userId string) error { + key := Key{ + ApiKey: apiKey, + UserId: userId, + } + if err := db.Model(&Key{}).Where("id = ?", id).Updates(key).Error; err != nil { + return err + } + return nil +} diff --git a/pkg/opencatd/db/userdb.go b/pkg/opencatd/db/userdb.go new file mode 100644 index 0000000..0757341 --- /dev/null +++ b/pkg/opencatd/db/userdb.go @@ -0,0 +1,38 @@ +package db + +import "gorm.io/gorm" + +type User struct { + gorm.Model + Name string `gorm:"not null"` + Token string `gorm:"unique;not null"` +} + +// 添加用户 +func AddUser(name, token string) error { + user := &User{Name: name, Token: token} + result := db.Create(&user) + if result.Error != nil { + return result.Error + } + return nil +} + +// 删除用户 +func DeleteUser(id uint) error { + result := db.Delete(&User{}, id) + if result.Error != nil { + return result.Error + } + return nil +} + +// 修改用户 +func UpdateUser(id uint, name, token string) error { + user := &User{Name: name, Token: token} + result := db.Model(&User{}).Where("id = ?", id).Updates(user) + if result.Error != nil { + return result.Error + } + return nil +}