devise_g5_authenticatable 0.3.0 → 1.0.0.pre.1

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 (77) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rspec +1 -0
  4. data/.ruby-version +1 -1
  5. data/.travis.yml +29 -7
  6. data/Appraisals +21 -0
  7. data/CHANGELOG.md +24 -0
  8. data/Gemfile +11 -7
  9. data/README.md +6 -6
  10. data/Rakefile +6 -5
  11. data/app/controllers/devise_g5_authenticatable/registrations_controller.rb +3 -0
  12. data/app/controllers/devise_g5_authenticatable/sessions_controller.rb +9 -5
  13. data/config/initializers/devise_g5_authenticatable.rb +2 -0
  14. data/devise_g5_authenticatable.gemspec +6 -5
  15. data/gemfiles/rails_4.1.gemfile +26 -0
  16. data/gemfiles/rails_4.2.gemfile +26 -0
  17. data/gemfiles/rails_5.0.gemfile +26 -0
  18. data/gemfiles/rails_5.1.gemfile +26 -0
  19. data/lib/devise_g5_authenticatable/controllers/helpers.rb +5 -0
  20. data/lib/devise_g5_authenticatable/controllers/url_helpers.rb +3 -0
  21. data/lib/devise_g5_authenticatable/engine.rb +4 -1
  22. data/lib/devise_g5_authenticatable/g5/auth_password_validator.rb +6 -1
  23. data/lib/devise_g5_authenticatable/g5/auth_user_creator.rb +16 -15
  24. data/lib/devise_g5_authenticatable/g5/auth_user_updater.rb +11 -5
  25. data/lib/devise_g5_authenticatable/g5/user_exporter.rb +11 -6
  26. data/lib/devise_g5_authenticatable/g5.rb +2 -0
  27. data/lib/devise_g5_authenticatable/hooks/g5_authenticatable.rb +8 -3
  28. data/lib/devise_g5_authenticatable/models/g5_authenticatable.rb +38 -26
  29. data/lib/devise_g5_authenticatable/models/protected_attributes.rb +11 -2
  30. data/lib/devise_g5_authenticatable/omniauth.rb +8 -2
  31. data/lib/devise_g5_authenticatable/routes.rb +48 -35
  32. data/lib/devise_g5_authenticatable/version.rb +3 -1
  33. data/lib/devise_g5_authenticatable.rb +4 -1
  34. data/spec/controllers/helpers_spec.rb +54 -49
  35. data/spec/controllers/sessions_controller_spec.rb +67 -39
  36. data/spec/controllers/url_helpers_spec.rb +78 -78
  37. data/spec/dummy/app/views/{anonymous → devise}/new.html.erb +0 -0
  38. data/spec/dummy/config/environments/test.rb +20 -4
  39. data/spec/dummy/config/initializers/devise.rb +5 -1
  40. data/spec/dummy/config/initializers/rails_compatibility.rb +10 -0
  41. data/spec/dummy/db/migrate/20131230235849_devise_create_users.rb +3 -1
  42. data/spec/dummy/db/migrate/20140102213131_drop_database_authenticatable.rb +3 -1
  43. data/spec/dummy/db/migrate/20140103032308_drop_recoverable.rb +3 -1
  44. data/spec/dummy/db/migrate/20140103042329_drop_rememberable.rb +3 -1
  45. data/spec/dummy/db/migrate/20140103174810_add_omniauth_columns_to_users.rb +3 -1
  46. data/spec/dummy/db/migrate/20140103191601_add_email_back_to_user.rb +3 -1
  47. data/spec/dummy/db/migrate/20140113202948_devise_create_admins.rb +3 -1
  48. data/spec/dummy/db/migrate/20140113233821_add_provider_and_uid_to_admins.rb +3 -1
  49. data/spec/dummy/db/schema.rb +29 -29
  50. data/spec/factories/admin.rb +2 -0
  51. data/spec/factories/user.rb +2 -0
  52. data/spec/features/edit_registration_spec.rb +22 -13
  53. data/spec/features/registration_spec.rb +13 -8
  54. data/spec/features/sign_in_spec.rb +4 -2
  55. data/spec/features/sign_out_spec.rb +4 -2
  56. data/spec/features/token_validation_spec.rb +24 -14
  57. data/spec/g5/auth_password_validator_spec.rb +28 -15
  58. data/spec/g5/auth_user_creator_spec.rb +29 -22
  59. data/spec/g5/auth_user_updater_spec.rb +23 -16
  60. data/spec/g5/user_exporter_spec.rb +36 -31
  61. data/spec/models/g5_authenticatable_spec.rb +78 -38
  62. data/spec/models/protected_attributes_spec.rb +24 -19
  63. data/spec/rails_helper.rb +46 -0
  64. data/spec/routing/registrations_routing_spec.rb +43 -27
  65. data/spec/routing/sessions_routing_spec.rb +46 -29
  66. data/spec/spec_helper.rb +93 -27
  67. data/spec/support/controller_test_helpers.rb +15 -0
  68. data/spec/support/devise.rb +9 -1
  69. data/spec/support/shared_contexts/custom_router.rb +16 -0
  70. data/spec/support/shared_contexts/oauth_error.rb +4 -2
  71. data/spec/support/shared_contexts/rake.rb +10 -4
  72. data/spec/support/shared_examples/registration_error.rb +3 -1
  73. data/spec/support/{user_feature_methods.rb → user_omniauth_methods.rb} +9 -5
  74. data/spec/tasks/export_users_spec.rb +5 -3
  75. metadata +30 -26
  76. data/circle.yml +0 -4
  77. data/spec/support/omniauth.rb +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 77d88c2b75b20608b04708cd0ce1d48f90a0c6ee
4
- data.tar.gz: 470beef996c9d67de0dee57eaf7efaf5e009034a
3
+ metadata.gz: a11e733f9faf284c0658f3db8ddc5274801adc24
4
+ data.tar.gz: 1f581b95a86073de698cf08447006fd64799b05d
5
5
  SHA512:
6
- metadata.gz: 58013eb741a22fe0bf9bd388aee212596b4257a2a73aca75870c60f248d171c92afb37b595c9530eefcb4f6dfb4e5575862f3919e8bb929b4c525027aa808e32
7
- data.tar.gz: 90df8abd423ddff26f7cf60bd7cdfc4eb0957ac07981beb96fa6ef37f505488c87ac6f945ad4bd69af9c0dda73403e0b9ea5036767121a906c2a90b7aca45329
6
+ metadata.gz: 026e2a728bf15e6903536c7c81f4470a3fe224a2f357b64b496b1dd3776b73d5adcec266275eced538552913430259b46c3f41ebc2ab2d8dd726c1bd67645e84
7
+ data.tar.gz: 47e3a3d42727b2333b2b0260baee1bfeab0c02e6a8c83b3a653636f5f7657ad9cd6d9b8cb6e97e5f3339e8d5af462dd54756c4b574d05b10a413c32a4aeff0fa
data/.gitignore CHANGED
@@ -5,6 +5,7 @@
5
5
  .config
6
6
  coverage
7
7
  Gemfile.lock
8
+ gemfiles/*.gemfile.lock
8
9
  InstalledFiles
9
10
  lib/bundler/man
10
11
  pkg
data/.rspec CHANGED
@@ -1,2 +1,3 @@
1
1
  --color
2
2
  --format progress
3
+ --require spec_helper
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.1.2
1
+ 2.3.4
data/.travis.yml CHANGED
@@ -1,13 +1,35 @@
1
1
  language: ruby
2
+ cache:
3
+ bundler: true
2
4
  rvm:
3
- - 2.0.0
4
- - 2.1
5
- - 2.2
5
+ - 2.2.7
6
+ - 2.3.4
7
+ - 2.4.1
8
+ gemfile:
9
+ - gemfiles/rails_4.1.gemfile
10
+ - gemfiles/rails_4.2.gemfile
11
+ - gemfiles/rails_5.0.gemfile
12
+ - gemfiles/rails_5.1.gemfile
13
+ matrix:
14
+ exclude:
15
+ - rvm: 2.4.1
16
+ gemfile: gemfiles/rails_4.1.gemfile
17
+ allow_failures:
18
+ - rvm: 2.4.1
19
+ dist: trusty
20
+ sudo: false
21
+ cache:
22
+ bundler: true
6
23
  before_install:
7
24
  - gem update bundler
8
- script:
9
- - RAILS_ENV=test bundle exec rake app:db:setup
10
- - bundle exec rspec spec
11
25
  before_script:
12
26
  - cp spec/dummy/config/database.yml.ci spec/dummy/config/database.yml
13
- - psql -c 'create database g5_authenticatable_test;' -U postgres
27
+ - RAILS_ENV=test bundle exec rake app:db:create app:db:migrate
28
+ script:
29
+ - bundle exec rspec
30
+ after_script:
31
+ - bundle exec codeclimate-test-reporter
32
+ addons:
33
+ code_climate:
34
+ repo_token:
35
+ secure: "jbxU8cHiS9V0vEndXRhMmteIYSyy2oq/V6S0HEqezA5nrAAnOPcLHaVhEM2Ji81G5V/k/Wda3xJ+4mXG2VU71RWCpMkWuB4M/KzAozmvxUxM7YwSfZvdYDL4AsWO+2Nvz7jDLiSTYYLigSAF5tQiD8Q6/KywcBJsXTuC5b9PTgg="
data/Appraisals ADDED
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ appraise 'rails-4.1' do
4
+ gem 'protected_attributes'
5
+ gem 'rails', '~> 4.1.16'
6
+ end
7
+
8
+ appraise 'rails-4.2' do
9
+ gem 'protected_attributes'
10
+ gem 'rails', '~> 4.2.8'
11
+ end
12
+
13
+ appraise 'rails-5.0' do
14
+ gem 'rails', '~> 5.0.3'
15
+ gem 'rails-controller-testing', group: :test
16
+ end
17
+
18
+ appraise 'rails-5.1' do
19
+ gem 'rails', '~> 5.1.1'
20
+ gem 'rails-controller-testing', group: :test
21
+ end
data/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ ## v1.0.0.pre.1 (TBD)
2
+
3
+ * **Backwards incompatible changes**
4
+ * Dropped support for rails < 4.1
5
+ * Dropped support for ruby < 2.2 (older versions *may* continue to work for
6
+ now, but there are no guarantees)
7
+ * Dropped support for devise < 4.3. The breaking change most likely to affect
8
+ users of this gem is the removal of omniauth route helpers with a wildcard
9
+ `:provider` parameter. However, the other forms of omniauth route helpers
10
+ still work. For example, `user_omniauth_authorize_path(:g5)` is no longer
11
+ valid, but you can still use `user_g5_omniauth_authorize_path` (preferred)
12
+ or `omniauth_authorize_path(:user, :g5)`
13
+ * Enhancements
14
+ * Added support for ruby 2.3 and 2.4
15
+ * Added support for rails 5.0 and 5.1
16
+ * Bug fixes
17
+ * The devise upgrade picked up a number of bug fixes, most notably the
18
+ `FailureApp` nil `script_name` issue introduced in devise 3.5.2, which broke
19
+ route generation within mounted engines (see
20
+ [plataformatec/devise#3705](https://github.com/plataformatec/devise/issues/3705))
21
+
1
22
  ## v0.3.0 (2016-11-03)
2
23
 
3
24
  * Exposes callbacks for more fine-grained control over mapping auth user
@@ -5,12 +26,15 @@
5
26
  ([#25](https://github.com/G5/devise_g5_authenticatable/pull/25))
6
27
 
7
28
  ## v0.2.4 (2015-12-09)
29
+
8
30
  * Same as v0.2.4.beta but not is a stable version!
9
31
 
10
32
  ## v0.2.4.beta (2015-12-03)
33
+
11
34
  * Enforces uniqueness of email address in when looking for an email without UID
12
35
 
13
36
  ## v0.2.3 (2015-11-30)
37
+
14
38
  * Pins version of devise to 3.5.1 due - https://github.com/plataformatec/devise/issues/3705
15
39
  * Pins version of omniauth-g5 to v0.3.1 due - https://github.com/G5/omniauth-g5/pull/10
16
40
 
data/Gemfile CHANGED
@@ -1,25 +1,29 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in devise_g5_authenticatable.gemspec
4
6
  gemspec
5
7
 
6
8
  # Dependencies for the dummy test app
7
- gem 'rails', '4.1.4'
8
9
  gem 'jquery-rails'
9
10
  gem 'pg'
10
- gem 'protected_attributes'
11
+
12
+ # See the Appraisals file for all supported rails versions
13
+ gem 'rails', '~> 5.1.1'
11
14
 
12
15
  group :test, :development do
13
- gem 'rspec-rails', '~> 2.14'
14
- gem 'rspec-activemodel-mocks'
16
+ gem 'appraisal'
15
17
  gem 'pry-byebug'
18
+ gem 'rspec-rails', '~> 3.6'
16
19
  end
17
20
 
18
21
  group :test do
19
22
  gem 'capybara'
23
+ gem 'codeclimate-test-reporter', '~> 1.0'
24
+ gem 'factory_girl_rails', '~> 4.8', require: false
25
+ gem 'rspec-activemodel-mocks'
26
+ gem 'shoulda-matchers', '~> 3.1'
20
27
  gem 'simplecov'
21
- gem 'codeclimate-test-reporter'
22
28
  gem 'webmock'
23
- gem 'shoulda-matchers', '~> 2.6'
24
- gem 'factory_girl_rails', '~> 4.3', require: false
25
29
  end
data/README.md CHANGED
@@ -10,13 +10,13 @@ G5 users.
10
10
 
11
11
  ## Current Version
12
12
 
13
- 0.3.0
13
+ 1.0.0.pre.1
14
14
 
15
15
  ## Requirements
16
16
 
17
- * [Ruby](https://github.com/ruby/ruby) >= 2.0.0
18
- * [Rails](https://github.com/rails/rails) >= 3.2
19
- * [Devise](https://github.com/plataformatec/devise) ~> 3.5
17
+ * [Ruby](https://github.com/ruby/ruby) >= 2.2
18
+ * [Rails](https://github.com/rails/rails) >= 4.1
19
+ * [Devise](https://github.com/plataformatec/devise) ~> 4.3
20
20
 
21
21
  ## Installation
22
22
 
@@ -90,10 +90,10 @@ end
90
90
  ### Controller filters and helpers
91
91
 
92
92
  To require authentication for a controller, use one of devise's generated
93
- before_filters. For example:
93
+ before_actions. For example:
94
94
 
95
95
  ```ruby
96
- before_filter :authenticate_user!
96
+ before_action :authenticate_user!
97
97
  ```
98
98
 
99
99
  All of [devise's controller helpers](https://github.com/plataformatec/devise#controller-filters-and-helpers)
data/Rakefile CHANGED
@@ -1,11 +1,12 @@
1
- #!/usr/bin/env rake
1
+ # frozen_string_literal: true
2
+
2
3
  begin
3
4
  require 'bundler/setup'
4
5
  rescue LoadError
5
6
  puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
7
  end
7
8
 
8
- APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
9
+ APP_RAKEFILE = File.expand_path('../spec/dummy/Rakefile', __FILE__)
9
10
  load 'rails/tasks/engine.rake'
10
11
 
11
12
  Bundler::GemHelper.install_tasks
@@ -15,6 +16,6 @@ Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each { |f| load f }
15
16
  require 'rspec/core'
16
17
  require 'rspec/core/rake_task'
17
18
 
18
- desc "Run all specs in spec directory (excluding plugin specs)"
19
- RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
20
- task :default => :spec
19
+ desc 'Run all specs in spec directory (excluding plugin specs)'
20
+ RSpec::Core::RakeTask.new(spec: 'app:db:test:prepare')
21
+ task default: :spec
@@ -1,4 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeviseG5Authenticatable
4
+ # Registrations controller with custom error handling
2
5
  class RegistrationsController < Devise::RegistrationsController
3
6
  rescue_from ActiveRecord::RecordNotSaved, with: :handle_resource_error
4
7
  end
@@ -1,13 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeviseG5Authenticatable
4
+ # Custom sessions controller to require sign-in through the G5 auth server
2
5
  class SessionsController < Devise::OmniauthCallbacksController
3
- prepend_before_filter :require_no_authentication, only: [:new, :create]
6
+ prepend_before_action :require_no_authentication, only: %i[new create]
4
7
 
5
8
  def new
6
9
  redirect_to g5_authorize_path(resource_name)
7
10
  end
8
11
 
9
12
  def omniauth_passthru
10
- render status: 404, text: 'Authentication passthru.'
13
+ render status: 404, plain: 'Authentication passthru.'
11
14
  end
12
15
 
13
16
  def create
@@ -22,6 +25,7 @@ module DeviseG5Authenticatable
22
25
  end
23
26
 
24
27
  protected
28
+
25
29
  def auth_data
26
30
  @auth_data ||= request.env['omniauth.auth']
27
31
  session['omniauth.auth'] = @auth_data
@@ -42,8 +46,8 @@ module DeviseG5Authenticatable
42
46
  end
43
47
 
44
48
  def remote_sign_out
45
- redirect_url = URI.join(request.base_url,
46
- after_sign_out_path_for(resource_name))
49
+ redirect_url = URI.join(request.base_url,
50
+ after_sign_out_path_for(resource_name))
47
51
  redirect_to auth_client.sign_out_url(redirect_url.to_s)
48
52
  end
49
53
 
@@ -51,7 +55,7 @@ module DeviseG5Authenticatable
51
55
  G5AuthenticationClient::Client.new
52
56
  end
53
57
 
54
- def after_omniauth_failure_path_for(scope)
58
+ def after_omniauth_failure_path_for(_scope)
55
59
  main_app.root_path
56
60
  end
57
61
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  unless defined?(ActionController::StrongParameters)
2
4
  require 'devise_g5_authenticatable/models/protected_attributes'
3
5
  end
@@ -1,4 +1,6 @@
1
1
  # coding: utf-8
2
+ # frozen_string_literal: true
3
+
2
4
  lib = File.expand_path('../lib', __FILE__)
3
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
6
  require 'devise_g5_authenticatable/version'
@@ -6,6 +8,7 @@ require 'devise_g5_authenticatable/version'
6
8
  Gem::Specification.new do |spec|
7
9
  spec.name = 'devise_g5_authenticatable'
8
10
  spec.version = DeviseG5Authenticatable::VERSION
11
+ spec.platform = Gem::Platform::RUBY
9
12
  spec.authors = ['Maeve Revels']
10
13
  spec.email = ['maeve.revels@getg5.com']
11
14
  spec.description = 'Devise extension for the G5 Auth service'
@@ -13,15 +16,13 @@ Gem::Specification.new do |spec|
13
16
  spec.homepage = 'https://github.com/G5/devise_g5_authenticatable'
14
17
  spec.license = 'MIT'
15
18
 
16
- spec.files = `git ls-files`.split($/)
19
+ spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
17
20
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
21
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
22
  spec.require_paths = ['lib']
20
23
 
21
- # Pinned to version 3.5.1 due https://github.com/plataformatec/devise/issues/3705
22
- # "`FailureApp`s `script_name: nil` breaks route generation within mounted engines #3705"
23
- spec.add_dependency 'devise', '= 3.5.1'
24
- spec.add_dependency 'g5_authentication_client', '~> 0.5', '>= 0.5.4'
24
+ spec.add_dependency 'devise', '~> 4.3'
25
+ spec.add_dependency 'g5_authentication_client', '1.0.0.pre.4'
25
26
 
26
27
  # Pinned to version 0.3.1 due https://github.com/G5/omniauth-g5/pull/10
27
28
  # Omniauth-auth2 removed 'callback_url' which broke our auth workflow
@@ -0,0 +1,26 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "jquery-rails"
6
+ gem "pg"
7
+ gem "rails", "~> 4.1.16"
8
+ gem "protected_attributes"
9
+
10
+ group :test, :development do
11
+ gem "appraisal"
12
+ gem "pry-byebug"
13
+ gem "rspec-rails", "~> 3.6"
14
+ end
15
+
16
+ group :test do
17
+ gem "capybara"
18
+ gem "codeclimate-test-reporter", "~> 1.0"
19
+ gem "factory_girl_rails", "~> 4.8", require: false
20
+ gem "rspec-activemodel-mocks"
21
+ gem "shoulda-matchers", "~> 3.1"
22
+ gem "simplecov"
23
+ gem "webmock"
24
+ end
25
+
26
+ gemspec path: "../"
@@ -0,0 +1,26 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "jquery-rails"
6
+ gem "pg"
7
+ gem "rails", "~> 4.2.8"
8
+ gem "protected_attributes"
9
+
10
+ group :test, :development do
11
+ gem "appraisal"
12
+ gem "pry-byebug"
13
+ gem "rspec-rails", "~> 3.6"
14
+ end
15
+
16
+ group :test do
17
+ gem "capybara"
18
+ gem "codeclimate-test-reporter", "~> 1.0"
19
+ gem "factory_girl_rails", "~> 4.8", require: false
20
+ gem "rspec-activemodel-mocks"
21
+ gem "shoulda-matchers", "~> 3.1"
22
+ gem "simplecov"
23
+ gem "webmock"
24
+ end
25
+
26
+ gemspec path: "../"
@@ -0,0 +1,26 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "jquery-rails"
6
+ gem "pg"
7
+ gem "rails", "~> 5.0.3"
8
+ gem "rails-controller-testing", group: :test
9
+
10
+ group :test, :development do
11
+ gem "appraisal"
12
+ gem "pry-byebug"
13
+ gem "rspec-rails", "~> 3.6"
14
+ end
15
+
16
+ group :test do
17
+ gem "capybara"
18
+ gem "codeclimate-test-reporter", "~> 1.0"
19
+ gem "factory_girl_rails", "~> 4.8", require: false
20
+ gem "rspec-activemodel-mocks"
21
+ gem "shoulda-matchers", "~> 3.1"
22
+ gem "simplecov"
23
+ gem "webmock"
24
+ end
25
+
26
+ gemspec path: "../"
@@ -0,0 +1,26 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "jquery-rails"
6
+ gem "pg"
7
+ gem "rails", "~> 5.1.1"
8
+ gem "rails-controller-testing", group: :test
9
+
10
+ group :test, :development do
11
+ gem "appraisal"
12
+ gem "pry-byebug"
13
+ gem "rspec-rails", "~> 3.6"
14
+ end
15
+
16
+ group :test do
17
+ gem "capybara"
18
+ gem "codeclimate-test-reporter", "~> 1.0"
19
+ gem "factory_girl_rails", "~> 4.8", require: false
20
+ gem "rspec-activemodel-mocks"
21
+ gem "shoulda-matchers", "~> 3.1"
22
+ gem "simplecov"
23
+ gem "webmock"
24
+ end
25
+
26
+ gemspec path: "../"
@@ -1,4 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeviseG5Authenticatable
4
+ # Utility helper methods to mixin to controllers
2
5
  module Helpers
3
6
  extend ActiveSupport::Concern
4
7
 
@@ -23,6 +26,8 @@ module DeviseG5Authenticatable
23
26
  respond_with(resource)
24
27
  end
25
28
 
29
+ # Dynamically generate helper methods with devise resource name
30
+ # e.g. `set_updated_by_user` or `set_updated_by_admin`
26
31
  module ClassMethods
27
32
  def define_helpers(mapping)
28
33
  class_eval <<-METHODS, __FILE__, __LINE__ + 1
@@ -1,4 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeviseG5Authenticatable
4
+ # Routing helpers for G5 omniuath routes
2
5
  module UrlHelpers
3
6
  def g5_authorize_path(resource_or_scope, *args)
4
7
  scope = Devise::Mapping.find_scope!(resource_or_scope)
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeviseG5Authenticatable
4
+ # The main class for initializing the rails engine
2
5
  class Engine < Rails::Engine
3
- initializer "devise_g5_authenticatable.helpers" do
6
+ initializer 'devise_g5_authenticatable.helpers' do
4
7
  Devise.include_helpers(DeviseG5Authenticatable)
5
8
  end
6
9
 
@@ -1,7 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'g5_authentication_client'
2
4
 
3
5
  module Devise
4
6
  module G5
7
+ # Validate a user's G5 Auth credentials
5
8
  class AuthPasswordValidator
6
9
  attr_reader :model
7
10
 
@@ -22,8 +25,10 @@ module Devise
22
25
  end
23
26
 
24
27
  private
28
+
25
29
  def auth_client(password)
26
- G5AuthenticationClient::Client.new(username: model.email, password: password)
30
+ G5AuthenticationClient::Client.new(username: model.email,
31
+ password: password)
27
32
  end
28
33
  end
29
34
  end
@@ -1,7 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'g5_authentication_client'
2
4
 
3
5
  module Devise
4
6
  module G5
7
+ # Create a new user account on the G5 Auth server
5
8
  class AuthUserCreator
6
9
  attr_reader :model
7
10
 
@@ -14,20 +17,16 @@ module Devise
14
17
  end
15
18
 
16
19
  private
20
+
17
21
  def create_auth_user
18
- set_auth_attributes(auth_user)
22
+ update_auth_attributes(auth_user)
19
23
  end
20
24
 
21
25
  def auth_user
22
- begin
23
- auth_client.create_user(auth_user_args)
24
- rescue StandardError => e
25
- if e.message =~ /Email has already been taken/
26
- existing_auth_user
27
- else
28
- raise e
29
- end
30
- end
26
+ auth_client.create_user(auth_user_args)
27
+ rescue StandardError => error
28
+ raise error unless error.message =~ /Email has already been taken/
29
+ existing_auth_user
31
30
  end
32
31
 
33
32
  def existing_auth_user
@@ -43,7 +42,9 @@ module Devise
43
42
  end
44
43
 
45
44
  def auth_client
46
- G5AuthenticationClient::Client.new(access_token: updated_by.g5_access_token)
45
+ G5AuthenticationClient::Client.new(
46
+ access_token: updated_by.g5_access_token
47
+ )
47
48
  end
48
49
 
49
50
  def updated_by
@@ -51,12 +52,12 @@ module Devise
51
52
  end
52
53
 
53
54
  def auth_user_args
54
- {email: model.email,
55
- password: model.password,
56
- password_confirmation: model.password_confirmation}
55
+ { email: model.email,
56
+ password: model.password,
57
+ password_confirmation: model.password_confirmation }
57
58
  end
58
59
 
59
- def set_auth_attributes(auth_user)
60
+ def update_auth_attributes(auth_user)
60
61
  model.provider = 'g5'
61
62
  model.uid = auth_user.id
62
63
  model.clean_up_passwords
@@ -1,7 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'g5_authentication_client'
2
4
 
3
5
  module Devise
4
6
  module G5
7
+ # Update user data on G5 Auth server
5
8
  class AuthUserUpdater
6
9
  attr_reader :model
7
10
 
@@ -14,6 +17,7 @@ module Devise
14
17
  end
15
18
 
16
19
  private
20
+
17
21
  def update_auth_user
18
22
  auth_user = auth_client.update_user(auth_user_args)
19
23
  model.clean_up_passwords
@@ -25,7 +29,9 @@ module Devise
25
29
  end
26
30
 
27
31
  def auth_client
28
- G5AuthenticationClient::Client.new(access_token: updated_by.g5_access_token)
32
+ G5AuthenticationClient::Client.new(
33
+ access_token: updated_by.g5_access_token
34
+ )
29
35
  end
30
36
 
31
37
  def updated_by
@@ -33,10 +39,10 @@ module Devise
33
39
  end
34
40
 
35
41
  def auth_user_args
36
- {id: model.uid,
37
- email: model.email,
38
- password: model.password,
39
- password_confirmation: model.password_confirmation}
42
+ { id: model.uid,
43
+ email: model.email,
44
+ password: model.password,
45
+ password_confirmation: model.password_confirmation }
40
46
  end
41
47
  end
42
48
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'g5_authentication_client'
2
4
 
3
5
  module G5
@@ -11,7 +13,7 @@ module G5
11
13
  # @option options [String] :redirect_uri the redirect URI registered with G5
12
14
  # @option options [String] :endpoint the endpoint for the G5 Auth server
13
15
  # @option options [String] :authorization_code the G5 authorization code to obtain an access token
14
- def initialize(options={})
16
+ def initialize(options = {})
15
17
  @client_id = options[:client_id]
16
18
  @client_secret = options[:client_secret]
17
19
  @redirect_uri = options[:redirect_uri]
@@ -40,6 +42,7 @@ module G5
40
42
  end
41
43
 
42
44
  private
45
+
43
46
  def update_local_user(local_user, auth_user)
44
47
  local_user.uid = auth_user.id
45
48
  local_user.provider = 'g5'
@@ -51,11 +54,13 @@ module G5
51
54
  end
52
55
 
53
56
  def auth_client
54
- @oauth_client ||= G5AuthenticationClient::Client.new(client_id: @client_id,
55
- client_secret: @client_secret,
56
- redirect_uri: @redirect_uri,
57
- endpoint: @endpoint,
58
- authorization_code: @authorization_code)
57
+ @oauth_client ||= G5AuthenticationClient::Client.new(
58
+ client_id: @client_id,
59
+ client_secret: @client_secret,
60
+ redirect_uri: @redirect_uri,
61
+ endpoint: @endpoint,
62
+ authorization_code: @authorization_code
63
+ )
59
64
  end
60
65
  end
61
66
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'devise_g5_authenticatable/g5/auth_user_creator'
2
4
  require 'devise_g5_authenticatable/g5/auth_user_updater'
3
5
  require 'devise_g5_authenticatable/g5/auth_password_validator'