first commit

This commit is contained in:
ytc1012
2025-11-18 18:08:48 +08:00
commit de90ad79ea
162 changed files with 28098 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
package controller
import (
"github.com/gin-gonic/gin"
"net/http"
"log/slog"
"slgserver/constant"
myhttp "slgserver/server/httpserver"
"slgserver/server/httpserver/logic"
"slgserver/server/httpserver/middleware"
)
type AccountController struct{}
func (self AccountController) RegisterRoutes(g *gin.RouterGroup) {
g.Use(middleware.Cors())
g.Any("/account/register", self.register)
g.Any("/account/changepwd", self.changePwd)
g.Any("/account/forgetpwd", self.forgetPwd)
g.Any("/account/resetpwd", self.resetPwd)
}
func (self AccountController) register(ctx *gin.Context) {
slog.Info("register")
data := make(map[string]interface{})
if err := logic.DefaultUser.CreateUser(ctx); err != nil {
data["code"] = err.(*myhttp.MyError).Id()
data["errmsg"] = err.(*myhttp.MyError).Error()
}else{
data["code"] = constant.OK
}
ctx.JSON(http.StatusOK, data)
}
func (self AccountController) forgetPwd(ctx *gin.Context) {
slog.Info("forgetPwd")
ctx.String(http.StatusOK, "forgetPwd")
}
func (self AccountController) changePwd(ctx *gin.Context) {
slog.Info("changePwd")
data := make(map[string]interface{})
if err := logic.DefaultUser.ChangePassword(ctx); err != nil {
data["code"] = err.(*myhttp.MyError).Id()
data["errmsg"] = err.(*myhttp.MyError).Error()
}else{
data["code"] = constant.OK
}
ctx.JSON(http.StatusOK, data)
}
func (self AccountController) resetPwd(ctx *gin.Context) {
slog.Info("resetPwd")
ctx.String(http.StatusOK, "resetPwd")
}

View File

@@ -0,0 +1,88 @@
package logic
import (
"fmt"
"github.com/gin-gonic/gin"
"math/rand"
"slgserver/constant"
"slgserver/db"
myhttp "slgserver/server/httpserver"
"slgserver/server/loginserver/model"
"slgserver/util"
"time"
)
type UserLogic struct{}
var DefaultUser = UserLogic{}
func (self UserLogic) CreateUser(ctx *gin.Context) error {
account := ctx.Query("username")
pwd := ctx.Query("password")
hardware := ctx.Query("hardware")
if len(account) > 0 && len(pwd) > 0 {
if self.UserExists("username", account) {
return myhttp.New("账号已经存在", constant.UserExist)
}
passcode := fmt.Sprintf("%x", rand.Int31())
user := &model.User{
Username: account,
Passcode: passcode,
Passwd: util.Password(pwd, passcode),
Hardware: hardware,
Ctime: time.Now(),
Mtime: time.Now()}
if _, err := db.MasterDB.Insert(user); err != nil {
return myhttp.New("数据库出错", constant.DBError)
} else{
return nil
}
}else{
return myhttp.New("用户名或密码是空", constant.InvalidParam)
}
}
func (self UserLogic) ChangePassword(ctx *gin.Context) error {
account := ctx.Query("username")
pwd := ctx.Query("password")
newpwd := ctx.Query("newpassword")
user := &model.User{}
if len(account) > 0 && len(pwd) > 0 && len(newpwd) > 0{
if _, err := db.MasterDB.Where("username=?", account).Get(user); err != nil {
return myhttp.New("数据库出错", constant.DBError)
}else{
if util.Password(pwd, user.Passcode) == user.Passwd {
passcode := fmt.Sprintf("%x", rand.Int31())
changeData := map[string]interface{}{
"passwd": util.Password(newpwd, passcode),
"passcode": passcode,
"Mtime": time.Now(),
}
if _, err := db.MasterDB.Table(user).Where("username=?", account).Update(changeData); err !=nil {
return myhttp.New("数据库出错", constant.DBError)
}else{
return nil
}
}else{
return myhttp.New("原密码错误", constant.PwdIncorrect)
}
}
}else{
return myhttp.New("用户名或密码是空", constant.InvalidParam)
}
}
func (UserLogic) UserExists(field, val string) bool {
userLogin := &model.User{}
_, err := db.MasterDB.Where(field+"=?", val).Get(userLogin)
if err != nil || userLogin.UId == 0 {
return false
}
return true
}

View File

@@ -0,0 +1,22 @@
package middleware
import (
"github.com/gin-gonic/gin"
)
func Cors() gin.HandlerFunc {
return func(ctx *gin.Context) {
ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*")
ctx.Writer.Header().Set("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept")
ctx.Writer.Header().Set("Access-Control-Allow-Methods", "GET, OPTIONS, POST, PUT, DELETE")
ctx.Writer.Header().Set("Content-Type", "application/json")
if ctx.Request.Method == "OPTIONS" {
ctx.AbortWithStatus(204)
return
}
ctx.Next()
}
}

View File

@@ -0,0 +1,21 @@
package httpserver
type MyError struct {
err string
id int
}
func New(err string, id int) error {
return &MyError{err: err, id: id}
}
func (self *MyError) Error() string {
return self.err
}
func (self *MyError) Id() int {
return self.id
}