Class: Aspera::OAuth::Factory
- Inherits:
-
Object
- Object
- Aspera::OAuth::Factory
- Includes:
- Singleton
- Defined in:
- lib/aspera/oauth/factory.rb
Overview
Factory to create tokens and manage their cache
Instance Attribute Summary collapse
-
#parameters ⇒ Object
readonly
Returns the value of attribute parameters.
Class Method Summary collapse
- .bearer?(token) ⇒ Boolean
- .bearer_build(token) ⇒ Object
- .bearer_extract(token) ⇒ Object
-
.cache_id(url, creator_class, *params) ⇒ Object
A cache identifier.
-
.class_to_id(creator_class) ⇒ Object
Snake version of class name.
Instance Method Summary collapse
-
#create(**parameters) ⇒ Object
One of the registered creators for the given create type.
-
#decode_token(token) ⇒ Object
decode token using all registered decoders.
-
#flush_tokens ⇒ Object
delete all existing tokens.
- #persist_mgr ⇒ Object
- #persist_mgr=(manager) ⇒ Object
-
#register_decoder(method) ⇒ Object
register a bearer token decoder, mainly to inspect expiry date.
-
#register_token_creator(creator_class) ⇒ Object
register a token creation method.
Instance Attribute Details
#parameters ⇒ Object (readonly)
Returns the value of attribute parameters.
68 69 70 |
# File 'lib/aspera/oauth/factory.rb', line 68 def parameters @parameters end |
Class Method Details
.bearer?(token) ⇒ Boolean
24 25 26 |
# File 'lib/aspera/oauth/factory.rb', line 24 def bearer?(token) return token.start_with?(BEARER_PREFIX) end |
.bearer_build(token) ⇒ Object
20 21 22 |
# File 'lib/aspera/oauth/factory.rb', line 20 def bearer_build(token) return "#{BEARER_PREFIX}#{token}" end |
.bearer_extract(token) ⇒ Object
28 29 30 31 |
# File 'lib/aspera/oauth/factory.rb', line 28 def bearer_extract(token) Aspera.assert(bearer?(token)){'not a bearer token, wrong prefix'} return token[BEARER_PREFIX.length..-1] end |
.cache_id(url, creator_class, *params) ⇒ Object
Returns a cache identifier.
34 35 36 37 38 39 40 41 |
# File 'lib/aspera/oauth/factory.rb', line 34 def cache_id(url, creator_class, *params) return IdGenerator.from_list([ PERSIST_CATEGORY_TOKEN, url, Factory.class_to_id(creator_class), *params ].flatten) end |
.class_to_id(creator_class) ⇒ Object
Returns snake version of class name.
44 45 46 |
# File 'lib/aspera/oauth/factory.rb', line 44 def class_to_id(creator_class) return creator_class.name.split('::').last.capital_to_snake.to_sym end |
Instance Method Details
#create(**parameters) ⇒ Object
Returns one of the registered creators for the given create type.
119 120 121 122 123 124 125 |
# File 'lib/aspera/oauth/factory.rb', line 119 def create(**parameters) Aspera.assert_type(parameters, Hash) id = parameters[:grant_method] Aspera.assert(@token_type_classes.key?(id)){"token grant method unknown: '#{id}'"} create_parameters = parameters.reject { |k, _v| k.eql?(:grant_method) } @token_type_classes[id].new(**create_parameters) end |
#decode_token(token) ⇒ Object
decode token using all registered decoders
99 100 101 102 103 104 105 |
# File 'lib/aspera/oauth/factory.rb', line 99 def decode_token(token) @decoders.each do |decoder| result = decoder.call(token) rescue nil return result unless result.nil? end return nil end |
#flush_tokens ⇒ Object
delete all existing tokens
89 90 91 |
# File 'lib/aspera/oauth/factory.rb', line 89 def flush_tokens persist_mgr.garbage_collect(PERSIST_CATEGORY_TOKEN, nil) end |
#persist_mgr ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/aspera/oauth/factory.rb', line 76 def persist_mgr if @persist.nil? # use OAuth::Factory.instance.persist_mgr=PersistencyFolder.new) Log.log.debug('Not using persistency') # create NULL persistency class @persist = Class.new do def get(_x); nil; end; def delete(_x); nil; end; def put(_x, _y); nil; end; def garbage_collect(_x, _y); nil; end # rubocop:disable Layout/EmptyLineBetweenDefs, Style/Semicolon, Layout/LineLength end.new end return @persist end |
#persist_mgr=(manager) ⇒ Object
70 71 72 73 74 |
# File 'lib/aspera/oauth/factory.rb', line 70 def persist_mgr=(manager) @persist = manager # cleanup expired tokens @persist.garbage_collect(PERSIST_CATEGORY_TOKEN, @parameters[:token_cache_expiry_sec]) end |
#register_decoder(method) ⇒ Object
register a bearer token decoder, mainly to inspect expiry date
94 95 96 |
# File 'lib/aspera/oauth/factory.rb', line 94 def register_decoder(method) @decoders.push(method) end |
#register_token_creator(creator_class) ⇒ Object
register a token creation method
111 112 113 114 115 116 |
# File 'lib/aspera/oauth/factory.rb', line 111 def register_token_creator(creator_class) Aspera.assert_type(creator_class, Class) id = Factory.class_to_id(creator_class) Log.log.debug{"registering token creator #{id}"} @token_type_classes[id] = creator_class end |