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.
- checksums.yaml +7 -0
- data/README.md +30 -0
- data/lib/warden/delegated.rb +8 -0
- data/lib/warden/delegated/failure_app.rb +46 -0
- data/lib/warden/delegated/model.rb +27 -0
- data/lib/warden/delegated/strategy.rb +14 -0
- data/lib/warden/delegated/version.rb +5 -0
- data/lib/warden_delegated.rb +1 -0
- metadata +78 -0
checksums.yaml
ADDED
@@ -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
|
data/README.md
ADDED
@@ -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,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 @@
|
|
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: []
|