fixed typos, added error prefix and added usage to README.md
This commit is contained in:
parent
b071c473f0
commit
4076e5cf17
3 changed files with 83 additions and 21 deletions
62
README.md
62
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)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
|
|
|||
34
jwt.go
34
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
|
||||
|
|
|
|||
8
token.go
8
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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue