Sha256: f86a768e213edc77858a5754415b7a0befc776b237898122f9ebcd29bd2d8b25

Contents?: true

Size: 1.56 KB

Versions: 5

Compression:

Stored size: 1.56 KB

Contents

module RailsSso
  class App
    attr_reader :strategy, :session, :provider_client

    def initialize(strategy, session, provider_client)
      @strategy, @session, @provider_client = strategy, session, provider_client
    end

    def fetch_user_data
      FetchUser.new(provider_client.token!(current_access_token_value)).call
    rescue ResponseError => e
      refresh_access_token! do
        FetchUser.new(provider_client.token!(current_access_token_value)).call
      end if e.code == :unauthenticated
    end

    def refresh_access_token!
      save_access_token!(access_token.refresh!)

      yield if block_given?
    rescue ::OAuth2::Error
      nil
    rescue ResponseError => e
      nil if e.code == :unauthenticated
    end

    def save_access_token!(access_token)
      session[:access_token] = access_token.token
      session[:refresh_token] = access_token.refresh_token
    end

    def access_token
      return token_mock if RailsSso.config.test_mode?

      OAuth2::AccessToken.new(strategy.client, session[:access_token], {
        refresh_token: session[:refresh_token]
      })
    end

    def invalidate_access_token!
      if RailsSso.config.provider_sign_out_path
        access_token.delete(RailsSso.config.provider_sign_out_path)
      end
    end

    private

    def current_access_token_value
      session[:access_token] or current_access_token_mock
    end

    def current_access_token_mock
      if RailsSso.config.test_mode?
        token_mock.token
      end
    end

    def token_mock
      @token_mock ||= RailsSso::TokenMock.new
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
rails_sso-0.7.5 lib/rails_sso/app.rb
rails_sso-0.7.4 lib/rails_sso/app.rb
rails_sso-0.7.3 lib/rails_sso/app.rb
rails_sso-0.7.2 lib/rails_sso/app.rb
rails_sso-0.7.1 lib/rails_sso/app.rb