You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.7 KiB
78 lines
2.7 KiB
2 years ago
|
package login
|
||
|
|
||
|
import (
|
||
|
"encoding/base64"
|
||
|
"net/http"
|
||
|
"strings"
|
||
|
"time"
|
||
|
"automatedtesting/usecases_server/models"
|
||
|
"automatedtesting/usecases_server/utils/cyllib/log"
|
||
|
"automatedtesting/usecases_server/utils/cyllib/re"
|
||
|
|
||
|
"github.com/gin-gonic/gin"
|
||
|
"gorm.io/gorm"
|
||
|
)
|
||
|
|
||
|
/*
|
||
|
`/static/css/app.0e13ee8a4a7b17cacf77292f97344dce.css`,
|
||
|
`/static/js/manifest.2ae2e69a05c33dfc65f8.js`, `/static/js/vendor.a9fad478340cce70ee2e.js`, `/static/js/app.4a0b9a1d239c49af2b11.js`,
|
||
|
`/static/js/app.4f0172a70ebeba47648c.js`, `/static/js/vendor.a9fad478340cce70ee2e.js.map`, `/static/css/app.c573b02dfcbd7d12bbf9e7888b8cf66a.css`,
|
||
|
`/static/js/manifest.2ae2e69a05c33dfc65f8.js.map`, `/static/js/app.4f0172a70ebeba47648c.js.map`, `/static/css/app.c573b02dfcbd7d12bbf9e7888b8cf66a.css.map`,
|
||
|
`/static/css/app.c573b02dfcbd7d12bbf9e7888b8cf66a.css`, `/static/js/vendor.afc9429067b946548f73.js`, `/static/js/app.0e5193224b1ee6ed1422.js`,
|
||
|
`/static/favicon.ico`, `/static/img/login.83fc825.png`, `/static/fonts/element-icons.535877f.woff`,
|
||
|
`/static/fonts/element-icons.732389d.ttf`
|
||
|
*/
|
||
|
func LoginMiddle(c *gin.Context) {
|
||
|
us := models.Users{}
|
||
|
// fmt.Println(c.Request.RequestURI)
|
||
|
var whitelist = []string{`/at/runcase/socket`, `/`, `/favicon.ico`, "/statistics/websocket", "/statistics/websocket/runcase"}
|
||
|
for _, d := range whitelist {
|
||
|
f := strings.Split(c.Request.RequestURI, "?")[0]
|
||
|
r := re.MatchString(`/static/.*`, f)
|
||
|
if d == f || r {
|
||
|
c.Set("uid", us.Id)
|
||
|
c.Set("uname", us.Name)
|
||
|
c.Set("power", us.Power)
|
||
|
c.Next()
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
token := c.GetHeader("token")
|
||
|
// 校验token
|
||
|
|
||
|
if err := models.GetDb().Table("users").Where("token = ?", token).First(&us).Error; err != nil {
|
||
|
c.Abort()
|
||
|
username := c.PostForm("username")
|
||
|
password := c.PostForm("password")
|
||
|
if username == "" && password == "" {
|
||
|
c.JSON(http.StatusOK, &gin.H{"login_state": false})
|
||
|
return
|
||
|
}
|
||
|
flag := Logins(c, username, password, &us)
|
||
|
c.JSON(http.StatusOK, &gin.H{"flag": flag})
|
||
|
}
|
||
|
c.Set("uid", us.Id)
|
||
|
c.Set("uaccount", us.Username)
|
||
|
c.Set("uname", us.Name)
|
||
|
c.Set("power", us.Power)
|
||
|
c.Next()
|
||
|
}
|
||
|
|
||
|
func Logins(c *gin.Context, name, pass string, us *models.Users) bool {
|
||
|
if err := models.GetDb().Table("users").Where("username = ? AND password = ?", name, pass).First(us).Error; err != nil {
|
||
|
return false
|
||
|
}
|
||
|
tpstr := name + pass + time.Now().String()
|
||
|
token := base64.StdEncoding.EncodeToString([]byte(tpstr))
|
||
|
c.Header("Token", token)
|
||
|
c.Header("Access-Control-Expose-Headers", "Token")
|
||
|
err := models.GetDb().Transaction(func(tx *gorm.DB) error {
|
||
|
if err := tx.Model(&models.Users{}).Where("username = ? AND password = ?", name, pass).Update("token", token).Error; err != nil {
|
||
|
log.WriteErr(err)
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
})
|
||
|
return err == nil
|
||
|
}
|