fixed typos, added error prefix and added usage to README.md

This commit is contained in:
ston1th 2018-09-13 16:29:45 +02:00
commit 4076e5cf17
3 changed files with 83 additions and 21 deletions

View file

@ -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)
}
}
```

34
jwt.go
View file

@ -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

View file

@ -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
}