devise-remote-user 0.0.1 → 0.1.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
  SHA1:
3
- metadata.gz: 3a9bc050013fedd473e25664f0dfb2cd08ffa238
4
- data.tar.gz: 2bbb78ac903122fda30d48d4aca37f3fbda0a884
3
+ metadata.gz: 2ba593036cec8c5f0fc38ba79eb8e2040897dd7e
4
+ data.tar.gz: cf65b35d2b96bd7ea3bf3bc38d1a22bce3b0684c
5
5
  SHA512:
6
- metadata.gz: 3faabf423507e954037323361475d52bd764ce49d9d36eb456289aaa01d537692aa3133ac3756b26da9a95f12653e0bfbe081c4d067a378bc079a71b3983c059
7
- data.tar.gz: 9bc972ecd74d21732ebf255fc06facaa58ed46afd3796f2ecb541bec53c3eaecb917fadaba3b50504549397605109b70e13df4436eaad42526726fe8dffe4c54
6
+ metadata.gz: 0cf34573776063dc5c328d5122e8d5f9585d4a03fa73fa8655b4e90be8d39832478c26758f9682ccd894bf163713443fc18202f6f50c2e07cd34faa3b047c01d
7
+ data.tar.gz: ad3d09d20daebf8d1de5e252b91522011e3f160cad5b98df85e4954a5eafccd41afa47e3af84703e607d3cfb04b7c037be0a8a6f98d8cc3b3d34bbb6a53c3539
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/README.md CHANGED
@@ -20,12 +20,31 @@ bundle install
20
20
  Sorry, there are no generators yet, so ...
21
21
 
22
22
  - Add `:remote_user_authenticatable` symbol to `devise` statement in User model.
23
- - Add `require 'devise-remote-user'` to devise initializer at `config/initializers/devise.rb`
24
23
  - Add `before_filter :authenticate_user!` to ApplicationController, if not already present. This ensures that remote user is logged in locally (via database)
25
24
 
26
- Configuration options in `config/intializers/devise.rb`:
25
+ Configuration options:
27
26
 
28
- `remote_user_autocreate` - Boolean (default: false). Whether to auto-create a local user for the remote user.
29
- `remote_user_env_var` - String (default: 'REMOTE_USER'). Request environment key for the remote user id.
30
- `remote_user_attribute_map` - Hash (default: {}). Map of User model attributes to request environment keys for updating the local user when auto-creation is enabled.
27
+ - `env_var` - String (default: `'REMOTE_USER'`). Request environment key for the remote user id.
28
+ - `attribute_map` - Hash (default: `{}`). Map of User model attributes to request environment keys for updating the local user when auto-creation is enabled.
29
+ - `auto_create` - Boolean (default: `false`). Whether to auto-create a local user from the remote user attributes. Note: Also requires adding the Warden callbacks as shown below.
30
+ - `auto_update` - Boolean (default: `false`). Whether to auto-update authenticated user attributes from remote user attributes.
31
31
 
32
+ Set options in `config/intializers/devise.rb`:
33
+
34
+ ```ruby
35
+ require 'devise-remote-user'
36
+
37
+ DeviseRemoteUser.configure do |config|
38
+ config.env_key = 'REMOTE_USER'
39
+ config.auto_create = true
40
+ config.auto_update = true
41
+ config.attribute_map = {email: 'mail'}
42
+ end
43
+
44
+ # Uses Warden after_authentication callback to implement auto_update feature
45
+ DeviseRemoteUser.add_warden_callbacks
46
+ ```
47
+
48
+ ## Tests
49
+
50
+ Sorry, they haven't been added yet because this code was refactored from en existing Rails app.
data/Rakefile CHANGED
@@ -5,3 +5,9 @@ rescue LoadError
5
5
  end
6
6
 
7
7
  Bundler::GemHelper.install_tasks
8
+
9
+ require 'rspec/core/rake_task'
10
+
11
+ RSpec::Core::RakeTask.new(:spec)
12
+
13
+ task :default => :spec
@@ -19,4 +19,5 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ["lib"]
20
20
  s.add_dependency "rails", ">= 3.2"
21
21
  s.add_dependency "devise"
22
+ s.add_development_dependency "rspec"
22
23
  end
@@ -1,31 +1,48 @@
1
1
  require 'devise'
2
2
 
3
3
  module DeviseRemoteUser
4
- class Engine < Rails::Engine
5
- end
6
- end
4
+
5
+ class Engine < Rails::Engine; end
7
6
 
8
- module Devise
9
7
  # request.env key for remote user name
10
8
  # Set to 'HTTP_REMOTE_USER' in config/initializers/devise.rb if behind reverse proxy
11
- mattr_accessor :remote_user_env_key
12
- @@remote_user_env_key = 'REMOTE_USER'
9
+ mattr_accessor :env_key
10
+ @@env_key = 'REMOTE_USER'
13
11
 
14
- # Enable user auto-creation for remote user
15
- mattr_accessor :remote_user_autocreate
16
- @@remote_user_autocreate = false
12
+ # Enable user auto-creation of user from remote user attributes
13
+ mattr_accessor :auto_create
14
+ @@auto_create = false
15
+
16
+ # Enable user auto-update of user attributes from remote user attributes
17
+ mattr_accessor :auto_update
18
+ @@auto_update = false
17
19
 
18
20
  # User attribute used for lookup of remote user
19
21
  # Defaults to Devise.authentication_keys.first
20
- mattr_accessor :remote_user_auth_key
21
- @@remote_user_auth_key = nil
22
+ mattr_accessor :auth_key
23
+ @@auth_key = nil
22
24
 
23
25
  # Map of User model attributes to request.env keys for updating a local user when auto-creation is enabled.
24
- mattr_accessor :remote_user_attribute_map
25
- @@remote_user_attribute_map = {}
26
+ mattr_accessor :attribute_map
27
+ @@attribute_map = {}
28
+
29
+ def self.configure
30
+ yield self
31
+ end
32
+
33
+ def self.add_warden_callbacks
34
+ if auto_update
35
+ Warden::Manager.after_authentication do |user, auth, opts|
36
+ manager = DeviseRemoteUser::Manager.new(auth.env)
37
+ manager.update_user(user)
38
+ end
39
+ end
40
+ end
41
+
26
42
  end
27
43
 
28
44
  Devise.add_module(:remote_user_authenticatable,
29
45
  :strategy => true,
30
46
  :controller => :sessions,
31
47
  :model => 'devise_remote_user/model')
48
+
@@ -0,0 +1,59 @@
1
+ module DeviseRemoteUser
2
+
3
+ #
4
+ # The Manager class is responsible for connecting the appliation's User
5
+ # class with remote user information in the request environment.
6
+ #
7
+ class Manager
8
+
9
+ attr_reader :env
10
+
11
+ def initialize(env)
12
+ @env = env
13
+ end
14
+
15
+ def find_or_create_user
16
+ user = find_user
17
+ if !user && DeviseRemoteUser.auto_create
18
+ user = create_user
19
+ end
20
+ user
21
+ end
22
+
23
+ def find_user
24
+ User.where(user_criterion).first
25
+ end
26
+
27
+ def create_user
28
+ random_password = SecureRandom.hex(16)
29
+ attrs = user_criterion.merge({password: random_password, password_confirmation: random_password})
30
+ user = User.create(attrs)
31
+ update_user(user)
32
+ user
33
+ end
34
+
35
+ def update_user(user)
36
+ user.update_attributes(remote_user_attributes)
37
+ end
38
+
39
+ protected
40
+
41
+ def remote_user_attributes
42
+ DeviseRemoteUser.attribute_map.inject({}) { |h, (k, v)| h[k] = env[v] if env.has_key?(v); h }
43
+ end
44
+
45
+ def user_criterion
46
+ {auth_key => remote_user_id}
47
+ end
48
+
49
+ def remote_user_id
50
+ env[DeviseRemoteUser.env_key]
51
+ end
52
+
53
+ def auth_key
54
+ DeviseRemoteUser.auth_key || Devise.authentication_keys.first
55
+ end
56
+
57
+ end
58
+
59
+ end
@@ -1,4 +1,5 @@
1
1
  require 'devise_remote_user/strategy'
2
+ require 'devise_remote_user/manager'
2
3
 
3
4
  module Devise::Models
4
5
  module RemoteUserAuthenticatable
@@ -7,35 +8,8 @@ module Devise::Models
7
8
  module ClassMethods
8
9
 
9
10
  def find_for_remote_user_authentication(env)
10
- user = User.where(auth_key => remote_user_id(env)).first
11
- if !user && Devise.remote_user_autocreate
12
- user = create_user!(env)
13
- end
14
- user
15
- end
16
-
17
- private
18
-
19
- def auth_key
20
- Devise.remote_user_auth_key || self.authentication_keys.first
21
- end
22
-
23
- def create_user!(env)
24
- random_password = SecureRandom.hex(16)
25
- attrs = {
26
- auth_key => remote_user_id(env),
27
- :password => random_password,
28
- :password_confirmation => random_password
29
- }.merge(remote_user_attributes(env))
30
- User.create! attrs
31
- end
32
-
33
- def remote_user_id(env)
34
- env[Devise.remote_user_env_key]
35
- end
36
-
37
- def remote_user_attributes(env)
38
- Devise.remote_user_attribute_map.inject({}) { |h, (k, v)| h[k] = env[v] if env.has_key?(v); h }
11
+ manager = DeviseRemoteUser::Manager.new(env)
12
+ manager.find_or_create_user
39
13
  end
40
14
 
41
15
  end
@@ -6,7 +6,7 @@ module Devise
6
6
  class RemoteUserAuthenticatable < Authenticatable
7
7
 
8
8
  def valid?
9
- env[Devise.remote_user_env_key].present?
9
+ env[DeviseRemoteUser.env_key].present?
10
10
  end
11
11
 
12
12
  def authenticate!
@@ -1,3 +1,3 @@
1
1
  module DeviseRemoteUser
2
- VERSION = '0.0.1'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -0,0 +1,17 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+
12
+ # Run specs in random order to surface order dependencies. If you find an
13
+ # order dependency and want to debug it, you can fix the order by providing
14
+ # the seed, which is printed after each run.
15
+ # --seed 1234
16
+ config.order = 'random'
17
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise-remote-user
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Chandek-Stark
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-25 00:00:00.000000000 Z
11
+ date: 2013-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  description: A devise extension for remote user authentication.
42
56
  email:
43
57
  - lib-drs@duke.edu
@@ -48,6 +62,7 @@ extra_rdoc_files:
48
62
  - README.md
49
63
  files:
50
64
  - .gitignore
65
+ - .rspec
51
66
  - CONTRIBUTING.md
52
67
  - Gemfile
53
68
  - LICENSE
@@ -55,9 +70,11 @@ files:
55
70
  - Rakefile
56
71
  - devise_remote_user.gemspec
57
72
  - lib/devise_remote_user.rb
73
+ - lib/devise_remote_user/manager.rb
58
74
  - lib/devise_remote_user/model.rb
59
75
  - lib/devise_remote_user/strategy.rb
60
76
  - lib/devise_remote_user/version.rb
77
+ - spec/spec_helper.rb
61
78
  homepage: http://github.com/duke-libraries/devise-remote-user
62
79
  licenses:
63
80
  - BSD