Sha256: ff4a829479c3ed72b94d7f9707df1280f2b4ddb563fc713478851b1db32da0ec

Contents?: true

Size: 1.78 KB

Versions: 2

Compression:

Stored size: 1.78 KB

Contents

# frozen_string_literal: true

require 'ditty/controllers/application_controller'
require 'ditty/services/settings'
require 'ditty/services/logger'
require 'backports/2.4.0/hash/compact'

require 'omniauth'
OmniAuth.config.logger = ::Ditty::Services::Logger
OmniAuth.config.path_prefix = "#{::Ditty::ApplicationController.map_path}/auth"
OmniAuth.config.on_failure = proc { |env|
  next [400, {}, []] if env['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'

  OmniAuth::FailureEndpoint.new(env).redirect_to_failure
}

module Ditty
  module Services
    module Authentication
      class << self
        def [](key)
          config[key]
        end

        def providers
          config.compact.keys
        end

        def setup
          providers.each do |provider|
            req = config.dig(provider, :require) || "omniauth/#{provider}"
            begin
              require req
            rescue LoadError
              require "omniauth-#{provider}"
            end
          end
        end

        def config
          default.merge ::Ditty::Services::Settings.values(:authentication) || {}
        end

        def provides?(provider)
          providers.include? provider.to_sym
        end

        def default
          require 'ditty/models/identity'
          require 'ditty/controllers/auth_controller'
          {
            identity: {
              arguments: [
                {
                  fields: [:username],
                  model: ::Ditty::Identity,
                  on_login: ::Ditty::AuthController,
                  on_registration: ::Ditty::AuthController,
                  locate_conditions: ->(req) { { username: req['username'] } }
                }
              ]
            }
          }
        end
      end
    end
  end
end

::Ditty::Services::Authentication.setup

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ditty-0.9.1 lib/ditty/services/authentication.rb
ditty-0.9.0 lib/ditty/services/authentication.rb