class RealSavvy::JWT::AbstractToken
Constants
- SCOPE_VERBS
In order of access level
Attributes
token[R]
Public Class Methods
decode(token)
click to toggle source
New token, plus makes sure there isn't any errors with the token
# File lib/real_savvy/jwt/abstract_token.rb, line 15 def self.decode(token) new(token).tap do |new_token| new_token.valid? end end
new(token)
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 9 def initialize(token) @token = token standardized_token end
verbs_matches(verb)
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 40 def self.verbs_matches(verb) verb_index = SCOPE_VERBS.index(verb) verb_index ? SCOPE_VERBS[verb_index..-1] : [] end
Public Instance Methods
audience_is_site?()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 57 def audience_is_site? audience.respond_to?(:is_real_savvy_site?) && audience.is_real_savvy_site? end
claims()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 98 def claims retrieve_claims unless @claims @claims end
for_site!()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 49 def for_site! for_site? || fail(::RealSavvy::JWT::Unauthorized) end
for_site?()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 45 def for_site? audience_is_site? && subject_is_site? end
for_user!()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 77 def for_user! for_user? || fail(::RealSavvy::JWT::Unauthorized) end
for_user?()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 53 def for_user? audience_is_site? && (subject_is_user? || subject_is_imposter?) end
header()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 103 def header retrieve_claims unless @header @header end
imposter?()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 89 def imposter? user @imposter ? true : false end
scope_includes!(*scope_parts)
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 36 def scope_includes!(*scope_parts) scope_includes?(*scope_parts) || fail(::RealSavvy::JWT::Unauthorized) end
scope_includes?(*scope_parts)
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 21 def scope_includes?(*scope_parts) !scope_parts.empty? && ( scope_parts = scope_parts.dup.map(&:to_s) verbs_matches = self.class.verbs_matches(scope_parts.pop) (0..scope_parts.length).any? do |depth| verbs_matches.any? do |verb| (scope_parts[0...depth] + [verb]).inject(scopes) do |m, v| m&.[](v) end end end ) end
scopes()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 123 def scopes @scopes ||= raw_scopes.each_with_object({}) do |scope, result| scope.split(':').inject(result) { |m, v| m[v] ||= {} } end end
short_token()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 94 def short_token @token.split('.')[1] end
site()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 108 def site audience end
subject_is_imposter?()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 67 def subject_is_imposter? subject.respond_to?(:is_real_savvy_imposter?) && subject.is_real_savvy_imposter? end
subject_is_site?()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 72 def subject_is_site? subject.respond_to?(:is_real_savvy_site?) && subject.is_real_savvy_site? end
subject_is_user?()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 62 def subject_is_user? subject.respond_to?(:is_real_savvy_user?) && subject.is_real_savvy_user? end
user()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 112 def user @user ||= begin if subject_is_user? subject elsif subject_is_imposter? @imposter = true subject.user end end end
valid?()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 81 def valid? claims && claims.length > 0 && (for_site? || for_user?) && validate_token end
validate_token()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 85 def validate_token raise NotImplementedError, "subclass did not define #validate_token" end
Private Instance Methods
audience()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 135 def audience @audience ||= ::RealSavvy::JWT::Config.retrieve_audience(self) if claims && claims['aud'] end
raw_scopes()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 143 def raw_scopes claims&.fetch('scopes', nil).to_a end
retrieve_claims()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 131 def retrieve_claims raise NotImplementedError, "subclass did not define #retrieve_claims" end
standardized_token()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 147 def standardized_token # If token needs to be cleaned up do it here in subclasses end
subject()
click to toggle source
# File lib/real_savvy/jwt/abstract_token.rb, line 139 def subject @subject ||= ::RealSavvy::JWT::Config.retrieve_subject(self) if claims && claims['sub'] end