class SignedGlobalID
Constants
- DEFAULT_PURPOSE
Attributes
Public Class Methods
Source
# File lib/global_id/signed_global_id.rb, line 59 def initialize(gid, options = {}) super @verifier = self.class.pick_verifier(options) @purpose = self.class.pick_purpose(options) @expires_at = pick_expiration(options) end
Calls superclass method
GlobalID::new
Source
# File lib/global_id/signed_global_id.rb, line 10 def parse(sgid, options = {}) super verify(sgid.to_s, options), options end
Calls superclass method
GlobalID::parse
Source
# File lib/global_id/signed_global_id.rb, line 24 def pick_purpose(options) options.fetch :for, DEFAULT_PURPOSE end
Source
# File lib/global_id/signed_global_id.rb, line 16 def pick_verifier(options) options.fetch :verifier do verifier || raise(ArgumentError, 'Pass a `verifier:` option with an `ActiveSupport::MessageVerifier` instance, or set a default SignedGlobalID.verifier.') end end
Grab the verifier from options and fall back to SignedGlobalID.verifier
. Raise ArgumentError if neither is available.
Private Class Methods
Source
# File lib/global_id/signed_global_id.rb, line 50 def raise_if_expired(expires_at) if expires_at && Time.now.utc > Time.iso8601(expires_at) raise ExpiredMessage, 'This signed global id has expired.' end end
Source
# File lib/global_id/signed_global_id.rb, line 29 def verify(sgid, options) verify_with_verifier_validated_metadata(sgid, options) || verify_with_legacy_self_validated_metadata(sgid, options) end
Source
# File lib/global_id/signed_global_id.rb, line 40 def verify_with_legacy_self_validated_metadata(sgid, options) metadata = pick_verifier(options).verify(sgid) raise_if_expired(metadata['expires_at']) metadata['gid'] if pick_purpose(options)&.to_s == metadata['purpose']&.to_s rescue ActiveSupport::MessageVerifier::InvalidSignature, ExpiredMessage nil end
Source
# File lib/global_id/signed_global_id.rb, line 34 def verify_with_verifier_validated_metadata(sgid, options) pick_verifier(options).verify(sgid, purpose: pick_purpose(options)) rescue ActiveSupport::MessageVerifier::InvalidSignature nil end
Public Instance Methods
Source
# File lib/global_id/signed_global_id.rb, line 71 def ==(other) super && @purpose == other.purpose end
Calls superclass method
GlobalID#==
Private Instance Methods
Source
# File lib/global_id/signed_global_id.rb, line 80 def pick_expiration(options) return options[:expires_at] if options.key?(:expires_at) if expires_in = options.fetch(:expires_in) { self.class.expires_in } expires_in.from_now end end