first commit
This commit is contained in:
59
server/httpserver/controller/account.go
Normal file
59
server/httpserver/controller/account.go
Normal 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")
|
||||
}
|
||||
|
||||
88
server/httpserver/logic/account.go
Normal file
88
server/httpserver/logic/account.go
Normal 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
|
||||
}
|
||||
22
server/httpserver/middleware/cors.go
Normal file
22
server/httpserver/middleware/cors.go
Normal 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()
|
||||
}
|
||||
}
|
||||
|
||||
21
server/httpserver/myerror.go
Normal file
21
server/httpserver/myerror.go
Normal 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
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user