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 }