| | |
| | | "github.com/gin-gonic/gin" |
| | | "net/http" |
| | | "strings" |
| | | "webserver/extend/config" |
| | | "webserver/extend/logger" |
| | | "sync" |
| | | "webserver/extend/code" |
| | | "webserver/extend/util" |
| | | ) |
| | | |
| | | const ( |
| | |
| | | |
| | | type Auth interface { |
| | | Check(c *gin.Context)bool |
| | | User(c *gin.Context)interface{} |
| | | User(c *gin.Context)map[string]interface{} |
| | | Login(http *http.Request,w http.ResponseWriter,user map[string]interface{})interface{} |
| | | Logout(http *http.Request,w http.ResponseWriter) bool |
| | | } |
| | |
| | | return &authDriver |
| | | } |
| | | |
| | | var outUserM = make(map[string]string,0) |
| | | var lock sync.RWMutex |
| | | |
| | | func SetOutUser(userId string) { |
| | | lock.Lock() |
| | | defer lock.Unlock() |
| | | outUserM[userId] = userId |
| | | } |
| | | |
| | | func OutUser(userId string) bool { |
| | | lock.Lock() |
| | | defer lock.Unlock() |
| | | if _,ok := outUserM[userId];ok{ |
| | | return true |
| | | } |
| | | return false |
| | | } |
| | | |
| | | func RemoveOutUser(userId string) { |
| | | lock.Lock() |
| | | defer lock.Unlock() |
| | | if _,ok := outUserM[userId];ok{ |
| | | delete(outUserM,userId) |
| | | } |
| | | } |
| | | |
| | | func AuthHandler() gin.HandlerFunc { |
| | | return func(c *gin.Context) { |
| | | urlPath := c.Request.URL.Path |
| | | |
| | | if strings.Contains(urlPath,"/data/api-v") && !strings.Contains(urlPath,"login"){ |
| | | //jwtDriver :=NewJwtAuthDriver() |
| | | //if !jwtDriver.Check(c) { |
| | | // util.ResponseFormat(c,code.TokenNotFound,"尚未登录,请登录") |
| | | // c.Abort() |
| | | //} |
| | | if strings.Contains(urlPath,"/data/api-") && !strings.Contains(urlPath,"login"){ |
| | | jwtDriver :=NewJwtAuthDriver() |
| | | if !jwtDriver.Check(c) { |
| | | util.ResponseFormat(c,code.TokenNotFound,"尚未登录,请登录") |
| | | c.Abort() |
| | | } |
| | | userM := (*jwtDriver).User(c) |
| | | if userM == nil { |
| | | util.ResponseFormat(c,code.TokenNotFound,"尚未登录,请登录") |
| | | c.Abort() |
| | | return |
| | | } |
| | | userId := userM["id"].(string) |
| | | if OutUser(userId) { |
| | | util.ResponseFormat(c,code.TokenNotFound,"尚未登录,请登录") |
| | | c.Abort() |
| | | } |
| | | c.Next() |
| | | } else if strings.Contains(urlPath,"/httpImage") { |
| | | domain := config.Server.PublicDomain |
| | | //domainReg := regexp.MustCompile(``+domain+``) |
| | | //if domainReg.MatchString(host) {//域名访问 |
| | | // imgUrl = domain |
| | | //} |
| | | |
| | | urlPath = strings.Replace(urlPath, "/httpImage", "", -1) |
| | | if strings.Contains(urlPath,domain) { |
| | | urlPath = strings.Replace(urlPath,"/"+domain,"",-1) |
| | | } |
| | | logger.Debug("urlPath:",urlPath) |
| | | idx := strings.LastIndex(urlPath, ":") |
| | | tmpPath := "" |
| | | if idx >-1 {//路径中包含有端口,取端口以后路径 |
| | | tmpPath = urlPath[idx:] |
| | | } else { |
| | | tmpPath = ":6080"+tmpPath |
| | | } |
| | | c.Header("Access-Control-Allow-Origin","*") |
| | | logger.Debug("domain+tmpPath:",domain+tmpPath) |
| | | c.Redirect(http.StatusMovedPermanently, domain+tmpPath) |
| | | return |
| | | } else { |
| | | c.Next() |
| | | } |
| | |
| | | } |
| | | |
| | | func GetCurUser(c *gin.Context)map[string]interface{}{ |
| | | return (*GenerateAuthDriver()).User(c).(map[string]interface{}) |
| | | return (*GenerateAuthDriver()).User(c) |
| | | } |