Class: Legion::Extensions::Github::Middleware::CredentialFallback
- Inherits:
-
Faraday::Middleware
- Object
- Faraday::Middleware
- Legion::Extensions::Github::Middleware::CredentialFallback
- Defined in:
- lib/legion/extensions/github/middleware/credential_fallback.rb
Constant Summary collapse
- RETRYABLE_STATUSES =
[403, 429].freeze
- IDEMPOTENT_METHODS =
%w[GET HEAD OPTIONS PUT DELETE].freeze
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app, resolver: nil) ⇒ CredentialFallback
constructor
A new instance of CredentialFallback.
Constructor Details
#initialize(app, resolver: nil) ⇒ CredentialFallback
Returns a new instance of CredentialFallback.
13 14 15 16 |
# File 'lib/legion/extensions/github/middleware/credential_fallback.rb', line 13 def initialize(app, resolver: nil) super(app) @resolver = resolver end |
Instance Method Details
#call(env) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/legion/extensions/github/middleware/credential_fallback.rb', line 18 def call(env) response = @app.call(env) return response unless should_retry?(response) retries = 0 max = @resolver.respond_to?(:max_fallback_retries) ? @resolver.max_fallback_retries : 3 while retries < max && should_retry?(response) notify_resolver(response) owner, repo = extract_owner_repo_from_env(env) next_credential = @resolver&.resolve_next_credential(owner: owner, repo: repo) break unless next_credential env[:request_headers]['Authorization'] = "Bearer #{next_credential[:token]}" response = @app.call(env) retries += 1 end response end |