warden_delegated 0.0.1

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