diff --git a/login.go b/login.go new file mode 100644 index 0000000..848a3d6 --- /dev/null +++ b/login.go @@ -0,0 +1,47 @@ +package main + +import ( + "fmt" + "time" + + "github.com/dgrijalva/jwt-go" + "gopkg.in/gin-gonic/gin.v1" +) + +func verifyLogin(c *gin.Context) bool { + tokenString, err := c.Cookie("authentication") + if err != nil { + return false + } + + token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { + if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { + return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) + } + return []byte(secret), nil + }) + + if !verifyToken(c, token, err) { + c.SetCookie("authentication", "", -1, "", "", false, false) + return false + } + + return true +} + +func verifyToken(c *gin.Context, token *jwt.Token, err error) bool { + if err != nil { + return false + } + + claims, ok := token.Claims.(jwt.MapClaims) + if !ok || !token.Valid { + return false + } + + if !claims.VerifyExpiresAt(time.Now().Unix(), true) { + return false + } + + return true +} diff --git a/main.go b/main.go index ecf96fc..24651a1 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,6 @@ package main import ( - "fmt" "net/http" "time" @@ -66,44 +65,6 @@ func login(c *gin.Context) { c.HTML(http.StatusOK, "login.html", nil) } -func verifyLogin(c *gin.Context) bool { - tokenString, err := c.Cookie("authentication") - if err != nil { - return false - } - - token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) { - if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { - return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) - } - return []byte(secret), nil - }) - - if !verifyToken(token, err) { - c.SetCookie("authentication", "", -1, "", "", false, false) - return false - } - - return true -} - -func verifyToken(c *gin.Context, token jwt.Token, err error) bool { - if err != nil { - return false - } - - claims, ok := token.Claims.(jwt.MapClaims) - if !ok || !token.Valid { - return false - } - - if !claims.VerifyExpiresAt(time.Now().Unix(), true) { - return false - } - - return true -} - func loginPost(c *gin.Context) { username, _ := c.GetPostForm("username") password, _ := c.GetPostForm("password") @@ -132,6 +93,6 @@ func loginPost(c *gin.Context) { c.JSON(http.StatusOK, map[string]string{ "token": t, }) - return + return }