This commit is contained in:
C菌
2023-03-29 02:40:21 +08:00
parent 2ba63e226d
commit 8985c03ac9
5 changed files with 177 additions and 44 deletions

View File

@@ -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.")
}
}

71
pkg/getway/db/db.go Normal file
View File

@@ -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
}

View File

@@ -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
}

41
pkg/opencatd/db/keydb.go Normal file
View File

@@ -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
}

38
pkg/opencatd/db/userdb.go Normal file
View File

@@ -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
}