| | |
| | | package auth |
| | | |
| | | import ( |
| | | "github.com/gin-gonic/gin" |
| | | "net/http" |
| | | "strings" |
| | | "sync" |
| | | "vamicro/extend/util" |
| | | ) |
| | | |
| | | const ( |
| | | TokenKey = "abc123456789" |
| | | ) |
| | | |
| | | type Auth interface { |
| | | Check(c *gin.Context)bool |
| | | 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 |
| | | } |
| | | |
| | | func GenerateAuthDriver() *Auth { |
| | | var authDriver Auth |
| | | authDriver = NewJwtAuthDriver() |
| | | 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) |
| | | } |
| | | } |
| | | |
| | | var noTokenUrls = []string{ |
| | | "/data/api-v/gb28181/findAreaByParentId", |
| | | "/data/api-v/sysinit/getInitInfo", |
| | | "/data/api-v/sysinit/savePassword", |
| | | "/data/api-v/sysinit/networkList", |
| | | "/data/api-v/sysinit/initNetwork", |
| | | "/data/api-v/sysinit/saveRegInfo", |
| | | "/data/api-v/sysinit/getRegInfo", |
| | | "/data/api-u/sys/logout", |
| | | } |
| | | |
| | | func AuthHandler() gin.HandlerFunc { |
| | | return func(c *gin.Context) { |
| | | urlPath := c.Request.URL.Path |
| | | |
| | | if strings.Contains(urlPath,"/data/api-") && |
| | | !strings.Contains(urlPath,"login") && |
| | | !strings.Contains(urlPath, "/data/api-v/license") && |
| | | !strings.Contains(urlPath, "/data/api-v/info/") && |
| | | !util.ArrayContains(noTokenUrls, urlPath) && |
| | | !strings.Contains(urlPath, "/data/api-v/token") { |
| | | //Oauth2检查 |
| | | token,err := Oauth2Serv.ValidationBearerToken(c.Request) |
| | | if nil == err { |
| | | if !CheckAcl(urlPath) { |
| | | c.JSON(401, gin.H{ |
| | | "code": 401, |
| | | "success": false, |
| | | "msg": "接口暂未开放", |
| | | "data": "", |
| | | }) |
| | | c.Abort() |
| | | return |
| | | } |
| | | c.Request.Header.Set("Login_user_id", token.GetUserID()) |
| | | c.Next() |
| | | //fmt.Print(token.GetUserID()) |
| | | return |
| | | } else { |
| | | //fmt.Println(err.Error()) |
| | | } |
| | | jwtDriver :=NewJwtAuthDriver() |
| | | if !jwtDriver.Check(c) { |
| | | c.JSON(401, gin.H{ |
| | | "code": 401, |
| | | "success": false, |
| | | "msg": "请求未携带Token,无权访问", |
| | | "data": "", |
| | | }) |
| | | c.Abort() |
| | | return |
| | | } |
| | | userM := (*jwtDriver).User(c) |
| | | if userM == nil { |
| | | c.JSON(401, gin.H{ |
| | | "code": 401, |
| | | "success": false, |
| | | "msg": "请求未携带Token,无权访问", |
| | | "data": "", |
| | | }) |
| | | c.Abort() |
| | | return |
| | | } |
| | | userId := userM["id"].(string) |
| | | if OutUser(userId) { |
| | | c.JSON(401, gin.H{ |
| | | "code": 401, |
| | | "success": false, |
| | | "msg": "请求未携带Token,无权访问", |
| | | "data": "", |
| | | }) |
| | | c.Abort() |
| | | return |
| | | } |
| | | c.Request.Header.Set("Login_user_id", userId) |
| | | c.Next() |
| | | } else { |
| | | c.Next() |
| | | } |
| | | } |
| | | } |
| | | |
| | | func GetCurUser(c *gin.Context)map[string]interface{}{ |
| | | return (*GenerateAuthDriver()).User(c) |
| | | } |
| | | package auth
|
| | |
|
| | | import (
|
| | | "github.com/gin-gonic/gin"
|
| | | "net/http"
|
| | | "strings"
|
| | | "sync"
|
| | | "vamicro/extend/util"
|
| | | )
|
| | |
|
| | | const (
|
| | | TokenKey = "abc123456789"
|
| | | )
|
| | |
|
| | | type Auth interface {
|
| | | Check(c *gin.Context)bool
|
| | | 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
|
| | | }
|
| | |
|
| | | func GenerateAuthDriver() *Auth {
|
| | | var authDriver Auth
|
| | | authDriver = NewJwtAuthDriver()
|
| | | 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)
|
| | | }
|
| | | }
|
| | |
|
| | | var noTokenUrls = []string{
|
| | | "/data/api-v/gb28181/findAreaByParentId",
|
| | | "/data/api-v/sysinit/getInitInfo",
|
| | | "/data/api-v/sysinit/savePassword",
|
| | | "/data/api-v/sysinit/networkList",
|
| | | "/data/api-v/sysinit/initNetwork",
|
| | | "/data/api-v/sysinit/saveRegInfo",
|
| | | "/data/api-v/sysinit/getRegInfo",
|
| | | "/data/api-u/sys/logout",
|
| | | }
|
| | |
|
| | | func AuthHandler() gin.HandlerFunc {
|
| | | return func(c *gin.Context) {
|
| | | urlPath := c.Request.URL.Path
|
| | |
|
| | | if strings.Contains(urlPath,"/data/api-") &&
|
| | | !strings.Contains(urlPath,"login") &&
|
| | | !strings.Contains(urlPath, "/data/api-v/license") &&
|
| | | !strings.Contains(urlPath, "/data/api-v/info/") &&
|
| | | !util.ArrayContains(noTokenUrls, urlPath) &&
|
| | | !strings.Contains(urlPath, "/data/api-v/token") {
|
| | | //Oauth2检查
|
| | | token,err := Oauth2Serv.ValidationBearerToken(c.Request)
|
| | | if nil == err {
|
| | | if !CheckAcl(urlPath) {
|
| | | c.JSON(401, gin.H{
|
| | | "code": 401,
|
| | | "success": false,
|
| | | "msg": "接口暂未开放",
|
| | | "data": "",
|
| | | })
|
| | | c.Abort()
|
| | | return
|
| | | }
|
| | | c.Request.Header.Set("Login_user_id", token.GetUserID())
|
| | | c.Next()
|
| | | //fmt.Print(token.GetUserID())
|
| | | return
|
| | | } else {
|
| | | //fmt.Println(err.Error())
|
| | | }
|
| | | jwtDriver :=NewJwtAuthDriver()
|
| | | if !jwtDriver.Check(c) {
|
| | | c.JSON(401, gin.H{
|
| | | "code": 401,
|
| | | "success": false,
|
| | | "msg": "请求未携带Token,无权访问",
|
| | | "data": "",
|
| | | })
|
| | | c.Abort()
|
| | | return
|
| | | }
|
| | | userM := (*jwtDriver).User(c)
|
| | | if userM == nil {
|
| | | c.JSON(401, gin.H{
|
| | | "code": 401,
|
| | | "success": false,
|
| | | "msg": "请求未携带Token,无权访问",
|
| | | "data": "",
|
| | | })
|
| | | c.Abort()
|
| | | return
|
| | | }
|
| | | userId := userM["id"].(string)
|
| | | if OutUser(userId) {
|
| | | c.JSON(401, gin.H{
|
| | | "code": 401,
|
| | | "success": false,
|
| | | "msg": "请求未携带Token,无权访问",
|
| | | "data": "",
|
| | | })
|
| | | c.Abort()
|
| | | return
|
| | | }
|
| | | c.Request.Header.Set("Login_user_id", userId)
|
| | | c.Next()
|
| | | } else {
|
| | | c.Next()
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | func GetCurUser(c *gin.Context)map[string]interface{}{
|
| | | return (*GenerateAuthDriver()).User(c)
|
| | | }
|