Sha256: 2df91cd87e89f9b97ca3a157318d38544218844407d800594d72065eac20417c

Contents?: true

Size: 1.5 KB

Versions: 10

Compression:

Stored size: 1.5 KB

Contents

module AppleID
  class EventToken < OpenIDConnect::ConnectObject
    class VerificationFailed < Error; end

    attr_required :iss, :aud, :exp, :iat, :jti, :events
    alias_method :original_jwt, :raw_attributes
    alias_method :event, :events

    delegate :type, :sub, :event_time, :email_enabled?, :email_disabled?, :consent_revoked?, :account_deleted?, to: :event

    def initialize(attributes = {})
      super
      @events = Event.decode attributes[:events]
    end

    def verify!(verify_signature: true, client: nil)
      verify_signature! if verify_signature
      verify_claims! client
      self
    end

    class << self
      def decode(jwt_string)
        new JSON::JWT.decode jwt_string, :skip_verification
      end
    end

    private

    def verify_signature!
      original_jwt.verify! JWKS.fetch(original_jwt.kid)
    rescue
      raise VerificationFailed, 'Signature Verification Failed'
    end

    def verify_claims!(client)
      aud = if client.respond_to?(:identifier)
        client.identifier
      else
        client
      end

      failure_reasons = []
      if self.iss != ISSUER
        failure_reasons << :iss
      end
      if aud.present? && self.aud != aud
        failure_reasons << :aud
      end
      if Time.now.to_i < iat
        failure_reasons << :iat
      end
      if Time.now.to_i >= exp
        failure_reasons << :exp
      end

      if failure_reasons.present?
        raise VerificationFailed, "Claims Verification Failed at #{failure_reasons}"
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 2 rubygems

Version Path
apple_id-forestv8_compatibility-1.5.3 lib/apple_id/event_token.rb
apple_id-1.6.4 lib/apple_id/event_token.rb
apple_id-1.6.3 lib/apple_id/event_token.rb
apple_id-1.6.2 lib/apple_id/event_token.rb
apple_id-1.6.1 lib/apple_id/event_token.rb
apple_id-1.6.0 lib/apple_id/event_token.rb
apple_id-1.5.2 lib/apple_id/event_token.rb
apple_id-1.5.1 lib/apple_id/event_token.rb
apple_id-1.5.0 lib/apple_id/event_token.rb
apple_id-1.4.3 lib/apple_id/event_token.rb