File: claims_validator.rb

package info (click to toggle)
ruby-jwt 2.7.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 736 kB
  • sloc: ruby: 4,326; makefile: 4
file content (37 lines) | stat: -rw-r--r-- 686 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# frozen_string_literal: true

require_relative './error'

module JWT
  class ClaimsValidator
    NUMERIC_CLAIMS = %i[
      exp
      iat
      nbf
    ].freeze

    def initialize(payload)
      @payload = payload.transform_keys(&:to_sym)
    end

    def validate!
      validate_numeric_claims

      true
    end

    private

    def validate_numeric_claims
      NUMERIC_CLAIMS.each do |claim|
        validate_is_numeric(claim) if @payload.key?(claim)
      end
    end

    def validate_is_numeric(claim)
      return if @payload[claim].is_a?(Numeric)

      raise InvalidPayload, "#{claim} claim must be a Numeric value but it is a #{@payload[claim].class}"
    end
  end
end