From 4076e5cf1740ea8a33bd124016655040ff34d131 Mon Sep 17 00:00:00 2001 From: ston1th Date: Thu, 13 Sep 2018 16:29:45 +0200 Subject: [PATCH] fixed typos, added error prefix and added usage to README.md --- README.md | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- jwt.go | 34 ++++++++++++++++-------------- token.go | 8 +++---- 3 files changed, 83 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index ad89f76..74aa8a3 100644 --- a/README.md +++ b/README.md @@ -1 +1,61 @@ -# jwt - a simple JSON Web Token library in Go +# jwt - a simple JSON Web Token library written in Go + +## Usage + +``` +package main + +import ( + "fmt" + "git.giftfish.de/ston1th/jwt" + "log" + "time" +) + +func main() { + // create a new signing instance + JWT, err := jwt.New(time.Hour, jwt.NewMemBlacklist(), nil) + if err != nil { + log.Fatal(err) + } + + // create a new token + t := jwt.NewToken(jwt.Claims{ + "username": "admin", + }, nil) + + // sign the token + err = JWT.Sign(t) + if err != nil { + log.Fatal(err) + } + + // print the token string + token := t.String() + fmt.Println(token) + + // decode the token string + newToken, err := jwt.DecodeToken(token) + if err != nil { + log.Fatal(err) + } + + // verify the decoded token + err = JWT.Verify(newToken) + if err != nil { + log.Fatal(err) + } + + // add the token to the blacklist + err = JWT.Invalidate(newToken) + if err != nil { + log.Fatal(err) + } + + // try to verify the blacklisted token, it should fail + err = JWT.Verify(newToken) + if err != nil { + log.Fatal(err) + } +} +``` diff --git a/jwt.go b/jwt.go index 05fe60e..76217f4 100644 --- a/jwt.go +++ b/jwt.go @@ -39,21 +39,23 @@ const ( // DefaultSecretReader is the default secret key generator var DefaultSecretReader = rand.Reader +const jwtErr = "jwt: " + var ( - ErrNoJWT = errors.New("not a json web token") - ErrEmptyToken = errors.New("token is empty") - ErrUnsupportedAlg = errors.New("unsupported algorithm") - ErrInvalid = errors.New("token validation failed") - ErrBlacklisted = errors.New("token blacklisted") - ErrBlacklistNotEnabled = errors.New("blacklisting is not enabled") - ErrNbf = errors.New("token not valid yet") - ErrExp = errors.New("token expired") - ErrMissingNbf = errors.New("missing nbf claim") - ErrMissingExp = errors.New("missing exp claim") - ErrMissingTokenParts = errors.New("missing token parts") - ErrEmptySignature = errors.New("token signature is empty") - ErrTokenIsNil = errors.New("token is nil") - ErrInvalidKeySize = errors.New("invalid secret key size") + ErrNoJWT = errors.New(jwtErr + "not a json web token") + ErrEmptyToken = errors.New(jwtErr + "token is empty") + ErrUnsupportedAlg = errors.New(jwtErr + "unsupported algorithm") + ErrInvalid = errors.New(jwtErr + "token validation failed") + ErrBlacklisted = errors.New(jwtErr + "token blacklisted") + ErrBlacklistNotEnabled = errors.New(jwtErr + "blacklisting is not enabled") + ErrNbf = errors.New(jwtErr + "token not valid yet") + ErrExp = errors.New(jwtErr + "token expired") + ErrMissingNbf = errors.New(jwtErr + "missing nbf claim") + ErrMissingExp = errors.New(jwtErr + "missing exp claim") + ErrMissingTokenParts = errors.New(jwtErr + "missing token parts") + ErrEmptySignature = errors.New(jwtErr + "token signature is empty") + ErrTokenIsNil = errors.New(jwtErr + "token is nil") + ErrInvalidKeySize = errors.New(jwtErr + "invalid secret key size") ) // JWT represents the JSON Web Token signing and blacklisting infrastructure @@ -83,7 +85,7 @@ func New(expiry time.Duration, blacklist Blacklist, secret io.Reader) (*JWT, err key := make([]byte, KeySize) i, err := secret.Read(key) if err != nil { - return nil, errors.New("secret reader error: " + err.Error()) + return nil, errors.New(jwtErr + "secret reader error: " + err.Error()) } if i < KeySize { return nil, ErrInvalidKeySize @@ -250,7 +252,7 @@ func (jwt *JWT) Verify(t *Token) error { return nil } -// Stop will end the cleaner goroutinge execution +// Stop will end the cleaner goroutine execution func (jwt *JWT) Stop() error { if jwt.blacklist == nil { return ErrBlacklistNotEnabled diff --git a/token.go b/token.go index 34760a3..83aee75 100644 --- a/token.go +++ b/token.go @@ -8,7 +8,7 @@ import ( "strings" ) -// Token is the JWT token representation +// Token represents a JWT token type Token struct { raw string data string @@ -23,17 +23,17 @@ func (t *Token) String() string { return t.raw } -// Sig returns the Tokens URLEncoded signature +// Sig returns the tokens URLEncoded signature func (t *Token) Sig() string { return t.signature } -// RawSig returns the Tokens raw signature +// RawSig returns the tokens raw signature func (t *Token) RawSig() []byte { return t.rawSignature } -// Data returns the first two token fields +// Data returns the first two URLEncoded token fields func (t *Token) Data() string { return t.data }