package partial import ( "git.qianqiusoft.com/qianqiusoft/light-apiengine/config" "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" "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils/auth" "strings" //"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) { iauth := getAuth(c) if iauth == nil { hostname := sysutils.GetHostname(c.Ctx) c.Ctx.JSON(500, sysmodel.SysReturn{500, "iauth of " + hostname + " is nil", nil}) return } iauth.Login(c) } // _Logout // @Title _Logout // @Description 用户退出 // @Success 200 {object} Account // @Failure 403 :id is empty func Sso_Logout(c *entitys.CtrlContext) { iauth := getAuth(c) if iauth == nil { hostname := sysutils.GetHostname(c.Ctx) c.Ctx.JSON(500, sysmodel.SysReturn{500, "iauth of " + hostname + " is nil", nil}) return } iauth.Logout(c) } 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 getAuth(c *entitys.CtrlContext) auth.IAuth { var iauth auth.IAuth = nil authMode := config.AppConfig.GetKey("auth_mode") if authMode == "local" { iauth = auth.GetAuth("qianqiusoft.com") } else { hostnames := sysutils.GetHostnames(c.Ctx) for i := range hostnames { iauth = auth.GetAuth(hostnames[i]) if iauth != nil { break } } } return iauth } func __none_func_sso__(params ...interface{}) bool { return true }