module URLSignature
Constants
- ExpiredURL
- HMAC_PROC
- InvalidSignature
- InvalidURL
- VERSION
Public Class Methods
call( url, key:, params: {}, expires: 0, signature_param: "signature", expires_param: "expires", hmac_proc: HMAC_PROC )
click to toggle source
Create a new signed url.
# File lib/url_signature.rb, line 24 def self.call( url, key:, params: {}, expires: 0, signature_param: "signature", expires_param: "expires", hmac_proc: HMAC_PROC ) expires = expires.to_i params[expires_param] = expires if expires.positive? url = build_url(url, params) signature = hmac_proc.call(key, url) url.add_query(signature_param, signature) url.to_s end
verified?( url, key:, expires_param: "expires", signature_param: "signature", hmac_proc: HMAC_PROC )
click to toggle source
# File lib/url_signature.rb, line 41 def self.verified?( url, key:, expires_param: "expires", signature_param: "signature", hmac_proc: HMAC_PROC ) verify!( url, key: key, hmac_proc: hmac_proc, expires_param: expires_param, signature_param: signature_param ) rescue InvalidSignature, InvalidURL, ExpiredURL false end
verify!( url, key:, hmac_proc: HMAC_PROC, expires_param: "expires", signature_param: "signature" )
click to toggle source
# File lib/url_signature.rb, line 59 def self.verify!( # rubocop:disable Metrics/MethodLength url, key:, hmac_proc: HMAC_PROC, expires_param: "expires", signature_param: "signature" ) url = build_url(url) actual_url = url.to_s url.remove_query(signature_param) expected_url = call( url.to_s, key: key, expires_param: expires_param, hmac_proc: hmac_proc, signature_param: signature_param ) expires = url.params[expires_param]&.first.to_i raise ExpiredURL if expires.positive? && expires < Time.now.to_i raise InvalidSignature unless actual_url == expected_url true end
Private Class Methods
build_url(url, params = {})
click to toggle source
# File lib/url_signature.rb, line 88 def build_url(url, params = {}) url = URL.new(url) params.each {|name, value| url.add_query(name, value) } url end