自动化测试
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

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
}