package jwt import ( "database/sql" "github.com/pkg/errors" ) // Revoke a token by adding it to the database func (gen *TokenGenerator) revoke(tx *sql.Tx, t Token) error { if gen.dbConn == nil { return errors.New("No DB provided, unable to use this function") } 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") } return nil } // Check if a token has been revoked. Returns true if not revoked. func (gen *TokenGenerator) checkNotRevoked(tx *sql.Tx, t Token) (bool, error) { if gen.dbConn == nil { return false, errors.New("No DB provided, unable to use this function") } 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() return !revoked, nil }