imported jwt module
This commit is contained in:
58
jwt/revoke.go
Normal file
58
jwt/revoke.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package jwt
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// Revoke a token by adding it to the database
|
||||
func revoke(ctx context.Context, t Token) error {
|
||||
db := t.getDB()
|
||||
if db == nil {
|
||||
return errors.New("No DB provided, unable to use this function")
|
||||
}
|
||||
tx, err := db.BeginTx(ctx, nil)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "db.BeginTx")
|
||||
}
|
||||
defer tx.Rollback()
|
||||
jti := t.GetJTI()
|
||||
exp := t.GetEXP()
|
||||
query := `INSERT INTO jwtblacklist (jti, exp) VALUES (?, ?)`
|
||||
_, err = tx.Exec(query, jti, exp)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "tx.Exec")
|
||||
}
|
||||
err = tx.Commit()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "tx.Commit")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Check if a token has been revoked. Returns true if not revoked.
|
||||
func checkNotRevoked(ctx context.Context, t Token) (bool, error) {
|
||||
db := t.getDB()
|
||||
if db == nil {
|
||||
return false, errors.New("No DB provided, unable to use this function")
|
||||
}
|
||||
tx, err := db.BeginTx(ctx, nil)
|
||||
if err != nil {
|
||||
return false, errors.Wrap(err, "db.BeginTx")
|
||||
}
|
||||
defer tx.Rollback()
|
||||
jti := t.GetJTI()
|
||||
query := `SELECT 1 FROM jwtblacklist WHERE jti = ? LIMIT 1`
|
||||
rows, err := tx.Query(query, jti)
|
||||
if err != nil {
|
||||
return false, errors.Wrap(err, "tx.Query")
|
||||
}
|
||||
defer rows.Close()
|
||||
revoked := rows.Next()
|
||||
err = tx.Commit()
|
||||
if err != nil {
|
||||
return false, errors.Wrap(err, "tx.Commit")
|
||||
}
|
||||
return !revoked, nil
|
||||
}
|
||||
Reference in New Issue
Block a user