|  | @@ -2,11 +2,10 @@ package auth
 | 
	
		
			
			| 2 | 2 |  
 | 
	
		
			
			| 3 | 3 |  import (
 | 
	
		
			
			| 4 | 4 |  	"fmt"
 | 
	
		
			
			| 5 |  | -	"net/http"
 | 
	
		
			
			| 6 |  | -	"time"
 | 
	
		
			
			| 7 |  | -
 | 
	
		
			
			| 8 | 5 |  	"github.com/dgrijalva/jwt-go"
 | 
	
		
			
			| 9 | 6 |  	"github.com/gin-gonic/gin"
 | 
	
		
			
			|  | 7 | +	"net/http"
 | 
	
		
			
			|  | 8 | +	"time"
 | 
	
		
			
			| 10 | 9 |  )
 | 
	
		
			
			| 11 | 10 |  
 | 
	
		
			
			| 12 | 11 |  const (
 | 
	
	
		
			
			|  | @@ -53,23 +52,39 @@ func Auth(authKey string) gin.HandlerFunc {
 | 
	
		
			
			| 53 | 52 |  
 | 
	
		
			
			| 54 | 53 |  		if mapClaims, ok := token.Claims.(jwt.MapClaims); ok {
 | 
	
		
			
			| 55 | 54 |  			if expired, ok := mapClaims[ctxRequestTokenExpired].(float64); ok {
 | 
	
		
			
			| 56 |  | -				if expired == 0 {
 | 
	
		
			
			|  | 55 | +				switch true {
 | 
	
		
			
			|  | 56 | +				case expired > 0:
 | 
	
		
			
			|  | 57 | +					if int64(expired) < time.Now().Unix() {
 | 
	
		
			
			|  | 58 | +						ctx.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"msg": "auth failed, token timeout"})
 | 
	
		
			
			|  | 59 | +						return
 | 
	
		
			
			|  | 60 | +					}
 | 
	
		
			
			|  | 61 | +
 | 
	
		
			
			|  | 62 | +					// todo check expired from server
 | 
	
		
			
			|  | 63 | +				case expired == 0:
 | 
	
		
			
			| 57 | 64 |  					// Only cookie is exists, check token expired. app expired by itself call logout when app exit
 | 
	
		
			
			| 58 | 65 |  					if _, err := ctx.Cookie(ctxRequestCookieAuthorization); err != nil {
 | 
	
		
			
			| 59 | 66 |  						ctx.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"msg": "auth failed, token timeout"})
 | 
	
		
			
			| 60 | 67 |  						return
 | 
	
		
			
			| 61 | 68 |  					}
 | 
	
		
			
			| 62 |  | -				}
 | 
	
		
			
			| 63 | 69 |  
 | 
	
		
			
			| 64 |  | -				if expired < 0 || (int64(expired) < time.Now().Unix()) {
 | 
	
		
			
			|  | 70 | +				default:
 | 
	
		
			
			| 65 | 71 |  					ctx.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"msg": "auth failed, token timeout"})
 | 
	
		
			
			| 66 | 72 |  					return
 | 
	
		
			
			| 67 | 73 |  				}
 | 
	
		
			
			| 68 |  | -			}
 | 
	
		
			
			| 69 | 74 |  
 | 
	
		
			
			| 70 |  | -			if uid, ok := mapClaims[CtxRequestHeaderUserId].(float64); ok {
 | 
	
		
			
			| 71 |  | -				ctx.Set(CtxRequestHeaderUserId, int64(uid))
 | 
	
		
			
			|  | 75 | +				if uid, ok := mapClaims[CtxRequestHeaderUserId].(float64); ok {
 | 
	
		
			
			|  | 76 | +					ctx.Set(CtxRequestHeaderUserId, int64(uid))
 | 
	
		
			
			|  | 77 | +				} else {
 | 
	
		
			
			|  | 78 | +					ctx.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"msg": "auth failed, mapClaims[CtxRequestHeaderUserId].(float64) error"})
 | 
	
		
			
			|  | 79 | +					return
 | 
	
		
			
			|  | 80 | +				}
 | 
	
		
			
			|  | 81 | +			} else {
 | 
	
		
			
			|  | 82 | +				ctx.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"msg": "auth failed, mapClaims[ctxRequestTokenExpired].(float64) error"})
 | 
	
		
			
			|  | 83 | +				return
 | 
	
		
			
			| 72 | 84 |  			}
 | 
	
		
			
			|  | 85 | +		} else {
 | 
	
		
			
			|  | 86 | +			ctx.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"msg": "auth failed, token.Claims.(jwt.MapClaims) error"})
 | 
	
		
			
			|  | 87 | +			return
 | 
	
		
			
			| 73 | 88 |  		}
 | 
	
		
			
			| 74 | 89 |  	}
 | 
	
		
			
			| 75 | 90 |  }
 |