doorkeeper_hub 0.2.9 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 69b5f66b512d34931149c92205bc02cf225e2e54ab6adce512763e177b430f78
4
- data.tar.gz: c470d887585dde0f18502caacc26f8f2f0f2b885d5b8b78100ca130f292299cb
3
+ metadata.gz: 7d44355b88b5b8da4004fe095861f322193cd9506ba02ce7dd52c37397562fdd
4
+ data.tar.gz: 6a7a59d433cb482e80912f118de9487bee48a5dcc5ed7ab1efb6f780e1492a8d
5
5
  SHA512:
6
- metadata.gz: 2af111ba50fb34ca23a235aebc789bef715fb2ae4db1aca0a155c0b1fb644cc555d71384739d4fd087dbe93b6dcca63c64c1f658df07695709b2615cc9480dcd
7
- data.tar.gz: a06f2068120f43754cd18ab62f1eddcccf02cf65b1b0ff273905855efac82f1d30b0a8592c51f208f04e78733db3f122e8fdfef43769ffe09ab8286cc62205bf
6
+ metadata.gz: aaad6e673cd7b7661269f60c3f6d5d44482d55fbeb8575363023045197c5e1110734f78c1f8ae0e1831c4536e8eb0209f0c5630a24b867d9d3991900412efc1b
7
+ data.tar.gz: b8fa03bca3ac375ab0b0b9cda906c0ca9c25db36a18c61089b13bc90218933e91fa44291650be1358240a1844182b3692e3e2d768156ddc2788024bbfc70d334
data/.gitignore CHANGED
@@ -6,3 +6,4 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ .idea/
@@ -1,19 +1,17 @@
1
1
  module DoorkeeperHub
2
- class OmniauthCallbacksController < Devise::OmniauthCallbacksController
3
- skip_before_action :verify_authenticity_token,
4
- :authenticate_doorkeeper!, only: :saml
2
+ class OmniauthCallbacksController < ApplicationController
3
+ skip_before_action :authenticate_doorkeeper!,
4
+ :verify_authenticity_token, only: :saml
5
5
 
6
6
  def saml
7
- @user = DoorkeeperHub
8
- .user_model
9
- .constantize
10
- .from_omniauth(request.env["omniauth.auth"])
11
7
 
12
- if @user.present? && @user.persisted?
13
- sign_in_and_redirect @user, event: :authentication
14
- else
15
- raise ActionController::RoutingError.new('Not Found')
16
- end
8
+ warden = request.env['warden']
9
+
10
+ # warden.authenticated?(:user) && warden.logout(:user)
11
+ user = warden.authenticate(:doorkeeper)
12
+ warden.set_user(user)
13
+
14
+ redirect_to after_sign_in_path
17
15
  end
18
16
  end
19
17
  end
@@ -0,0 +1,10 @@
1
+ Rails.application.config.middleware.use OmniAuth::Builder do
2
+ provider :saml,
3
+ :assertion_consumer_service_url => DoorkeeperHub.config.callback_url,
4
+ :issuer => DoorkeeperHub.config.issuer,
5
+ :idp_sso_target_url => "https://id.hubhub.co/saml/auth",
6
+ :idp_sso_target_url_runtime_params => {:original_request_param => :mapped_idp_param},
7
+ :idp_cert_fingerprint => DoorkeeperHub.config.idp_fingerprint,
8
+ :idp_cert_fingerprint_validator => lambda { |fingerprint| fingerprint },
9
+ :name_identifier_format => "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
10
+ end
@@ -0,0 +1,26 @@
1
+ Warden::Strategies.add(:doorkeeper) do
2
+ def valid?
3
+ true
4
+ end
5
+
6
+ def authenticate!
7
+ u = DoorkeeperHub::User.new('company_tokens' => company_tokens, 'id' => auth.uid)
8
+ success!(u)
9
+ end
10
+
11
+ def auth
12
+ request.env["omniauth.auth"]
13
+ end
14
+
15
+ def company_tokens
16
+ auth.extra.raw_info.multi(DoorkeeperHub.token_name)
17
+ end
18
+ end
19
+
20
+ Warden::Manager.serialize_into_session do |user|
21
+ user
22
+ end
23
+
24
+ Warden::Manager.serialize_from_session do |data|
25
+ DoorkeeperHub::User.new(data)
26
+ end
data/config/routes.rb CHANGED
@@ -1,8 +1,5 @@
1
1
  Rails.application.routes.draw do
2
- devise_for DoorkeeperHub.devise_routes_scope,
3
- controllers: {
4
- omniauth_callbacks: 'doorkeeper_hub/omniauth_callbacks'
5
- }
2
+ post 'auth/saml/callback', to: 'doorkeeper_hub/omniauth_callbacks#saml'
6
3
 
7
4
  unless DoorkeeperHub.client_mode?
8
5
  post 'doorkeeper/activation', to: 'doorkeeper_hub/callbacks#activation'
@@ -24,6 +24,6 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "bundler", "~> 1.16"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
26
 
27
- spec.add_dependency "devise", "~> 4.4"
27
+ spec.add_dependency "warden", "~> 1.2"
28
28
  spec.add_dependency "omniauth-saml", "~> 1.10"
29
29
  end
@@ -1,6 +1,5 @@
1
1
  require "doorkeeper_hub/version"
2
2
  require 'doorkeeper_hub/configurator'
3
- require "doorkeeper_hub/saml"
4
3
  require "doorkeeper_hub/helpers"
5
4
  require 'doorkeeper_hub/engine' if defined?(::Rails) && Rails::VERSION::MAJOR > 4
6
5
 
@@ -13,18 +12,6 @@ module DoorkeeperHub
13
12
  yield config
14
13
  end
15
14
 
16
- def self.devise_routes_scope
17
- user_model.tableize.to_sym
18
- end
19
-
20
- def self.devise_scope
21
- user_model.underscore.to_sym
22
- end
23
-
24
- def self.user_model
25
- config.user_model
26
- end
27
-
28
15
  def self.token_name
29
16
  config.doorkeeper_token_name
30
17
  end
@@ -36,4 +23,22 @@ module DoorkeeperHub
36
23
  def self.client_mode?
37
24
  config.client_mode
38
25
  end
39
- end
26
+
27
+ class User
28
+ attr_accessor :company_tokens, :id
29
+
30
+ def initialize(attrs)
31
+ @company_tokens = attrs['company_tokens']
32
+ @id = attrs['id']
33
+ end
34
+
35
+ def to_key
36
+ id
37
+ end
38
+
39
+ def authenticatable_salt
40
+ ''
41
+ end
42
+ end
43
+
44
+ end
@@ -2,16 +2,20 @@ module DoorkeeperHub
2
2
  class Configurator
3
3
  attr_accessor :service_token
4
4
  attr_accessor :scope_model
5
- attr_accessor :user_model
6
5
  attr_accessor :doorkeeper_token_name
7
6
  attr_accessor :client_mode
7
+ attr_accessor :issuer
8
+ attr_accessor :callback_url
9
+ attr_accessor :idp_fingerprint
8
10
 
9
11
  def initialize
10
12
  self.service_token = ENV["SERVICE_TOKEN"]
11
- self.user_model = 'User'
12
13
  self.scope_model = 'Company'
13
14
  self.doorkeeper_token_name = :doorkeeper_token
14
15
  self.client_mode = false
16
+ self.issuer = 'doorkeeper-client'
17
+ self.callback_url = 'http://localhost:3000/auth/saml/callback'
18
+ self.idp_fingerprint = "3A:56:BE:36:48:69:91:CD:60:42:0D:15:5B:21:85:8E:E3:F5:7D:74"
15
19
  end
16
20
  end
17
21
  end
@@ -1,6 +1,10 @@
1
1
  require 'doorkeeper_hub/routes'
2
+ require 'warden'
3
+ require 'omniauth'
4
+ require 'omniauth-saml'
2
5
 
3
6
  module DoorkeeperHub
4
7
  class Engine < Rails::Engine
8
+ config.app_middleware.use Warden::Manager
5
9
  end
6
10
  end
@@ -7,15 +7,13 @@ module DoorkeeperHub
7
7
  end
8
8
 
9
9
  def authenticate_doorkeeper!
10
- if signed_in?(DoorkeeperHub.devise_scope)
10
+ if warden.authenticated?
11
11
  return if DoorkeeperHub.client_mode?
12
12
 
13
13
  redirect_to root_path_with_token if params[DoorkeeperHub.token_param].nil?
14
14
  else
15
- redirect_to omniauth_authorize_path(
16
- DoorkeeperHub.devise_scope, :saml,
17
- origin: request.fullpath
18
- )
15
+ # TODO add origin path to params
16
+ redirect_to '/auth/saml'
19
17
  end
20
18
  end
21
19
 
@@ -26,7 +24,7 @@ module DoorkeeperHub
26
24
  options
27
25
  end
28
26
 
29
- def after_sign_in_path_for(_)
27
+ def after_sign_in_path
30
28
  request.env['omniauth.origin'] || (DoorkeeperHub.client_mode? ? root_path : root_path_with_token)
31
29
  end
32
30
 
@@ -36,13 +34,29 @@ module DoorkeeperHub
36
34
 
37
35
  def params_or_default_token
38
36
  params[DoorkeeperHub.token_param] ||
39
- current_user.companies.first.send(DoorkeeperHub.config.doorkeeper_token_name)
37
+ companies.first.send(DoorkeeperHub.config.doorkeeper_token_name)
40
38
  end
41
39
 
42
40
  def company
43
41
  @company ||=
44
- current_user.companies.active.find_by(DoorkeeperHub.config.doorkeeper_token_name => params[DoorkeeperHub.token_param]) ||
42
+ companies.active.find_by(DoorkeeperHub.config.doorkeeper_token_name => params[DoorkeeperHub.token_param]) ||
45
43
  raise(ActionController::RoutingError.new('Not Found'))
44
+
45
+ end
46
+
47
+ def current_user
48
+ warden.user
49
+ end
50
+
51
+ def companies
52
+ @companies ||= DoorkeeperHub.config
53
+ .scope_model
54
+ .constantize
55
+ .where(DoorkeeperHub.config.doorkeeper_token_name => current_user.company_tokens)
56
+ end
57
+
58
+ def warden
59
+ request.env['warden']
46
60
  end
47
61
  end
48
62
  end
@@ -1,3 +1,3 @@
1
1
  module DoorkeeperHub
2
- VERSION = "0.2.9"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: doorkeeper_hub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jimmy Fan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-28 00:00:00.000000000 Z
11
+ date: 2018-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -39,19 +39,19 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: devise
42
+ name: warden
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '4.4'
47
+ version: '1.2'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '4.4'
54
+ version: '1.2'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: omniauth-saml
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -83,6 +83,8 @@ files:
83
83
  - app/controllers/doorkeeper_hub/omniauth_callbacks_controller.rb
84
84
  - bin/console
85
85
  - bin/setup
86
+ - config/initializers/omniauth.rb
87
+ - config/initializers/warden.rb
86
88
  - config/routes.rb
87
89
  - doorkeeper_hub.gemspec
88
90
  - lib/doorkeeper_hub.rb
@@ -90,7 +92,6 @@ files:
90
92
  - lib/doorkeeper_hub/engine.rb
91
93
  - lib/doorkeeper_hub/helpers.rb
92
94
  - lib/doorkeeper_hub/routes.rb
93
- - lib/doorkeeper_hub/saml.rb
94
95
  - lib/doorkeeper_hub/version.rb
95
96
  homepage: https://devhub.co
96
97
  licenses:
@@ -1,42 +0,0 @@
1
- require 'active_support/concern'
2
-
3
- module DoorkeeperHub
4
- module Saml
5
- extend ActiveSupport::Concern
6
-
7
- included do
8
- devise :omniauthable, omniauth_providers: %i[saml]
9
- end
10
-
11
- class_methods do
12
- def from_omniauth(auth)
13
- return if !DoorkeeperHub.client_mode? && scope_results(auth).empty?
14
-
15
- user = where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
16
- user.email = auth.info.email
17
- end
18
-
19
- unless DoorkeeperHub.client_mode?
20
- scope_results(auth).each do |result|
21
- user.users_companies.find_or_create_by(company: result)
22
- end
23
- end
24
-
25
- user
26
- end
27
-
28
- def scope_results(auth)
29
- @scope_results ||= DoorkeeperHub
30
- .config.scope_model
31
- .constantize
32
- .where(scope_query(auth))
33
- end
34
-
35
- def scope_query(auth)
36
- {
37
- DoorkeeperHub.token_name => auth.extra.raw_info.multi(DoorkeeperHub.token_name)
38
- }
39
- end
40
- end
41
- end
42
- end