infinum_id 1.3.1 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +18 -10
  3. data/app/blueprints/infinum_id/resource_blueprint.rb +10 -0
  4. data/app/controllers/infinum_id/api/base_controller.rb +10 -0
  5. data/app/controllers/infinum_id/api/webhooks_controller.rb +41 -0
  6. data/app/controllers/infinum_id/application_controller.rb +6 -0
  7. data/app/controllers/infinum_id/{users → resources}/omniauth_callbacks_controller.rb +5 -5
  8. data/app/controllers/infinum_id/resources_controller.rb +9 -0
  9. data/app/mailers/infinum_id/application_mailer.rb +6 -0
  10. data/app/mailers/infinum_id/mailer.rb +24 -0
  11. data/app/services/infinum_id/after_resource_create.rb +5 -0
  12. data/app/services/infinum_id/after_resource_update.rb +5 -0
  13. data/app/services/infinum_id/requests/invite_sender.rb +21 -21
  14. data/app/services/infinum_id/resources/finder.rb +9 -0
  15. data/app/services/infinum_id/resources/invite.rb +29 -0
  16. data/app/services/infinum_id/resources/updater.rb +31 -0
  17. data/app/views/{user_mailer → infinum_id/mailer}/invite_email.html.erb +1 -1
  18. data/app/views/{user_mailer → infinum_id/mailer}/invite_email.text.erb +1 -1
  19. data/app/views/{user_mailer → infinum_id/mailer}/welcome_email.html.erb +1 -1
  20. data/app/views/{user_mailer → infinum_id/mailer}/welcome_email.text.erb +1 -1
  21. data/app/workers/infinum_id/resources/invite_worker.rb +11 -0
  22. data/config/routes.rb +10 -8
  23. data/infinum_id.gemspec +2 -0
  24. data/lib/infinum_id/version.rb +1 -1
  25. data/lib/infinum_id.rb +17 -1
  26. metadata +47 -18
  27. data/app/controllers/api/base_controller.rb +0 -6
  28. data/app/controllers/api/webhooks_controller.rb +0 -42
  29. data/app/controllers/infinum_id/users_controller.rb +0 -9
  30. data/app/mailers/application_mailer.rb +0 -4
  31. data/app/mailers/user_mailer.rb +0 -20
  32. data/app/services/infinum_id/after_user_create.rb +0 -5
  33. data/app/services/infinum_id/after_user_update.rb +0 -5
  34. data/app/services/infinum_id/users/finder.rb +0 -9
  35. data/app/services/infinum_id/users/invite.rb +0 -29
  36. data/app/services/infinum_id/users/updater.rb +0 -31
  37. data/app/workers/infinum_id/users/invite_worker.rb +0 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4aeee8ea3053d76baa43fa9fda643c146bac258f84b0f76112c1e04de96d92f9
4
- data.tar.gz: 4718fa64435d10a4389bcdccd9e2018486d20f0123742820281824ab0ab01d66
3
+ metadata.gz: b0c689ffa0ee0853c5bb5a4c219a70293eecf3f3deded000f38c79b1f72377c7
4
+ data.tar.gz: 74835c781128e13d41362154f122201a1543e155ae6b8ba2e35a546b6d06330a
5
5
  SHA512:
6
- metadata.gz: 0ce832bc62356a9f123f33ebc194f9c52c6262cce92aa4bc355bc2932d84a659c213c6bf8a8b25468fcfa4a92954fd39e0c06c0cc25e2a0c0d36a2a67c6ec58d
7
- data.tar.gz: ef16f3b96ce19a57d4b1086a1ba19a4974f28887b5ca34bf230e0cd2164176e9a98da24999fb8b8d4f89b0f61031214ef820d9f548a93802d7268a4ba93f9c44
6
+ metadata.gz: 560b23b073b84045aaedd5ad71178d12d411f4d2b44553598e3bb890822a849852c98846e53995ef2efa282f9e6514e8d2143ae9b33137793af5660e072c8131
7
+ data.tar.gz: f1b58e6f301f68b688a305bfc56103a31b368eddeaf9180ccd7099f5984e3a96beb784ad50fdab75c27d8fd233873abce9aa5907566e0d9d448c7d8eb6df8c10
data/Gemfile.lock CHANGED
@@ -1,9 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- infinum_id (1.3.1)
4
+ infinum_id (1.4.0)
5
+ blueprinter
5
6
  bundler
6
7
  devise
8
+ dry-configurable
7
9
  http
8
10
  omniauth-infinum_id
9
11
  redis
@@ -58,7 +60,8 @@ GEM
58
60
  addressable (2.6.0)
59
61
  public_suffix (>= 2.0.2, < 4.0)
60
62
  arel (9.0.0)
61
- bcrypt (3.1.12)
63
+ bcrypt (3.1.13)
64
+ blueprinter (0.19.0)
62
65
  builder (3.2.3)
63
66
  byebug (10.0.2)
64
67
  coderay (1.1.2)
@@ -67,7 +70,7 @@ GEM
67
70
  crack (0.4.3)
68
71
  safe_yaml (~> 1.0.0)
69
72
  crass (1.0.4)
70
- devise (4.6.0)
73
+ devise (4.6.2)
71
74
  bcrypt (~> 3.0)
72
75
  orm_adapter (~> 0.1)
73
76
  railties (>= 4.1.0, < 6.0)
@@ -77,6 +80,11 @@ GEM
77
80
  docile (1.3.1)
78
81
  domain_name (0.5.20190701)
79
82
  unf (>= 0.0.5, < 1.0.0)
83
+ dry-configurable (0.8.3)
84
+ concurrent-ruby (~> 1.0)
85
+ dry-core (~> 0.4, >= 0.4.7)
86
+ dry-core (0.4.8)
87
+ concurrent-ruby (~> 1.0)
80
88
  erubi (1.8.0)
81
89
  factory_bot (5.0.0)
82
90
  activesupport (>= 4.2.0)
@@ -91,7 +99,7 @@ GEM
91
99
  activesupport (>= 4.2.0)
92
100
  hashdiff (0.3.8)
93
101
  hashie (3.6.0)
94
- http (4.0.3)
102
+ http (4.1.1)
95
103
  addressable (~> 2.3)
96
104
  http-cookie (~> 1.0)
97
105
  http-form_data (~> 2.0)
@@ -131,7 +139,7 @@ GEM
131
139
  omniauth (1.9.0)
132
140
  hashie (>= 3.4.6, < 3.7.0)
133
141
  rack (>= 1.6.2, < 3)
134
- omniauth-infinum_id (1.0.0)
142
+ omniauth-infinum_id (1.1.0)
135
143
  omniauth-oauth2
136
144
  omniauth-oauth2 (1.6.0)
137
145
  oauth2 (~> 1.1)
@@ -176,12 +184,12 @@ GEM
176
184
  rake (>= 0.8.7)
177
185
  thor (>= 0.19.0, < 2.0)
178
186
  rake (10.5.0)
179
- redis (4.1.0)
187
+ redis (4.1.2)
180
188
  redis-namespace (1.6.0)
181
189
  redis (>= 3.0.4)
182
- responders (2.4.1)
183
- actionpack (>= 4.2.0, < 6.0)
184
- railties (>= 4.2.0, < 6.0)
190
+ responders (3.0.0)
191
+ actionpack (>= 5.0)
192
+ railties (>= 5.0)
185
193
  rspec (3.8.0)
186
194
  rspec-core (~> 3.8.0)
187
195
  rspec-expectations (~> 3.8.0)
@@ -204,7 +212,7 @@ GEM
204
212
  rspec-support (~> 3.8.0)
205
213
  rspec-support (3.8.0)
206
214
  safe_yaml (1.0.4)
207
- sidekiq (5.2.5)
215
+ sidekiq (5.2.7)
208
216
  connection_pool (~> 2.2, >= 2.2.2)
209
217
  rack (>= 1.5.0)
210
218
  rack-protection (>= 1.5.0)
@@ -0,0 +1,10 @@
1
+ module InfinumId
2
+ class ResourceBlueprint < Blueprinter::Base
3
+ identifier :email
4
+
5
+ fields :first_name, :last_name
6
+
7
+ # field :slack_username
8
+ # field :avatar_url, as: :avatar_remote_url
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module InfinumId
2
+ module Api
3
+ class BaseController < ActionController::Base
4
+ protect_from_forgery with: :null_session
5
+ respond_to :json
6
+
7
+ delegate :resource_name, :resource_class, to: InfinumId
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,41 @@
1
+ module InfinumId
2
+ module Api
3
+ class WebhooksController < Api::BaseController
4
+ def update_resource_callback
5
+ return render_not_found unless resource
6
+
7
+ resource.update(user_params)
8
+ InfinumId::AfterResourceUpdate.call(resource, params[:user])
9
+
10
+ render json: { resource_name.underscore => 'updated' }
11
+ end
12
+
13
+ def create_resource_callback
14
+ return render_already_exists if resource
15
+
16
+ resource = resource_class.create(user_params.merge(provider: params[:provider]))
17
+ InfinumId::AfterResourceCreate.call(resource, params[:user])
18
+
19
+ render json: { resource_name.underscore => 'created' }
20
+ end
21
+
22
+ private
23
+
24
+ def user_params
25
+ params.require(:user).permit(InfinumId.resource_attributes)
26
+ end
27
+
28
+ def resource
29
+ @resource ||= resource_class.find_by(uid: user_params[:uid])
30
+ end
31
+
32
+ def render_not_found
33
+ render json: { resource_name.underscore => 'not found' }, status: :not_found
34
+ end
35
+
36
+ def render_already_exists
37
+ render json: { resource_name.underscore => 'already exists' }, status: :unprocessable_entity
38
+ end
39
+ end
40
+ end
41
+ end
@@ -2,5 +2,11 @@ module InfinumId
2
2
  class ApplicationController < ActionController::Base
3
3
  protect_from_forgery with: :exception
4
4
  respond_to :html
5
+
6
+ delegate :resource_name, :resource_class, to: InfinumId
7
+
8
+ def current_resource
9
+ method("current_#{resource_name.underscore}").call
10
+ end
5
11
  end
6
12
  end
@@ -1,13 +1,13 @@
1
1
  module InfinumId
2
- module Users
2
+ module Resources
3
3
  class OmniauthCallbacksController < Devise::OmniauthCallbacksController
4
4
  def infinum_id
5
- user = InfinumId::Users::Finder.from_omniauth(omniauth)
5
+ resource = InfinumId::Resources::Finder.from_omniauth(omniauth)
6
6
 
7
- if user
8
- InfinumId::Users::Updater.call(omniauth['info'], user)
7
+ if resource
8
+ InfinumId::Resources::Updater.call(omniauth['info'], resource)
9
9
  flash[:notice] = I18n.t 'devise.omniauth_callbacks.success', kind: 'InfinumId'
10
- sign_in_and_redirect user, event: :authentication
10
+ sign_in_and_redirect resource, event: :authentication
11
11
  else
12
12
  flash[:notice] = 'You do not have permission to access this application.'
13
13
  redirect_to root_path
@@ -0,0 +1,9 @@
1
+ module InfinumId
2
+ class ResourcesController < InfinumId::ApplicationController
3
+ def destroy
4
+ sign_out current_resource
5
+
6
+ redirect_to root_path
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ module InfinumId
2
+ class ApplicationMailer < ActionMailer::Base
3
+ default from: 'from@example.com'
4
+ # layout 'mailer'
5
+ end
6
+ end
@@ -0,0 +1,24 @@
1
+ module InfinumId
2
+ class Mailer < InfinumId::ApplicationMailer
3
+ before_action :load_params
4
+
5
+ def welcome_email
6
+ mail(to: @resource.email, subject: "Welcome to #{@service_name}")
7
+ end
8
+
9
+ def invite_email
10
+ @accept_path = params[:accept_path]
11
+
12
+ mail(to: @resource.email, subject: "Invite to #{@service_name}")
13
+ end
14
+
15
+ def load_params
16
+ @resource = resource_class.find(params[:resource_id])
17
+ @invited_by = resource_class.find_by(uid: params[:invited_by_uid])
18
+ @service_name = InfinumId.service_name
19
+ @service_url = Rails.configuration.host_url
20
+ end
21
+
22
+ delegate :resource_name, :resource_class, to: InfinumId
23
+ end
24
+ end
@@ -0,0 +1,5 @@
1
+ module InfinumId
2
+ class AfterResourceCreate
3
+ def self.call(resource, params=nil); end
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module InfinumId
2
+ class AfterResourceUpdate
3
+ def self.call(resource, params=nil); end
4
+ end
5
+ end
@@ -1,13 +1,13 @@
1
1
  module InfinumId
2
2
  module Requests
3
3
  class InviteSender
4
- def initialize(user_id, current_user_uid)
5
- @user = User.find(user_id)
6
- @current_user_uid = current_user_uid
4
+ def initialize(resource_id, current_resource_uid)
5
+ @resource = resource_class.find(resource_id)
6
+ @current_resource_uid = current_resource_uid
7
7
  end
8
8
 
9
- def self.call(user_id, current_user_uid)
10
- new(user_id, current_user_uid).call
9
+ def self.call(resource_id, current_resource_uid)
10
+ new(resource_id, current_resource_uid).call
11
11
  end
12
12
 
13
13
  def call
@@ -17,7 +17,7 @@ module InfinumId
17
17
 
18
18
  private
19
19
 
20
- attr_reader :user, :current_user_uid, :response
20
+ attr_reader :resource, :current_resource_uid, :response
21
21
 
22
22
  def send_invite_request
23
23
  @response = HTTP.headers(headers).post(invitation_url, json: invitation_params)
@@ -26,8 +26,8 @@ module InfinumId
26
26
  def handle_response
27
27
  case response.code
28
28
  when 200
29
- update_user
30
- send_email if Rails.configuration.infinum_id_send_email
29
+ update_resource
30
+ send_email if InfinumId.infinum_id_send_email
31
31
  when 400, 403, 404
32
32
  return response.to_s
33
33
  when 401..599
@@ -35,8 +35,9 @@ module InfinumId
35
35
  end
36
36
  end
37
37
 
38
- def update_user
39
- user.update(user_params.merge(provider: 'infinum_id'))
38
+ def update_resource
39
+ resource.update(user_params.merge(provider: 'infinum_id'))
40
+ InfinumId::AfterResourceUpdate.call(resource, params[:user])
40
41
  end
41
42
 
42
43
  def send_email
@@ -44,15 +45,15 @@ module InfinumId
44
45
  end
45
46
 
46
47
  def send_invite_email
47
- UserMailer.with(
48
- user_id: user.id, invited_by_uid: current_user_uid,
48
+ InfinumId::Mailer.with(
49
+ resource_id: resource.id, invited_by_uid: current_resource_uid,
49
50
  accept_path: params[:invitation_accept_path]
50
51
  ).invite_email.deliver_now
51
52
  end
52
53
 
53
54
  def send_welcome_email
54
- UserMailer.with(
55
- user_id: user.id, invited_by_uid: current_user_uid
55
+ InfinumId::Mailer.with(
56
+ resource_id: resource.id, invited_by_uid: current_resource_uid
56
57
  ).welcome_email.deliver_later
57
58
  end
58
59
 
@@ -61,10 +62,7 @@ module InfinumId
61
62
  end
62
63
 
63
64
  def user_params
64
- params.require(:user).permit(
65
- :uid, :email, :first_name, :last_name, :slack_username,
66
- :time_zone, :deactivated_at, :avatar_url
67
- )
65
+ params.require(:user).permit(InfinumId.resource_attributes)
68
66
  end
69
67
 
70
68
  def headers
@@ -76,15 +74,17 @@ module InfinumId
76
74
 
77
75
  def invitation_params
78
76
  {
79
- user: user.as_json,
80
- invited_by_uid: current_user_uid,
81
- send_invitation: !Rails.configuration.infinum_id_send_email
77
+ user: InfinumId::ResourceBlueprint.render_as_json(resource),
78
+ invited_by_uid: current_resource_uid,
79
+ send_invitation: !InfinumId.infinum_id_send_email
82
80
  }
83
81
  end
84
82
 
85
83
  def invitation_url
86
84
  "#{InfinumId.url}/api/invitations"
87
85
  end
86
+
87
+ delegate :resource_name, :resource_class, to: InfinumId
88
88
  end
89
89
  end
90
90
  end
@@ -0,0 +1,9 @@
1
+ module InfinumId
2
+ module Resources
3
+ class Finder
4
+ def self.from_omniauth(auth)
5
+ InfinumId.resource_class.find_by(provider: auth.provider, uid: auth.uid)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,29 @@
1
+ module InfinumId
2
+ module Resources
3
+ class Invite
4
+ def initialize(resource_params, current_resource)
5
+ @resource_params = resource_params
6
+ @current_resource = current_resource
7
+ end
8
+
9
+ def self.call(resource_params, current_resource)
10
+ new(resource_params, current_resource).call
11
+ end
12
+
13
+ def call
14
+ @resource = InfinumId.resource_class.create(@resource_params)
15
+
16
+ send_invite_request if @resource.errors.empty?
17
+ @resource
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :current_resource, :resource
23
+
24
+ def send_invite_request
25
+ InfinumId::Resources::InviteWorker.perform_async(@resource.id, current_resource.uid)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,31 @@
1
+ module InfinumId
2
+ module Resources
3
+ class Updater
4
+ def initialize(params, resource)
5
+ @params = params.deep_symbolize_keys
6
+ @resource = resource
7
+ end
8
+
9
+ def self.call(params, resource)
10
+ new(params, resource).call
11
+ end
12
+
13
+ def call
14
+ update_resource
15
+ InfinumId::AfterResourceUpdate.call(resource, @params)
16
+ end
17
+
18
+ private
19
+
20
+ attr_reader :resource_params, :resource
21
+
22
+ def update_resource
23
+ resource.update(resource_params)
24
+ end
25
+
26
+ def resource_params
27
+ @params.slice(*InfinumId.resource_attributes)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,4 +1,4 @@
1
- <h1>Hi <%= @user.email %></h1>
1
+ <h1>Hi <%= @resource.email %></h1>
2
2
  <p>
3
3
  <%= @invited_by.email %> invited you to <%= @service_name %>.
4
4
  </p>
@@ -1,4 +1,4 @@
1
- Hi <%= @user.email %>
1
+ Hi <%= @resource.email %>
2
2
 
3
3
  <%= @invited_by.email %> invited you to <%= @service_name %>.
4
4
 
@@ -1,4 +1,4 @@
1
- <h1>Hi <%= @user.email %></h1>
1
+ <h1>Hi <%= @resource.email %></h1>
2
2
  <p>
3
3
  <%= @invited_by.email %> added you to <%= @service_name %>.
4
4
  </p>
@@ -1,4 +1,4 @@
1
- Hi <%= @user.email %>
1
+ Hi <%= @resource.email %>
2
2
 
3
3
  <%= @invited_by.email %> added you to <%= @service_name %>.
4
4
 
@@ -0,0 +1,11 @@
1
+ module InfinumId
2
+ module Resources
3
+ class InviteWorker
4
+ include Sidekiq::Worker
5
+
6
+ def perform(resource_id, current_resource_uid)
7
+ InfinumId::Requests::InviteSender.call(resource_id, current_resource_uid)
8
+ end
9
+ end
10
+ end
11
+ end
data/config/routes.rb CHANGED
@@ -1,14 +1,16 @@
1
1
  Rails.application.routes.draw do
2
- devise_for :users, controllers: {
3
- omniauth_callbacks: 'infinum_id/users/omniauth_callbacks'
4
- }
2
+ get '/logout', to: 'infinum_id/resources#destroy'
5
3
 
6
- get '/logout', to: 'infinum_id/users#destroy'
4
+ devise_for InfinumId.resource_name.pluralize.underscore, controllers: {
5
+ omniauth_callbacks: 'infinum_id/resources/omniauth_callbacks'
6
+ }
7
7
 
8
- namespace :api do
9
- scope '/webhooks', :controller => :webhooks do
10
- post :update_user_callback
11
- post :create_user_callback
8
+ namespace :infinum_id do
9
+ namespace :api do
10
+ scope '/webhooks', :controller => :webhooks do
11
+ post :update_resource_callback
12
+ post :create_resource_callback
13
+ end
12
14
  end
13
15
  end
14
16
  end
data/infinum_id.gemspec CHANGED
@@ -53,4 +53,6 @@ Gem::Specification.new do |spec|
53
53
  spec.add_dependency 'redis-namespace'
54
54
  spec.add_dependency 'responders'
55
55
  spec.add_dependency 'sidekiq'
56
+ spec.add_dependency 'dry-configurable'
57
+ spec.add_dependency 'blueprinter'
56
58
  end
@@ -1,3 +1,3 @@
1
1
  module InfinumId
2
- VERSION = '1.3.1'
2
+ VERSION = '1.4.0'
3
3
  end
data/lib/infinum_id.rb CHANGED
@@ -1,10 +1,26 @@
1
- require 'infinum_id/version'
2
1
  require 'omniauth/infinum_id'
2
+ require 'infinum_id/version'
3
3
  require 'infinum_id/engine'
4
+ require 'dry-configurable'
5
+ require 'blueprinter'
4
6
  require 'devise'
5
7
  require 'sidekiq'
8
+ require 'http'
6
9
 
7
10
  module InfinumId
11
+ extend Dry::Configurable
12
+
13
+ setting :service_name, reader: true
14
+ setting :resource_name, 'User', reader: true
15
+ setting :infinum_id_send_email, false, reader: true
16
+
17
+ setting :resource_attributes, [:uid, :email, :first_name, :last_name],
18
+ reader: true
19
+
20
+ def self.resource_class
21
+ resource_name.constantize
22
+ end
23
+
8
24
  def self.url
9
25
  dig_secret(:url)
10
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: infinum_id
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dajana Jeroncic
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-31 00:00:00.000000000 Z
11
+ date: 2019-08-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -304,6 +304,34 @@ dependencies:
304
304
  - - ">="
305
305
  - !ruby/object:Gem::Version
306
306
  version: '0'
307
+ - !ruby/object:Gem::Dependency
308
+ name: dry-configurable
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - ">="
312
+ - !ruby/object:Gem::Version
313
+ version: '0'
314
+ type: :runtime
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - ">="
319
+ - !ruby/object:Gem::Version
320
+ version: '0'
321
+ - !ruby/object:Gem::Dependency
322
+ name: blueprinter
323
+ requirement: !ruby/object:Gem::Requirement
324
+ requirements:
325
+ - - ">="
326
+ - !ruby/object:Gem::Version
327
+ version: '0'
328
+ type: :runtime
329
+ prerelease: false
330
+ version_requirements: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - ">="
333
+ - !ruby/object:Gem::Version
334
+ version: '0'
307
335
  description: Write a longer description or delete this line.
308
336
  email:
309
337
  - dajana.jeroncic@infinum.hr
@@ -321,26 +349,27 @@ files:
321
349
  - LICENSE.txt
322
350
  - README.md
323
351
  - Rakefile
324
- - app/controllers/api/base_controller.rb
325
- - app/controllers/api/webhooks_controller.rb
352
+ - app/blueprints/infinum_id/resource_blueprint.rb
353
+ - app/controllers/infinum_id/api/base_controller.rb
354
+ - app/controllers/infinum_id/api/webhooks_controller.rb
326
355
  - app/controllers/infinum_id/application_controller.rb
327
- - app/controllers/infinum_id/users/omniauth_callbacks_controller.rb
328
- - app/controllers/infinum_id/users_controller.rb
356
+ - app/controllers/infinum_id/resources/omniauth_callbacks_controller.rb
357
+ - app/controllers/infinum_id/resources_controller.rb
329
358
  - app/helpers/infinum_id/path_helper.rb
330
- - app/mailers/application_mailer.rb
331
- - app/mailers/user_mailer.rb
359
+ - app/mailers/infinum_id/application_mailer.rb
360
+ - app/mailers/infinum_id/mailer.rb
332
361
  - app/models/infinum_id/application_record.rb
333
- - app/services/infinum_id/after_user_create.rb
334
- - app/services/infinum_id/after_user_update.rb
362
+ - app/services/infinum_id/after_resource_create.rb
363
+ - app/services/infinum_id/after_resource_update.rb
335
364
  - app/services/infinum_id/requests/invite_sender.rb
336
- - app/services/infinum_id/users/finder.rb
337
- - app/services/infinum_id/users/invite.rb
338
- - app/services/infinum_id/users/updater.rb
339
- - app/views/user_mailer/invite_email.html.erb
340
- - app/views/user_mailer/invite_email.text.erb
341
- - app/views/user_mailer/welcome_email.html.erb
342
- - app/views/user_mailer/welcome_email.text.erb
343
- - app/workers/infinum_id/users/invite_worker.rb
365
+ - app/services/infinum_id/resources/finder.rb
366
+ - app/services/infinum_id/resources/invite.rb
367
+ - app/services/infinum_id/resources/updater.rb
368
+ - app/views/infinum_id/mailer/invite_email.html.erb
369
+ - app/views/infinum_id/mailer/invite_email.text.erb
370
+ - app/views/infinum_id/mailer/welcome_email.html.erb
371
+ - app/views/infinum_id/mailer/welcome_email.text.erb
372
+ - app/workers/infinum_id/resources/invite_worker.rb
344
373
  - bin/console
345
374
  - bin/setup
346
375
  - config/initializers/devise.rb
@@ -1,6 +0,0 @@
1
- module Api
2
- class BaseController < ActionController::Base
3
- protect_from_forgery with: :null_session
4
- respond_to :json
5
- end
6
- end
@@ -1,42 +0,0 @@
1
- module Api
2
- class WebhooksController < Api::BaseController
3
- def update_user_callback
4
- return render_not_found unless user
5
-
6
- user.update(user_params)
7
- InfinumId::AfterUserUpdate.call(user, params[:user])
8
-
9
- render json: { user: 'updated' }
10
- end
11
-
12
- def create_user_callback
13
- return render_already_exists if user
14
-
15
- user = User.create(user_params.merge(provider: params[:provider]))
16
- InfinumId::AfterUserCreate.call(user, params[:user])
17
-
18
- render json: { user: 'created' }
19
- end
20
-
21
- private
22
-
23
- def user_params
24
- params.require(:user).permit(
25
- :uid, :email, :first_name, :last_name, :slack_username,
26
- :time_zone, :deactivated_at, :avatar_url
27
- )
28
- end
29
-
30
- def user
31
- @user ||= User.find_by(uid: user_params[:uid])
32
- end
33
-
34
- def render_not_found
35
- render json: { user: 'not found' }, status: :not_found
36
- end
37
-
38
- def render_already_exists
39
- render json: { user: 'already exists' }, status: :unprocessable_entity
40
- end
41
- end
42
- end
@@ -1,9 +0,0 @@
1
- module InfinumId
2
- class UsersController < ApplicationController
3
- def destroy
4
- sign_out current_user
5
-
6
- redirect_to root_path
7
- end
8
- end
9
- end
@@ -1,4 +0,0 @@
1
- class ApplicationMailer < ActionMailer::Base
2
- default from: 'from@example.com'
3
- layout 'mailer'
4
- end
@@ -1,20 +0,0 @@
1
- class UserMailer < ApplicationMailer
2
- before_action :load_params
3
-
4
- def welcome_email
5
- mail(to: @user.email, subject: "Welcome to #{@service_name}")
6
- end
7
-
8
- def invite_email
9
- @accept_path = params[:accept_path]
10
-
11
- mail(to: @user.email, subject: "Invite to #{@service_name}")
12
- end
13
-
14
- def load_params
15
- @user = User.find(params[:user_id])
16
- @invited_by = User.find_by(uid: params[:invited_by_uid])
17
- @service_name = Rails.configuration.name
18
- @service_url = Rails.configuration.host_url
19
- end
20
- end
@@ -1,5 +0,0 @@
1
- module InfinumId
2
- class AfterUserCreate
3
- def self.call(user, params=nil); end
4
- end
5
- end
@@ -1,5 +0,0 @@
1
- module InfinumId
2
- class AfterUserUpdate
3
- def self.call(user, params=nil); end
4
- end
5
- end
@@ -1,9 +0,0 @@
1
- module InfinumId
2
- module Users
3
- class Finder
4
- def self.from_omniauth(auth)
5
- User.find_by(provider: auth.provider, uid: auth.uid) if defined?(User)
6
- end
7
- end
8
- end
9
- end
@@ -1,29 +0,0 @@
1
- module InfinumId
2
- module Users
3
- class Invite
4
- def initialize(user_params, current_user)
5
- @user_params = user_params
6
- @current_user = current_user
7
- end
8
-
9
- def self.call(user_params, current_user)
10
- new(user_params, current_user).call
11
- end
12
-
13
- def call
14
- @user = User.create(@user_params)
15
-
16
- send_invite_request if @user.errors.empty?
17
- @user
18
- end
19
-
20
- private
21
-
22
- attr_reader :current_user, :user
23
-
24
- def send_invite_request
25
- InfinumId::Users::InviteWorker.perform_async(@user.id, current_user.uid)
26
- end
27
- end
28
- end
29
- end
@@ -1,31 +0,0 @@
1
- module InfinumId
2
- module Users
3
- class Updater
4
- def initialize(params, user)
5
- @user_params = params.deep_symbolize_keys
6
- @user = user
7
- end
8
-
9
- def self.call(params, user)
10
- new(params, user).call
11
- end
12
-
13
- def call
14
- update_user
15
- InfinumId::AfterUserUpdate.call(user)
16
- end
17
-
18
- private
19
-
20
- attr_reader :user_params, :user
21
-
22
- def update_user
23
- user.update(user_params)
24
- end
25
-
26
- def user_column_names
27
- User.column_names
28
- end
29
- end
30
- end
31
- end
@@ -1,11 +0,0 @@
1
- module InfinumId
2
- module Users
3
- class InviteWorker
4
- include Sidekiq::Worker
5
-
6
- def perform(user_id, current_user_uid)
7
- InfinumId::Requests::InviteSender.call(user_id, current_user_uid)
8
- end
9
- end
10
- end
11
- end