Class: Tnw::Metrics::RequestVerifier

Inherits:
Object
  • Object
show all
Defined in:
lib/tnw/metrics/request_verifier.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(raw_body:, timestamp:, signature:, now: Time.current, configuration: Tnw.configuration) ⇒ RequestVerifier

Returns a new instance of RequestVerifier.



10
11
12
13
14
15
16
# File 'lib/tnw/metrics/request_verifier.rb', line 10

def initialize(raw_body:, timestamp:, signature:, now: Time.current, configuration: Tnw.configuration)
  @raw_body = raw_body
  @timestamp = timestamp
  @signature = signature
  @now = now
  @configuration = configuration
end

Class Method Details

.signature(raw_body:, timestamp:, secret:) ⇒ Object



6
7
8
# File 'lib/tnw/metrics/request_verifier.rb', line 6

def self.signature(raw_body:, timestamp:, secret:)
  OpenSSL::HMAC.hexdigest("SHA256", secret, "#{timestamp}.#{raw_body}")
end

Instance Method Details

#verify!Object

Raises:



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/tnw/metrics/request_verifier.rb', line 18

def verify!
  secret = @configuration.metrics_ingestion_token
  raise IngestionError.new(:not_configured, "Metric ingestion is not configured") unless secret
  raise IngestionError.new(:missing_authentication, "Metric authentication is missing") if authentication_missing?

  signed_at = parse_timestamp
  verify_freshness!(signed_at)
  verify_signature!(secret)

  true
end