Skip to content

Commit

Permalink
0808
Browse files Browse the repository at this point in the history
  • Loading branch information
qishu321 committed Aug 8, 2023
1 parent 8d107f1 commit 6ead99a
Show file tree
Hide file tree
Showing 12 changed files with 470 additions and 19 deletions.
15 changes: 15 additions & 0 deletions .idea/git_toolbox_prj.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

107 changes: 107 additions & 0 deletions api/user.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package api

import (
"cmdb-ops-flow/models"
"cmdb-ops-flow/service"
"cmdb-ops-flow/utils/msg"
"cmdb-ops-flow/utils/result"
"github.com/gin-gonic/gin"
"net/http"
)

func AddUser(c *gin.Context) {
var data models.User
if err := c.ShouldBindJSON(&data); err != nil {
c.JSON(http.StatusOK, (&result.Result{}).Error(msg.ERROR, err.Error(), msg.GetErrMsg(msg.ERROR)))
return
}
if data.Username == "" || data.Password == "" {
c.JSON(http.StatusOK, (&result.Result{}).Error(msg.ERROR, nil, msg.GetErrMsg(msg.ERROR_USER_NO_PASSWD)))
return
}
code := models.CheckUser(data.Username)
if code == msg.SUCCSE {
service.AddUser(data)
}
c.JSON(http.StatusOK, (&result.Result{}).Ok(code, data, msg.GetErrMsg(code)))

}

func DelUser(c *gin.Context) {
var data models.User
if err := c.ShouldBindJSON(&data); err != nil {
c.JSON(http.StatusOK, (&result.Result{}).Error(msg.ERROR, err.Error(), msg.GetErrMsg(msg.ERROR)))
return
}
code := models.DelUser(data.Userid)

c.JSON(http.StatusOK, (&result.Result{}).Ok(code, data, msg.GetErrMsg(code)))

}

func GetUser(c *gin.Context) {
var data models.User
if err := c.ShouldBindJSON(&data); err != nil {
c.JSON(http.StatusOK, (&result.Result{}).Error(msg.ERROR, err.Error(), msg.GetErrMsg(msg.ERROR)))
return
}
list, err := service.GetUserList(data)
if err != nil {
c.JSON(http.StatusOK, (&result.Result{}).Error(msg.ERROR, err.Error(), msg.GetErrMsg(msg.ERROR)))
return
}
code := 200
c.JSON(http.StatusOK, (&result.Result{}).Ok(code, list, msg.GetErrMsg(code)))

}
func EditUser(c *gin.Context) {
var data models.User
if err := c.ShouldBindJSON(&data); err != nil {
c.JSON(http.StatusOK, (&result.Result{}).Error(msg.ERROR, err.Error(), msg.GetErrMsg(msg.ERROR)))
return
}
list, err := service.EditUser(data)
if err != nil {
c.JSON(http.StatusOK, (&result.Result{}).Error(msg.ERROR, err.Error(), msg.GetErrMsg(msg.ERROR)))
return
}
code := 200
c.JSON(http.StatusOK, (&result.Result{}).Ok(code, list, msg.GetErrMsg(code)))

}
func Login(c *gin.Context) {
var json models.User
if err := c.ShouldBindJSON(&json); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
data, err := service.Login(json)
if err != nil {
c.JSON(http.StatusOK, (&result.Result{}).Error(msg.ERROR_USER_NO_LOGIN, err.Error(), msg.GetErrMsg(msg.ERROR_USER_NO_LOGIN)))
return
}
code := 200
c.JSON(http.StatusOK, (&result.Result{}).Ok(code, data, msg.GetErrMsg(code)))
}

func Info(c *gin.Context) {
token := c.MustGet("token").(string)
data, err := service.Info(token)
if err != nil {
c.JSON(http.StatusOK, (&result.Result{}).Error(msg.ERROR_USER_NO_LOGIN, err.Error(), msg.GetErrMsg(msg.ERROR_USER_NO_LOGIN)))
return
}
code := 200
c.JSON(http.StatusOK, (&result.Result{}).Ok(code, data, msg.GetErrMsg(code)))
}

func Logout(c *gin.Context) {
token := c.MustGet("token").(string)
err := service.Logout(token)
if err != nil {
c.JSON(http.StatusOK, (&result.Result{}).Error(msg.ERROR_USER_NO_LOGOUT, err.Error(), msg.GetErrMsg(msg.ERROR_USER_NO_LOGOUT)))
return
}
code := 200
c.JSON(http.StatusOK, (&result.Result{}).Ok(code, "退出登录成功", msg.GetErrMsg(code)))
}
31 changes: 19 additions & 12 deletions conf/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,32 +7,39 @@ import (
)

var (
AppMode string
HttpPort string
ReadTimeout time.Duration
WriteTimeout time.Duration
AppMode string
HttpPort string
ReadTimeout time.Duration
WriteTimeout time.Duration

DbHost string
DbPort string
DbUser string
DbPassWord string
DbName string
Md5Key string

DbHost string
DbPort string
DbUser string
DbPassWord string
DbName string
)

func init() {
file,err := ini.Load("conf/config.ini")
func init() {
file, err := ini.Load("conf/config.ini")
if err != nil {
fmt.Println("配置文件读取失败,请检查文件路径:",err)
fmt.Println("配置文件读取失败,请检查文件路径:", err)
}
LoadServer(file)
LoadData(file)
LoadApp(file)
}
func LoadServer(file *ini.File) {
AppMode = file.Section("server").Key("AppMode").String()
HttpPort = file.Section("server").Key("HttpPort").String()
ReadTimeout = time.Duration(file.Section("server").Key("ReadTimeout").MustInt(60)) * time.Second
WriteTimeout = time.Duration(file.Section("server").Key("WriteTimeout").MustInt(60)) * time.Second
}
func LoadApp(file *ini.File) {
Md5Key = file.Section("app").Key("Md5Key").String()
}

func LoadData(file *ini.File) {
DbHost = file.Section("database").Key("DbHost").String()
DbPort = file.Section("database").Key("DbPort").String()
Expand Down
3 changes: 2 additions & 1 deletion conf/config.ini
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ AppMode = debug
HttpPort = :8000
ReadTimeout: 60
WriteTimeout: 60

[app]
Md5Key = 123456789

[database]
Db = mysql
Expand Down
5 changes: 5 additions & 0 deletions middleware/cors.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@ import (
func Cors() gin.HandlerFunc {
return func(context *gin.Context) {
method := context.Request.Method
//context.Header("Access-Control-Allow-Origin", "*")
//context.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token,x-token,token")
//context.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
//context.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type")
//context.Header("Access-Control-Allow-Credentials", "true")
context.Header("Access-Control-Allow-Origin", "*")
context.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token,x-token,token")
context.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
Expand Down
55 changes: 55 additions & 0 deletions middleware/token.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package middleware

import (
"cmdb-ops-flow/models"
"cmdb-ops-flow/utils/result"
"fmt"
"github.com/gin-gonic/gin"
"net/http"
"time"
)

func Token() gin.HandlerFunc {
return func(context *gin.Context) {
token := context.Request.Header.Get("X-Token")
fmt.Println("Token value:", token) // 在这里打印 Token 的值
fmt.Println(token)
token_exsits, err := models.TokenInfo(token)
if err != nil {
resospnseWithError(401, "非法请求", context)
return
}
fmt.Println(token_exsits)
if len(token_exsits) != 0 {
//先做时间判断
target_time, _ := time.ParseInLocation("2006-01-02 15:04:05", time.Time(token_exsits[0].ExpirationAt).Format("2006-01-02 15:04:05"), time.Local) //需要加上time.Local不然会自动加八小时
if target_time.Unix() <= time.Now().Unix() {
fmt.Println("过期报错")
//过期报错
resospnseWithError(401, "timeout", context)
return
}
//token没过期,更新到期时间
now := time.Unix(time.Now().Unix()+7200, 0).Format("2006-01-02 15:04:05")
err = models.UpdateTokenTime(token, now)
context.Set("name", token_exsits[0].Username)
context.Set("avatar", token_exsits[0].Avatar)
context.Set("token", token)
} else {
fmt.Println("没了")
resospnseWithError(401, "已退出", context)
return
}

context.Next()
}
}

func resospnseWithError(code int, message string, c *gin.Context) {
var res result.Result
res.Code = code
res.Msg = message
c.JSON(200, res) //前端返回也要返回200才能拦截
c.JSON(http.StatusOK, res)
c.Abort()
}
5 changes: 3 additions & 2 deletions models/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
_ "github.com/jinzhu/gorm/dialects/mysql"
"time"
)

var db *gorm.DB
var err error

Expand All @@ -26,7 +27,7 @@ func InitDb() {
db.DB().SetMaxIdleConns(20) //设置连接池,空闲
db.DB().SetMaxOpenConns(100) //打开
db.DB().SetConnMaxLifetime(time.Second * 30)
db.AutoMigrate(Cmdb{},)
db.AutoMigrate(Cmdb{}, User{})
db.LogMode(true)

}
}
111 changes: 111 additions & 0 deletions models/user.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package models

import (
"cmdb-ops-flow/utils/msg"
"time"
)

type User struct {
ID int `gorm:"primary_key"`
Userid int64 `gorm:"type:bigint;not null" json:"userid" validate:"required"`
Username string `json:"username" db:"username" form:"username" ` // Make username required
Password string `json:"password" db:"password" form:"password" ` // Make password required

Avatar string `json:"avatar" db:"avatar" form:"avatar"`
Token string
Role int `gorm:"type:int;DEFAULT:2" json:"role" validate:"required,gte=2" label:"角色码"`
ExpirationAt time.Time `gorm:"default:CURRENT_TIMESTAMP",json:"created_at"`
}

func AddUser(user User) (interface{}, error) {

err := db.Create(&user).Error
return user, err
}
func EditUser(user User) (interface{}, error) {
err := db.Select("id").Where("username = ? AND userid = ?", user.Username, user.Userid).First(&user).Error
if err != nil {
return msg.ERROR_USERNAME_USED, err
}
err = db.Model(&user).Where("username = ? AND userid = ?", user.Username, user.Userid).Updates(user).Error
if err != nil {
return user, err
}

return user, err
}

func DelUser(name int64) (code int) {
var user User
db.Select("id").Where("userid = ?", name).First(&user)
if user.ID > 0 {
err = db.Where("userid = ?", name).Delete(&user).Error
if err != nil {
return msg.ERROR_USER_NOT_EXIST
}
return msg.SUCCSE
} else {
return msg.ERROR
}

}
func GetUserList(id int) ([]User, error) {
var list []User
if id != 0 {
res := db.Debug().Where("id = ?", id).Find(&list)
return list, res.Error
} else {
res := db.Debug().Find(&list)
return list, res.Error
}
}
func CheckUser(name string) (code int) {
var user User
db.Select("id").Where("username = ?", name).First(&user)
if user.ID > 0 {
return msg.ERROR_USERNAME_USED
}
return msg.SUCCSE
}
func Login(name string, password string) (list []User, err error) {
var user []User
db.Debug().Where("username = ? and password = ?", name, password).First(&user)

return user, nil
}
func LoginCreateToken(name string, password string, token string, expiration_at string) (err error) {
return db.Debug().Table("user").Where("username = ? and password = ?", name, password).Updates(map[string]interface{}{"token": token, "expiration_at": expiration_at}).Error
}
func TokenInfo(token string) (list []User, err error) {
var user []User
db.Debug().Where("token = ? ", token).First(&user)
return user, nil
}
func UpdateTokenTime(token string, expiration_at string) (err error) {
return db.Debug().Table("user").Where("token = ? ", token).Updates(map[string]interface{}{"expiration_at": expiration_at}).Error
}

func Info(token string) (data interface{}, err error) {
type Result struct {
Username string
Avatar string
}
var result Result
db.Debug().Table("user").Select("username, avatar").Where("token = ? ", token).Scan(&result)
return result, nil
}
func Logout(token string) (err error) {
return db.Debug().Table("user").Where("token = ? ", token).Updates(map[string]interface{}{"token": ""}).Error
}

//// CheckUser 查询密码是否存在
//func Check_Login(user User) (code int, err error) {
// err = db.Select("id").Where("username = ? AND password = ?", user.Username, user.Password).First(&user).Error
// if err != nil {
// if errors.Is(err, gorm.ErrRecordNotFound) {
// return 500, err
// }
// return 500, err
// }
// return msg.SUCCSE, err
//}
Loading

0 comments on commit 6ead99a

Please sign in to comment.