oauth_im 0.9.2 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98d097fc63cfed0036ed0d71348d46641b870d78be7f13cdca990cc00793f4c9
4
- data.tar.gz: 8308890358478cfd66420278d8739fe718fcde66d6d12aa81588ccdc2bd8b54e
3
+ metadata.gz: 261d1ea644c2e1b82d42840d636d8f30e1ffe9dfb719a85c690440e192eec6a6
4
+ data.tar.gz: 1310fdeb14e9182818d4905c8c82a98e5d7c89e6033c448d58f013eaf3d1851d
5
5
  SHA512:
6
- metadata.gz: c089a1599692d321d4361d03d92f6ca79c65b11072230de43cc7225727a6bbfc633e242fe68209a4f60034e2127f1a2b350282f7c2331a6b0d1193c01068e381
7
- data.tar.gz: 23eca7c41af07bc4a72d47159f1e7c8834af7b4cfe2bcf9c8092face5f6e9c0a28d8135880a692e590a7f19e50edfbb6374c3345c453f9ac678982a0e269dca0
6
+ metadata.gz: f670809fb571009b1281e7a896ae0a6d733eff593974243d2982cd8f8b06ea5958ab9501e05e2bb5f313d0999e7dbfdd97e7f20e2e8ccc71f89f1569e080d404
7
+ data.tar.gz: 5a63f7ff9a3b0e9a7f7ddc9c2375c64c3be0536bac627c550d1da29b10be61a4ab301e107873b689bf1883ecb8494b87e003526c5ab1cd0dd2e5174b34972f46
data/README.md CHANGED
@@ -139,6 +139,9 @@ After many false starts, this repo includes two (seemingly functional) github wo
139
139
 
140
140
  ## Version History
141
141
 
142
+ ### 0.9.3
143
+ * added specs for AppContext initializer
144
+
142
145
  ### 0.9.2
143
146
  * Fix redirect url
144
147
  * No longer does it take user back to page they were on
@@ -5,17 +5,19 @@ module OauthIm
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- helper_method :authenticated?
9
- helper_method :email
8
+ helper_method :admin?, :authenticated?, :email
10
9
  end
11
10
 
12
11
  private
13
12
 
14
13
  delegate :email, :email_verified?,
15
- :user_privileges,
14
+ :user_is_sponsor?,
15
+ :admin?,
16
16
  to: :user_client,
17
17
  allow_nil: true
18
18
 
19
+ delegate :spec_user, :spec_user_is_sponsor?, to: AppContext
20
+
19
21
  def authenticated?
20
22
  AppContext.authenticated_for_specs? ||
21
23
  (AppContext.provide_authentication? && logged_in?)
@@ -32,10 +34,10 @@ module OauthIm
32
34
 
33
35
  def current_user
34
36
  @current_user ||=
35
- if user_jwt.present?
37
+ if Rails.env.test?
38
+ spec_user
39
+ elsif user_jwt.present?
36
40
  email if email_verified?
37
- elsif Rails.env.test?
38
- AppContext.spec_user
39
41
  end
40
42
  end
41
43
 
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fusionauth/fusionauth_client'
4
+
5
+ module OauthIm
6
+ class AdminClient < IdpClient
7
+ def search_for(term: '', email: '')
8
+ if email.present?
9
+ proxy_users_for client.retrieve_user_by_email(email)
10
+ elsif term.present?
11
+ proxy_users_for client.search_users_by_query({ search: { queryString: term } })
12
+ else
13
+ []
14
+ end
15
+ end
16
+
17
+ def proxy_user_for(user_id:)
18
+ response = client.retrieve_user(user_id).success_response
19
+ raise "No user for id #{user_id}" if response.blank?
20
+
21
+ ProxyUser.new response.user
22
+ end
23
+
24
+ private
25
+
26
+ def user_attrs_for(response)
27
+ response.success_response.then do |results|
28
+ results&.users.presence ||
29
+ [results&.user.presence].compact
30
+ end
31
+ end
32
+
33
+ def proxy_users_for(response)
34
+ user_attrs_for(response).map { |attrs| ProxyUser.new(attrs) }
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fusionauth/fusionauth_client'
4
+
5
+ module OauthIm
6
+ module HasRegistrationData
7
+ delegate :email, to: :attrs
8
+ delegate :role, :grade_level, :school, :district, :state,
9
+ to: :registration_data
10
+ delegate :name, :id,
11
+ to: :role, prefix: true
12
+ delegate :name, :id,
13
+ to: :grade_level, prefix: true
14
+ delegate :name, :id,
15
+ to: :school, prefix: true
16
+ delegate :name, :id,
17
+ to: :district, prefix: true
18
+ delegate :name, :id,
19
+ to: :state, prefix: true
20
+
21
+ def registration_data
22
+ @registration_data ||= attrs[:registrations]&.first&.data || {}
23
+ end
24
+
25
+ def sponsor?
26
+ registration_data[:sponsor].eql? 'true'
27
+ end
28
+
29
+ def user_is_sponsor?
30
+ sponsor?
31
+ end
32
+
33
+ def first_name
34
+ attrs.firstName
35
+ end
36
+
37
+ def last_name
38
+ attrs.lastName
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OauthIm
4
+ class ProxyUser < IdpClient
5
+ include HasRegistrationData
6
+
7
+ attr_reader :attrs
8
+
9
+ delegate :to_h, to: :attrs
10
+
11
+ def self.for(user_id:)
12
+ AdminClient.new.proxy_user_for user_id: user_id
13
+ end
14
+
15
+ def initialize(attrs)
16
+ @attrs = attrs
17
+ super()
18
+ end
19
+
20
+ def user_id
21
+ @user_id ||= attrs[:id]
22
+ end
23
+
24
+ def send_reset_password_email
25
+ client.forgot_password loginId: user_id
26
+ end
27
+
28
+ def deactivate_user
29
+ client.deactivate_user user_id
30
+ end
31
+ end
32
+ end
@@ -4,6 +4,8 @@ require 'fusionauth/fusionauth_client'
4
4
 
5
5
  module OauthIm
6
6
  class UserClient < IdpClient
7
+ include HasRegistrationData
8
+
7
9
  attr_reader :user_jwt
8
10
 
9
11
  def initialize(user_jwt:)
@@ -19,29 +21,20 @@ module OauthIm
19
21
  email.present?
20
22
  end
21
23
 
22
- def user_privileges
23
- @user_privileges ||= data[:privileges] || []
24
+ def admin?
25
+ jwt_token[:roles].include? 'admin'
24
26
  end
25
27
 
26
28
  private
27
29
 
28
- def user_data
29
- @user_data ||= user[:registrations]&.first || {}
30
- end
31
-
32
- def data
33
- @data ||= user_data[:data] || {}
30
+ def attrs
31
+ @attrs ||= success_response[:user] || {}
34
32
  end
35
33
 
36
34
  def success_response
37
35
  @success_response ||= client_response&.success_response || {}
38
36
  end
39
37
 
40
- def user
41
- @user ||= success_response[:user] || {}
42
- end
43
-
44
- # https://www.rubydoc.info/gems/fusionauth_client/1.32.1/FusionAuth/FusionAuthClient#retrieve_user-instance_method
45
38
  def client_response
46
39
  @client_response ||= client.retrieve_user user_id
47
40
  end
@@ -1,36 +1,57 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AppContext
4
- def self.provide_authentication?
4
+ module_function
5
+
6
+ TEST_ENV_ERROR_MESSAGE = 'Use only in test environment!'
7
+
8
+ def override_for_specs?
9
+ Rails.env.test? && provide_authentication?
10
+ end
11
+
12
+ def provide_authentication?
5
13
  true
6
14
  end
7
15
 
8
- def self.spec_user
16
+ def provide_auth_routes?
17
+ provide_authentication?
18
+ end
19
+
20
+ def spec_user
9
21
  @spec_user if override_for_specs?
10
22
  end
11
23
 
12
- def self.authenticated_for_specs?
13
- @authenticated_for_specs if override_for_specs?
24
+ def spec_user_is_sponsor?
25
+ @spec_user_is_sponsor && override_for_specs?
14
26
  end
15
27
 
16
- def self.spec_user_data
17
- override_for_specs? ? (@spec_user_data.presence || {}) : {}
28
+ def authenticated_for_specs?
29
+ @authenticated_for_specs && override_for_specs?
18
30
  end
19
31
 
20
- def self.override_for_specs?
21
- Rails.env.test? && provide_authentication?
32
+ def authenticate_for_specs?
33
+ raise TEST_ENV_ERROR_MESSAGE unless Rails.env.test?
34
+
35
+ provide_authentication?
22
36
  end
23
37
 
24
- def self.authenticate_for_specs(spec_user: nil, spec_user_data: {})
25
- return unless provide_authentication?
26
- raise 'Use only in test environment!!' unless Rails.env.test?
38
+ def authenticate_for_specs(spec_user: nil, sponsor: false)
39
+ return unless authenticate_for_specs?
27
40
 
28
- @authenticated_for_specs = true
29
- @spec_user = spec_user
30
- @spec_user_data = spec_user_data
41
+ initialize_spec_user spec_user: spec_user, sponsor: sponsor
31
42
  yield
32
- @privileged_for_specs = false
33
- @spec_user_data = {}
43
+ reset_spec_user
44
+ end
45
+
46
+ def initialize_spec_user(spec_user:, sponsor:)
47
+ @spec_user = spec_user
48
+ @spec_user_is_sponsor = sponsor
49
+ @authenticated_for_specs = true
50
+ end
51
+
52
+ def reset_spec_user
34
53
  @authenticated_for_specs = false
54
+ @spec_user = nil
55
+ @spec_user_is_sponsor = false
35
56
  end
36
57
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OauthIm
4
- VERSION = '0.9.2'
4
+ VERSION = '0.10.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oauth_im
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Connally
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-18 00:00:00.000000000 Z
11
+ date: 2022-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fusionauth_client
@@ -139,8 +139,11 @@ files:
139
139
  - app/controllers/oauth_im/application_controller.rb
140
140
  - app/controllers/oauth_im/client_controller.rb
141
141
  - app/helpers/oauth_im/application_helper.rb
142
+ - app/services/oauth_im/admin_client.rb
142
143
  - app/services/oauth_im/client.rb
144
+ - app/services/oauth_im/has_registration_data.rb
143
145
  - app/services/oauth_im/idp_client.rb
146
+ - app/services/oauth_im/proxy_user.rb
144
147
  - app/services/oauth_im/registration_client.rb
145
148
  - app/services/oauth_im/request_client.rb
146
149
  - app/services/oauth_im/token_decoder.rb