You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

224 lines
4.9 KiB
Go

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package scripts
import (
"mygo/conf"
"mygo/model"
"mygo/response"
"mygo/say"
"mygo/dbhelper"
"mygo/libs"
"mygo/validator"
"github.com/labstack/echo/v4"
"gorm.io/gorm"
)
func CreateUser(c echo.Context) error {
data := response.CreateAdminResponse{}
body := &validator.CreateAdminBody{}
err := c.Bind(body)
if err != nil {
return say.Success(c, 10000, data)
}
id := c.QueryParam("id")
if id == "" || body.UserName == "" || body.PassWord == "" {
return say.Success(c, 10001, data)
}
username := body.UserName
db := dbhelper.GetMySqlDB()
user, err := model.GetUserByUserName(db, username)
if err != nil || user.ID != "" {
return say.Success(c, 10013, data)
}
password := body.PassWord
salt := libs.GenString(8)
pwd, err := libs.EncryptWithFixedSalt(password, conf.ObtenationIterations, username, salt)
if err != nil {
return say.Success(c, 10000, data)
}
u := model.User{
ID: libs.GenId(),
UserName: username,
PassWord: pwd,
Salt: salt,
RealName: body.RealName,
}
db.Create(&u)
data.Id = u.ID
return say.Success(c, 0, data)
}
func UpdatePwd(c echo.Context) error {
id := c.QueryParam("id")
oldpassword := c.QueryParam("oldpassword")
password := c.QueryParam("password")
data := response.NoneResponse{}
if id == "" || oldpassword == "" || password == "" {
return say.Success(c, 10001, data)
}
db := dbhelper.GetMySqlDB()
user, err := model.GetUserById(db, id)
if err != nil || user.ID == "" {
return say.Success(c, 10004, data)
}
mysalt := user.Salt
mypwd := user.PassWord
uname, err := libs.DecryptWithFixedSalt(oldpassword, conf.ObtenationIterations, mypwd, mysalt)
if err != nil {
return say.Success(c, 10025, data)
}
if uname != user.UserName {
return say.Success(c, 10026, data)
}
salt := libs.GenString(8)
pwd, err := libs.EncryptWithFixedSalt(password, conf.ObtenationIterations, user.UserName, salt)
if err != nil {
return say.Success(c, 10023, data)
}
rows := db.Model(&user).Updates(map[string]interface{}{"password": pwd, "salt": salt}).RowsAffected
if rows <= 0 {
return say.Success(c, 10023, data)
}
return say.Success(c, 0, data)
}
func UpdateUser(c echo.Context) error {
data := response.NoneResponse{}
body := &validator.UpdateAdminBody{}
err := c.Bind(body)
if err != nil {
return say.Success(c, 10000, data)
}
id := c.QueryParam("id")
if id == "" || body.UserID == "" {
return say.Success(c, 10001, data)
}
userid := body.UserID
db := dbhelper.GetMySqlDB()
user, err := model.GetUserById(db, userid)
if err != nil || user.ID == "" {
return say.Success(c, 10004, data)
}
rows := db.Model(&user).Updates(map[string]interface{}{"root": body.Root, "realname": body.RealName, "avatar": body.Avatar}).RowsAffected
if rows <= 0 {
return say.Success(c, 10014, data)
}
return say.Success(c, 0, data)
}
func DelUser(c echo.Context) error {
id := c.QueryParam("id")
user_id := c.QueryParam("user_id")
data := response.NoneResponse{}
if id == "" || user_id == "" {
return say.Success(c, 10001, data)
}
db := dbhelper.GetMySqlDB()
user, err := model.GetUserById(db, user_id)
if err != nil || user.ID == "" {
return say.Success(c, 10004, data)
}
txerr := db.Transaction(func(tx *gorm.DB) error {
// 在事务中执行一些 db 操作(从这里开始,您应该使用 'tx' 而不是 'db'
u := model.User{}
if err := tx.Where("id = ?", user_id).Delete(&u).Error; err != nil {
// 返回任何错误都会回滚事务
return err
}
r := model.UserRole{}
if err := tx.Where("user_id = ?", user_id).Delete(&r).Error; err != nil {
return err
}
// 返回 nil 提交事务
return nil
})
if txerr != nil {
return say.Success(c, 10000, data)
}
return say.Success(c, 0, data)
}
func GetUserList(c echo.Context) error {
id := c.QueryParam("id")
data := response.AdminListResponse{}
if id == "" {
return say.Success(c, 10001, data)
}
body := &validator.UserListBody{}
err := c.Bind(body)
if err != nil {
return say.Success(c, 10001, data)
}
page := body.Page
if page <= 0 {
page = 1
}
limit := body.Limit
if limit <= 0 {
limit = 10
}
db := dbhelper.GetMySqlDB()
user := model.User{}
var count int64 = 0
db.Find(&user).Count(&count) //总数
data.Count = count
offset := (page - 1) * limit
users, err := model.GetUserList(db, body.UserName, body.RealName, offset, limit)
if err != nil {
return say.Success(c, 10000, data)
}
data.Users = users
return say.Success(c, 0, data)
}
func CheckUserName(c echo.Context) error {
data := response.NoneResponse{}
body := &validator.CheckUserNameBody{}
err := c.Bind(body)
if err != nil {
return say.Success(c, 10000, data)
}
id := c.QueryParam("id")
if id == "" || body.UserName == "" {
return say.Success(c, 10001, data)
}
username := body.UserName
db := dbhelper.GetMySqlDB()
user, err := model.GetUserByUserName(db, username)
if err != nil || user.ID != "" {
return say.Success(c, 10013, data)
}
return say.Success(c, 0, data)
}