grnds-sso 0.0.3
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/ChangeLog +11 -0
- data/README.md +43 -0
- data/grnds-sso.gemspec +15 -0
- data/lib/grnds/sso.rb +5 -0
- data/lib/grnds/sso/authentication.rb +38 -0
- data/lib/grnds/sso/configuration.rb +31 -0
- data/lib/grnds/sso/version.rb +5 -0
- data/lib/grnds/sso/view_helpers.rb +28 -0
- data/lib/grnds/sso/vpn_constraint.rb +53 -0
- metadata +53 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ddb4c8c687ce1b47dc636537155a39a3e15162e1
|
4
|
+
data.tar.gz: daf7628fb44d0f7f1420a15b113eec8a4c7899b3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4c850adfe04cf8a13f63fc6014ba00e818b5ad6c729c8d27ed2af256a9536e85a577a7ab73c0c2cf569df0a50a024533a74402cdf4faff19018ab480ca1c0e4a
|
7
|
+
data.tar.gz: 4c89b94fc9a3a39a6f24d7814348447d3f7ad545f3595375052db89875501a0e2088d906647193f0bd704e65505ea579b45f352f82e3e230ca6664ba82f20e86
|
data/ChangeLog
ADDED
data/README.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
grnds-sso
|
2
|
+
=========
|
3
|
+
|
4
|
+
|
5
|
+
# Adding SSO to your application.
|
6
|
+
|
7
|
+
- copy the sample config(below) to your app at `config/initializers/grnds_sso.rb`
|
8
|
+
|
9
|
+
```
|
10
|
+
Rails.application.config.action_dispatch.cookies_serializer = :marshal
|
11
|
+
|
12
|
+
Grnds::Sso.configure do |config|
|
13
|
+
case Rails.env
|
14
|
+
when 'development', 'test'
|
15
|
+
config.base_site = 'http://localhost:3000'
|
16
|
+
when 'uat'
|
17
|
+
config.base_site = 'https://www.uat.grandroundshealth.com'
|
18
|
+
when 'production'
|
19
|
+
config.base_site = 'https://www.grandroundshealth.com'
|
20
|
+
end
|
21
|
+
config.sign_in_post_fix = '/app/users/sign_in'
|
22
|
+
config.sign_out_post_fix = '/app/users/sign_out'
|
23
|
+
end
|
24
|
+
```
|
25
|
+
|
26
|
+
- Configure your session store to use the GrandRounds session cookie. Add `config/initializers/session_store.rb`:
|
27
|
+
```
|
28
|
+
if Rails.env == 'test' or Rails.env == 'development'
|
29
|
+
Frick::Application.config.session_store :cookie_store, key: "_GrandRounds_session_#{Rails.env}", :domain => :all
|
30
|
+
elsif Rails.env == 'production'
|
31
|
+
Frick::Application.config.session_store :cookie_store, key: "_GrandRounds_session", :domain => ".#{ConsultingMD::Application.config.website_domain}"
|
32
|
+
else
|
33
|
+
Frick::Application.config.session_store :cookie_store, key: "_GrandRounds_session_#{Rails.env}", :domain => ".#{ConsultingMD::Application.config.website_domain}"
|
34
|
+
end
|
35
|
+
```
|
36
|
+
|
37
|
+
- In your application.rb, set up the cookie secret (and pay attention to your deployment environment variables):
|
38
|
+
```
|
39
|
+
config.website_domain = 'grandroundshealth.com'
|
40
|
+
config.secret_token = ENV['RAILS_COOKIE_SECRET'] || copy_it_yourself_from_tim_or_tp
|
41
|
+
```
|
42
|
+
|
43
|
+
- Make sure you don't also have a secret_token initializer.
|
data/grnds-sso.gemspec
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require 'grnds/sso/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'grnds-sso'
|
7
|
+
s.version = Grnds::Sso::VERSION
|
8
|
+
s.date = '2014-12-29'
|
9
|
+
s.summary = "SSO for Grand Rounds"
|
10
|
+
s.description = "A simple way to expose SSO on Grand Rounds projects"
|
11
|
+
s.authors = ["Justin Ahn", "Rick Cobb"]
|
12
|
+
s.email = 'justin@grandroundshealth.com'
|
13
|
+
s.files = `git ls-files`.split($/)
|
14
|
+
s.license = 'MIT'
|
15
|
+
end
|
data/lib/grnds/sso.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
module Grnds
|
2
|
+
module Sso
|
3
|
+
module Authentication
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
def grnds_sso_access(options = {})
|
8
|
+
include Grnds::Sso::Authentication
|
9
|
+
include Grnds::Sso::ViewHelpers
|
10
|
+
before_filter :authenticate_user, options
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
def set_development_credentials
|
17
|
+
session['customer_name'] ||= 'Grand Rounds'
|
18
|
+
session['uid'] ||= '57'
|
19
|
+
session['first_name'] ||= 'Kenneth'
|
20
|
+
session['last_name'] ||= 'Berland'
|
21
|
+
end
|
22
|
+
|
23
|
+
def authenticate_user
|
24
|
+
set_development_credentials if %w[test].include?(Rails.env)
|
25
|
+
redirect_to Grnds::Sso.sign_in_url unless authenticated?
|
26
|
+
end
|
27
|
+
|
28
|
+
def authenticated?
|
29
|
+
session[:init] = true unless session.loaded?
|
30
|
+
current_user.present?
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
ActionController::Base.class_eval do
|
37
|
+
extend Grnds::Sso::Authentication::ClassMethods
|
38
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Grnds
|
2
|
+
module Sso
|
3
|
+
def self.configure
|
4
|
+
yield configuration
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.configuration
|
8
|
+
@configuration ||= Grnds::Sso::Configuration.new
|
9
|
+
end
|
10
|
+
|
11
|
+
class Configuration
|
12
|
+
attr_accessor :base_site, :sign_in_post_fix, :sign_out_post_fix
|
13
|
+
|
14
|
+
def vpn
|
15
|
+
Grnds::Sso::VpnConstraint.instance
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class << self
|
20
|
+
def sign_in_url
|
21
|
+
configuration = Grnds::Sso.configuration
|
22
|
+
configuration.base_site + configuration.sign_in_post_fix
|
23
|
+
end
|
24
|
+
|
25
|
+
def sign_out_url
|
26
|
+
configuration = Grnds::Sso.configuration
|
27
|
+
configuration.base_site + configuration.sign_out_post_fix
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Grnds
|
2
|
+
module Sso
|
3
|
+
module ViewHelpers
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
included do
|
6
|
+
helper_method :current_user
|
7
|
+
helper_method :current_customer
|
8
|
+
helper_method :current_first_name
|
9
|
+
helper_method :current_last_name
|
10
|
+
end
|
11
|
+
def current_user
|
12
|
+
session['uid']
|
13
|
+
end
|
14
|
+
|
15
|
+
def current_customer
|
16
|
+
session['customer_name']
|
17
|
+
end
|
18
|
+
|
19
|
+
def current_first_name
|
20
|
+
session['first_name']
|
21
|
+
end
|
22
|
+
|
23
|
+
def current_last_name
|
24
|
+
session['last_name']
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Grnds::Sso
|
2
|
+
class VpnConstraint
|
3
|
+
include Singleton
|
4
|
+
|
5
|
+
LOCALHOST = '127.0.0.1'.freeze
|
6
|
+
VPN = %r{^10\.}.freeze
|
7
|
+
|
8
|
+
class << self
|
9
|
+
delegate :configure, :matches?, to: :instance
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_accessor :require_login, :pattern
|
13
|
+
alias :require_login? :require_login
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
self.require_login = (Rails.env != 'development')
|
17
|
+
|
18
|
+
case Rails.env
|
19
|
+
when 'development', 'test' then
|
20
|
+
self.pattern = LOCALHOST
|
21
|
+
else
|
22
|
+
self.pattern = VPN
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def configure
|
27
|
+
yield self
|
28
|
+
end
|
29
|
+
|
30
|
+
def matches?(request)
|
31
|
+
return false unless !require_login? || authenticated?(request)
|
32
|
+
|
33
|
+
return on_the_vpn?(request)
|
34
|
+
end
|
35
|
+
|
36
|
+
def authenticated?(request)
|
37
|
+
session = request.session
|
38
|
+
session[:init] = true unless session.loaded?
|
39
|
+
|
40
|
+
return session['uid'].present?
|
41
|
+
end
|
42
|
+
|
43
|
+
def on_the_vpn?(request)
|
44
|
+
case pattern
|
45
|
+
when String
|
46
|
+
return pattern == request.remote_ip
|
47
|
+
else
|
48
|
+
return pattern.match(request.remote_ip)
|
49
|
+
end
|
50
|
+
raise "VPN not defined"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
metadata
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: grnds-sso
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Justin Ahn
|
8
|
+
- Rick Cobb
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-12-29 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: A simple way to expose SSO on Grand Rounds projects
|
15
|
+
email: justin@grandroundshealth.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- ChangeLog
|
21
|
+
- README.md
|
22
|
+
- grnds-sso.gemspec
|
23
|
+
- lib/grnds/sso.rb
|
24
|
+
- lib/grnds/sso/authentication.rb
|
25
|
+
- lib/grnds/sso/configuration.rb
|
26
|
+
- lib/grnds/sso/version.rb
|
27
|
+
- lib/grnds/sso/view_helpers.rb
|
28
|
+
- lib/grnds/sso/vpn_constraint.rb
|
29
|
+
homepage:
|
30
|
+
licenses:
|
31
|
+
- MIT
|
32
|
+
metadata: {}
|
33
|
+
post_install_message:
|
34
|
+
rdoc_options: []
|
35
|
+
require_paths:
|
36
|
+
- lib
|
37
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
requirements: []
|
48
|
+
rubyforge_project:
|
49
|
+
rubygems_version: 2.4.3
|
50
|
+
signing_key:
|
51
|
+
specification_version: 4
|
52
|
+
summary: SSO for Grand Rounds
|
53
|
+
test_files: []
|