| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- package partial
- import (
- "fmt"
- "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
- "git.qianqiusoft.com/qianqiusoft/light-apiengine/logs"
- sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
- sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
- "strconv"
- "strings"
- "time"
- //"git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
- )
- // _Login
- // @Title _Login
- // @Description 用户登录
- // @Param logininfo false "登录信息"
- // @Success 200 {object} Account
- // @Failure 403 :id is empty
- func Sso_Login(c *entitys.CtrlContext) {
- var logininfo sysmodel.LoginInfo
- c.Ctx.BindJSON(&logininfo)
- //fmt.Println(logininfo)
- var user sysmodel.SysUser
- ret, err := c.PlatformDbEngine.SQL(sysmodel.SqlUserLogin, logininfo.Account).Get(&user)
- if ret && err == nil {
- //TODO check password
- timestamp := uint64(time.Now().UnixNano())
- md5Pwd := sysutils.HashPassword(logininfo.Password, "")
- //密码错误
- if !strings.EqualFold(user.Password, md5Pwd) {
- c.Ctx.JSON(200, sysmodel.SysReturn{400, "password incorrect!", nil})
- return
- }
- token := &entitys.Token{}
- timestamp_str := strconv.FormatUint(timestamp, 10)
- sec_tooken := sysutils.GenerateToken(logininfo.Account + timestamp_str)
- if v := sysutils.GetGlobalTokenStore().Get(sec_tooken); v == nil {
- token.AccessToken = sec_tooken
- token.RefreshToken = sec_tooken
- token.LoginID = logininfo.Account
- token.UserId = user.Id
- token.Result = 200
- //token.Password = pwd
- token.ServerIp = ""
- token.Domain = user.Domain
- sysutils.GetGlobalTokenStore().Set(sec_tooken, token)
- //sysutils.GetGlobalTokenStore().Set(token.LoginID+user.Domain, token)
- } else {
- token = v
- }
- data := sysmodel.LoginReturnInfo{}
- data.Id = user.Id
- data.LoginId = user.LoginId
- data.Name = user.Name
- data.Mobile = user.Mobile
- data.Email = user.Email
- data.Token = token.AccessToken
- data.Type = user.Type
- data.Domain = user.Domain
- c.Ctx.JSON(200, sysmodel.SysReturn{200, "", data})
- } else {
- //fmt.Println(err.Error())
- c.Ctx.JSON(200, sysmodel.SysReturn{400, "username or password incorrect!", nil})
- }
- }
- // _Logout
- // @Title _Logout
- // @Description 用户退出
- // @Success 200 {object} Account
- // @Failure 403 :id is empty
- func Sso_Logout(c *entitys.CtrlContext) {
- token := c.Ctx.GetHeader("token")
- fmt.Println("delete token: ", token)
- sysutils.GetGlobalTokenStore().Remove(token)
- ret := __none_func_sso__()
- if ret {
- c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
- } else {
- c.Ctx.JSON(500, sysmodel.SysReturn{500, "", nil})
- }
- }
- func Sso_Validate(c *entitys.CtrlContext) {
- accessToken := c.Ctx.Query("access_token")
- loginId := c.Ctx.Query("username")
- requesterType := c.Ctx.Query("type")
- if requesterType == "app" {
- //timestamp := c.Ctx.Query("timestamp")
- //signature := c.Ctx.Query("signature")
- //token, err := models.ValidateApp(loginId, accessToken, timestamp, signature)
- //if err != nil {
- // this.Ctx.WriteString(err.Error())
- // this.Ctx.Output.SetStatus(401)
- // return
- //}
- //this.Ctx.Output.JSON(token, false, false)
- } else {
- domain := strings.TrimSpace(strings.ToLower(c.Ctx.Query("domain")))
- token, err := sysutils.Validate(accessToken, loginId, domain)
- if err != nil {
- logs.Error(accessToken, loginId, "校验AccessToken失败:", err)
- c.Ctx.Data(401, "text", []byte(err.Error()))
- return
- }
- c.Ctx.JSON(200, token)
- }
- }
- // _TokenValidate
- // @Title _TokenValidate
- // @Description token验证
- // @Param token string false "token"
- // @Success 200 {object} Account
- // @Failure 403 :id is empty
- func Sso_TokenValidate(c *entitys.CtrlContext) {
- token := c.Ctx.Query("token")
- user, err := sysutils.TokenValidate(token)
- if err != nil {
- logs.Error(token, "校验AccessToken失败:", err)
- c.Ctx.Data(401, "text", []byte(err.Error()))
- return
- }
- c.Ctx.JSON(200, user)
- }
- func __none_func_sso__(params ...interface{}) bool {
- return true
- }
|