devise_g5_authenticatable 0.3.0 → 1.0.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
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'