diff --git a/dsSupport/MyModel/SSOAccount/SSOAccountController/SSOAccountController.go b/dsSupport/MyModel/SSOAccount/SSOAccountController/SSOAccountController.go new file mode 100644 index 00000000..c0cbae4b --- /dev/null +++ b/dsSupport/MyModel/SSOAccount/SSOAccountController/SSOAccountController.go @@ -0,0 +1,31 @@ +package SSOAccountController + +import ( + "dsSupport/MyModel/SSOAccount/SSOAccountOpenAPI" + "github.com/gin-gonic/gin" +) + +func Routers(r *gin.RouterGroup) { + rr := r.Group("/ssoAccount") + + { + rr.POST("/login", SSOAccountOpenAPI.Login) + rr.OPTIONS("/login", HandleOptions) + rr.POST("/logout", SSOAccountOpenAPI.Logout) + rr.GET("/logout", SSOAccountOpenAPI.Logout) + rr.OPTIONS("/logout", HandleOptions) + rr.POST("/userInfo", SSOAccountOpenAPI.UserInfo) + rr.GET("/userInfo", SSOAccountOpenAPI.UserInfo) + rr.OPTIONS("/userInfo", HandleOptions) + } + + return +} + +func HandleOptions(c *gin.Context) { + c.Header("Access-Control-Allow-Origin", "*") + c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS") + c.Header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization") + + c.String(200, "ok") +} diff --git a/dsSupport/MyModel/SSOAccount/SSOAccountOpenAPI/SSOAccountOpenAPI.go b/dsSupport/MyModel/SSOAccount/SSOAccountOpenAPI/SSOAccountOpenAPI.go new file mode 100644 index 00000000..f1a5431e --- /dev/null +++ b/dsSupport/MyModel/SSOAccount/SSOAccountOpenAPI/SSOAccountOpenAPI.go @@ -0,0 +1,191 @@ +package SSOAccountOpenAPI + +import ( + "dsSupport/MyModel/MySwagger" + "dsSupport/MyModel/SSOAccount/SSOAccountService" + "fmt" + "github.com/gin-gonic/gin" + goCas "github.com/go-cas/cas" + //"log" + "net/http" +) + +var casURL = "http://10.10.14.199:8080/dsssoserver/" //单点登录地址 + +//type casMiddleware struct { +// casClient *goCas.Client +// handler http.Handler +//} +//type Options = goCas.Options + +func Login(c *gin.Context) { + res, msg := SSOAccountService.Login() + + if res { + c.JSON(http.StatusOK, MySwagger.SSOResult{ + Success: true, + Message: msg, + }) + } else { + c.JSON(http.StatusOK, MySwagger.SSOResult{ + Success: false, + Message: msg, + }) + } +} + +func Logout(c *gin.Context) { + var w http.ResponseWriter = c.Writer + var r *http.Request = c.Request + goCas.RedirectToLogout(w, r) + + fmt.Println("LOGOUT OK!") + + c.JSON(http.StatusOK, MySwagger.SSOResult{ + Success: true, + Message: "LOGOUT OK!!", + }) +} + +// 后台登陆 godoc +// @Summary 后台登陆 +// @Tags account +// @ID loginAccount +// @Accept json +// @Produce json +// @Param input body MySwagger.AccountSwag true "账号密码" +// @Success 200 {object} MySwagger.Result +// @Failure 400 {object} MySwagger.Result +// @Router /support/ssoAccount/userInfo [post] +func UserInfo(c *gin.Context) { + //var w http.ResponseWriter = c.Writer + ip := GetRequestIP(c) + fmt.Println("ip:", ip) + var r *http.Request = c.Request + + //goCas.RedirectToLogin(w, r) + + IsAuthenticated := goCas.IsAuthenticated(r) + + fmt.Println("IsAuthenticated:", IsAuthenticated) + + + fmt.Println("goCas.Username(c.Request):", goCas.Username(c.Request)) + + CASAttributes, ok := c.Get("CASAttributes") //取值 实现了跨中间件取值 + if !ok{ + CASAttributes = "default CASAttributes" + } + fmt.Println("CASAttributes:", CASAttributes) + + + res, msg := SSOAccountService.UserInfo() + + if res { + c.JSON(http.StatusOK, MySwagger.SSOResult{ + Success: true, + Message: msg, + Data: CASAttributes, + }) + } else { + c.JSON(http.StatusOK, MySwagger.SSOResult{ + Success: false, + Message: msg, + }) + } +} + + +// 后台登陆 godoc +// @Summary 后台登陆1 +// @Tags account +// @ID loginAccount +// @Accept json +// @Produce json +// @Param input body MySwagger.AccountSwag true "账号密码" +// @Success 200 {object} MySwagger.Result +// @Failure 400 {object} MySwagger.Result +// @Router /support/ssoAccount/userInfo1 [post] +func UserInfo1(c *gin.Context) { + //var casURL = "http://10.10.14.199:8080/dsssoserver/" //单点登录地址 + //redirectURL, err := url.Parse(casURL) + //if err != nil { + // log.Fatal(err) + // return + //} + // + //casOptions := goCas.Options{ + // URL: redirectURL, + // SendService: true, + //} + // + //MiddlewareFunc(&casOptions) + + + + CASUsername, ok := c.Get("CASUsername") //取值 实现了跨中间件取值 + if !ok{ + CASUsername = "default user" + } + fmt.Println("CASUsername:", CASUsername) + + + res, msg := SSOAccountService.UserInfo() + + if res { + c.JSON(http.StatusOK, MySwagger.SSOResult{ + Success: true, + Message: msg, + Data: CASUsername, + }) + } else { + c.JSON(http.StatusOK, MySwagger.SSOResult{ + Success: false, + Message: msg, + }) + } +} + +//func (casMiddleware casMiddleware) authed(c *gin.Context) { +// c.Set("CASUsername", goCas.Username(c.Request)) +// fmt.Println("goCas.Username(c.Request):", goCas.Username(c.Request)) +// c.Set("CASAttributes", goCas.Attributes(c.Request)) +// c.Next() +// return +//} +// +//func (casMiddleware casMiddleware) middlewareFunc(c *gin.Context) { +// casMiddleware.handler.ServeHTTP(c.Writer, c.Request) +// if goCas.IsAuthenticated(c.Request) { +// casMiddleware.authed(c) +// return +// } +// c.Abort() +//} +// +// +//func MiddlewareFunc(options *Options) gin.HandlerFunc { +// casClient := goCas.NewClient((*goCas.Options)(options)) +// rawHandler := func(res http.ResponseWriter, req *http.Request) { +// if goCas.IsAuthenticated(req) { +// return +// } +// if goCas.IsNewLogin(req) { +// return +// } +// casClient.RedirectToLogin(res, req) +// } +// return casMiddleware{ +// casClient: casClient, +// handler: casClient.HandleFunc(rawHandler), +// }.middlewareFunc +//} + +//获取ip +func GetRequestIP(c *gin.Context)string{ + reqIP := c.ClientIP() + if reqIP == "::1" { + reqIP = "127.0.0.1" + } + return reqIP +} diff --git a/dsSupport/MyModel/SSOAccount/SSOAccountService/SSOAccountService.go b/dsSupport/MyModel/SSOAccount/SSOAccountService/SSOAccountService.go new file mode 100644 index 00000000..e45f137a --- /dev/null +++ b/dsSupport/MyModel/SSOAccount/SSOAccountService/SSOAccountService.go @@ -0,0 +1,41 @@ +package SSOAccountService + +import ( + "github.com/shenshouer/cas" +) + +var casURL = "http://10.10.14.199:8080/dsssoserver/" //单点登录地址 + +type templateBinding struct { + Username string + Attributes cas.UserAttributes +} + +func Login() (bool, string) { + + return true, "" +} + +func UserInfo() (bool, string) { + //u, _ := url.Parse(casURL) + //c := cas.NewClient(&cas.Options{ + // URL: u, + //}) + // + //h := c.HandleFunc(func(w http.ResponseWriter, r *http.Request) { + // if !cas.IsAuthenticated(r) { + // cas.RedirectToLogout(w, r) + // } + // + // fmt.Fprintf(w, "Hello %s\n", cas.Username(r)) + //}) + // + //err := http.ListenAndServe(":8080", h) + //if err != nil { + // log.Fatal("ListenAndServe: ", err) + //} + + return true, "" +} + + diff --git a/dsSupport/main.go b/dsSupport/main.go index ce791fa0..47a9c23c 100644 --- a/dsSupport/main.go +++ b/dsSupport/main.go @@ -48,7 +48,6 @@ func main() { // 使用跨域中间件 r.Use(Utils.Cors()) - //var casURL = "http://10.10.14.199/dsssoserver/" //单点登录地址 //var casURL = ConfigUtil.SSOCasURL //单点登录地址 //redirectURL, err := url.Parse(casURL) //if err != nil {