update
This commit is contained in:
@@ -3,6 +3,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
@@ -120,12 +121,12 @@ func githubCallbackHandler(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func initDB() {
|
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{})
|
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Error opening database:", err)
|
log.Fatal("Error opening database:", err)
|
||||||
}
|
}
|
||||||
|
// db.AutoMigrate()
|
||||||
sqlDB, err := db.DB()
|
sqlDB, err := db.DB()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Error connecting to database:", err)
|
log.Fatal("Error connecting to database:", err)
|
||||||
@@ -198,7 +199,7 @@ func generateJWTToken(userID int64) (string, error) {
|
|||||||
token := jwt.New(jwt.SigningMethodHS256)
|
token := jwt.New(jwt.SigningMethodHS256)
|
||||||
|
|
||||||
claims := token.Claims.(jwt.MapClaims)
|
claims := token.Claims.(jwt.MapClaims)
|
||||||
claims["userID"] = userID
|
claims["user"] = userID
|
||||||
claims["exp"] = time.Now().Add(time.Hour * 24).Unix()
|
claims["exp"] = time.Now().Add(time.Hour * 24).Unix()
|
||||||
|
|
||||||
jwtToken, err := token.SignedString(jwtSecret)
|
jwtToken, err := token.SignedString(jwtSecret)
|
||||||
@@ -209,10 +210,27 @@ func generateJWTToken(userID int64) (string, error) {
|
|||||||
return jwtToken, nil
|
return jwtToken, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type GithubUser struct {
|
func verifyJWTToken(tokenString string) {
|
||||||
ID int `json:"id"`
|
// 验证 token
|
||||||
Login string `json:"login"`
|
tokenValue, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
|
||||||
Name string `json:"name"`
|
// 该函数用于验证令牌的签名方法是否正确
|
||||||
AvatarURL string `json:"avatar_url"`
|
if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
|
||||||
Email string `json:"email"`
|
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
71
pkg/getway/db/db.go
Normal 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
|
||||||
|
}
|
||||||
@@ -5,12 +5,6 @@ import (
|
|||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
type User struct {
|
|
||||||
gorm.Model
|
|
||||||
Name string `gorm:"not null"`
|
|
||||||
Token string `gorm:"unique;not null"`
|
|
||||||
}
|
|
||||||
|
|
||||||
var db *gorm.DB
|
var db *gorm.DB
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@@ -26,32 +20,3 @@ func init() {
|
|||||||
panic(err)
|
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
41
pkg/opencatd/db/keydb.go
Normal 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
38
pkg/opencatd/db/userdb.go
Normal 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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user