Sha256: af4e361e5248acf7daa60400b2c410e57948ed348eb80b48b910452795618eae

Contents?: true

Size: 1.8 KB

Versions: 2

Compression:

Stored size: 1.8 KB

Contents

require 'yaml'
module WeBridgeRailsEngineUsers
  class ProviderSettings < Hash

    @@instance = nil
    @@file_loaded = false

    def self.instance
      @@instance ||= self.new
    end

    def self.file_loaded?
      !!@@file_loaded
    end

    def self.reload!
      @@instance = nil
      @@file_loaded = false
      self.instance.merge!(YAML.load_file(self.file_path)[Rails.env].symbolize_keys!.to_hash)
      self.set_middleware
      self
    end

    @@file_path = nil

    def self.file_path=(path)
      @@file_path = path
    end

    def self.file_path
      @@file_path || "#{Rails.root}/config/omniauth.yml"
    end

    def self.availables(&block)
      rtn = self.instance.delete_if{|key,conf|
        !(conf['key'] && conf['secret'])
      }
      rtn.each do |oauth_provider_symbol,conf|
        name = conf['name'] || oauth_provider_symbol
        block.call(name,conf,oauth_provider_symbol)
      end if block
      rtn
    end

    def self.request_path(name)
      "/auth/#{name}"
    end

    def self.callback_path(name)
      "/auth/#{name}/callback"
    end

    def self.auth_callback_as(name)
      "auth_callback_#{name}"
    end

    def self.auth_as(name)
      "auth_#{name}"
    end

    def self.set_middleware
      mw = Rails.application.config.middleware
      mw.delete OmniAuth::Builder
      mw.use OmniAuth::Builder do
        WeBridgeRailsEngineUsers::ProviderSettings.availables do |name, conf, oauth_provider_symbol|
          conf = conf.symbolize_keys
          key,secret = conf[:key], conf[:secret]
          conf.merge!(
            request_path:  ProviderSettings.request_path(name),
            callback_path: ProviderSettings.callback_path(name))
          provider oauth_provider_symbol, key, secret, conf.merge(key: nil, secret: nil, name: nil)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
we_bridge_rails_engine_users-0.1.2 lib/we_bridge_rails_engine_users/provider_settings.rb
we_bridge_rails_engine_users-0.1.0 lib/we_bridge_rails_engine_users/provider_settings.rb