forked from newleaders/thincloud-authentication
/
engine.rb
84 lines (69 loc) · 2.63 KB
/
engine.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
require "rails"
require "strong_parameters"
module Thincloud
module Authentication
# Public: Initialize the Rails engine
class Engine < ::Rails::Engine
isolate_namespace Thincloud::Authentication
require "thincloud/authentication/configuration"
initializer "thincloud.authentication.require_dependencies" do
require_dependency "thincloud/authentication/authenticatable_controller"
require_dependency "thincloud/authentication/identifiable_user"
end
initializer "thincloud.authentication.omniauth.middleware" do |app|
require "omniauth"
require "omniauth-identity"
conf = Thincloud::Authentication.configuration || Configuration.new
strategies = conf.providers.keys
strategies.each do |strategy|
lib = conf.providers[strategy][:require] || "omniauth-#{strategy}"
require lib
end
app.middleware.use ::OmniAuth::Builder do
# always provide the Identity strategy
provider :identity, fields: [:email], model: Identity,
on_failed_registration: RegistrationsController.action(:new)
strategies.each do |strategy|
provider strategy, ENV["#{strategy.to_s.upcase}_CONSUMER_KEY"],
ENV["#{strategy.to_s.upcase}_CONSUMER_SECRET"],
fields: conf.providers[strategy][:fields],
scope: conf.providers[strategy][:scopes]
end
end
end
initializer "thincloud.authentication.omniauth.logger" do
::OmniAuth.config.logger = ::Rails.logger
end
initializer "thincloud.authentication.omniauth.failure_endpoint" do
::OmniAuth.config.on_failure = -> env do
::OmniAuth::FailureEndpoint.new(env).redirect_to_failure
end
end
initializer "thincloud.authentication.omniauth.identity_redirects" do
# override default omniauth-identity forms
class ::OmniAuth::Strategies::Identity
def registration_form
redirect "/signup"
end
def request_phase
redirect "/login"
end
end
end
initializer "thincloud.authentication.user" do
config.to_prepare do
::User.send :include, Thincloud::Authentication::IdentifiableUser
end
end
initializer "thincloud.authentication.action_controller" do
config.to_prepare do
ActionController::Base.send :include,
Thincloud::Authentication::AuthenticatableController
end
end
config.generators do |g|
g.test_framework :mini_test, spec: true, fixture: false
end
end
end
end