warden_delegated 0.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ad77b1f7cad23a55fda562c9d0856c0446df6229
4
+ data.tar.gz: ebb946aba6f1da410ee6467b464f887395e93d2b
5
+ SHA512:
6
+ metadata.gz: f2927a9a00472a67edeecdf12445a1be16b3d6cc657c8d0689550d1e5aacf4d060feea71c7171155d6481f4cdae2b04a8570c50dfead618b3f3c4314f7e4b61e
7
+ data.tar.gz: 22580c97e1f6eb14383f1aa9cf66a9688fbc5dd46f2079c9ac2680f0d9f1b98f2375b7ceb2d6918c135b753f452657af12183ff519b2233e2c7891d353738807
@@ -0,0 +1,30 @@
1
+ # Warden Delegated
2
+
3
+ This is a minimal Warden configuration used to delegate authentication to another app that is running Devise. Extracted from a production environment.
4
+
5
+ ## Assumptions
6
+
7
+ Steps:
8
+
9
+ 1. Add to Gemfile `gem 'warden_delegated'`
10
+ 2. Configure your applications to share sessions
11
+ 3. Set the LOGIN_URL environment variable
12
+ 4. Add `include Warden::Delegated::Model` in your user model
13
+ 5. Add initializer like below
14
+
15
+ ## Warden Initializer
16
+
17
+ Put the following in an initializer(assumes :user scope and User model):
18
+
19
+ Rails.application.config.middleware.use Warden::Manager do |manager|
20
+ manager.failure_app = Warden::Delegated::FailureApp.new
21
+ manager.default_scope = :user
22
+ manager.default_strategies :delegated
23
+ manager.serialize_from_session(:user) do |key|
24
+ User.serialize_from_session(key)
25
+ end
26
+ end
27
+
28
+ ## TODO
29
+
30
+ 1. Write some tests
@@ -0,0 +1,8 @@
1
+ module Warden
2
+ module Delegated
3
+ end
4
+ end
5
+
6
+ require 'warden/delegated/model'
7
+ require 'warden/delegated/strategy'
8
+ require 'warden/delegated/failure_app'
@@ -0,0 +1,46 @@
1
+ module Warden
2
+ module Delegated
3
+ class FailureApp
4
+ attr_reader :env, :request
5
+ delegate :session, to: :request
6
+
7
+ def call(env)
8
+ @env = env
9
+ @request = Rack::Request.new(env)
10
+ set_return_to
11
+ ['302', {'Location' => login_url}, ['']]
12
+ end
13
+
14
+ private
15
+
16
+ def set_return_to
17
+ session["#{scope}_return_to"] = original_fullpath
18
+ end
19
+
20
+ def warden
21
+ env['warden']
22
+ end
23
+
24
+ def scope
25
+ warden.config.default_scope
26
+ end
27
+
28
+ def warden_options
29
+ env['warden.options']
30
+ end
31
+
32
+ def attempted_path
33
+ warden_options[:attempted_path]
34
+ end
35
+
36
+ def original_fullpath
37
+ request.base_url + attempted_path
38
+ end
39
+
40
+ def login_url
41
+ ENV["LOGIN_URL"]
42
+ end
43
+
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,27 @@
1
+ require 'orm_adapter'
2
+
3
+ module Warden
4
+ module Delegated
5
+ module Model
6
+ extend ActiveSupport::Concern
7
+
8
+ def self.included(base)
9
+ base.extend ClassMethods
10
+ end
11
+
12
+ module ClassMethods
13
+ include OrmAdapter::ToAdapter
14
+ def serialize_from_session(key)
15
+ id, salt = key
16
+ user = to_adapter.get id
17
+ user if user && user.authenticatable_salt == salt
18
+ end
19
+ end
20
+
21
+ def authenticatable_salt
22
+ encrypted_password[0,29] if encrypted_password
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,14 @@
1
+ module Warden
2
+ module Delegated
3
+ class Strategy < ::Warden::Strategies::Base
4
+
5
+ def authenticate!
6
+ if !env['warden'].authenticated?
7
+ fail!("Not logged in") and return
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+
14
+ Warden::Strategies.add(:delegated, Warden::Delegated::Strategy)
@@ -0,0 +1,5 @@
1
+ module Warden
2
+ module Delegated
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ require 'warden/delegated'
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: warden_delegated
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Daniel Farrell
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: warden
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: orm_adapter
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.1'
41
+ description: Small warden setup delegating to a devise app
42
+ email: danielfarrell76@gmail.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - README.md
48
+ - lib/warden/delegated.rb
49
+ - lib/warden/delegated/failure_app.rb
50
+ - lib/warden/delegated/model.rb
51
+ - lib/warden/delegated/strategy.rb
52
+ - lib/warden/delegated/version.rb
53
+ - lib/warden_delegated.rb
54
+ homepage: http://github.com/danielfarrell/warden_delegated
55
+ licenses:
56
+ - MIT
57
+ metadata: {}
58
+ post_install_message:
59
+ rdoc_options: []
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ requirements: []
73
+ rubyforge_project:
74
+ rubygems_version: 2.2.2
75
+ signing_key:
76
+ specification_version: 4
77
+ summary: Small warden setup delegating to a devise app
78
+ test_files: []