authpds-nyu 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +1 -1
- data/README.rdoc +10 -11
- data/Rakefile +1 -5
- data/lib/authpds-nyu/session.rb +8 -8
- data/lib/authpds-nyu/sun/opensso.rb +4 -4
- data/lib/authpds-nyu/version.rb +2 -2
- data/lib/authpds-nyu.rb +1 -2
- data/test/support/user.rb +6 -6
- data/test/test_helper.rb +8 -8
- data/test/unit/user_session_test.rb +8 -8
- metadata +16 -10
data/MIT-LICENSE
CHANGED
data/README.rdoc
CHANGED
@@ -1,23 +1,26 @@
|
|
1
1
|
= AuthpdsNyu
|
2
|
+
{<img src="https://secure.travis-ci.org/scotdalton/authpds-nyu.png?branch=master" alt="Build Status" />}[https://travis-ci.org/scotdalton/authpds-nyu]
|
3
|
+
{<img src="https://gemnasium.com/scotdalton/authpds-nyu.png" alt="Dependency Status" />}[https://gemnasium.com/scotdalton/authpds-nyu]
|
4
|
+
{<img src="https://codeclimate.com/badge.png" alt="Code Climage" />}[https://codeclimate.com/github/scotdalton/authpds-nyu]
|
2
5
|
|
3
6
|
This gem provides a mechanism for user authentication and authorization via NYU Libraries PDS system. It extends Authpds and provides NYU Libraries' specific configuration.
|
4
7
|
|
5
8
|
== Basics
|
6
9
|
=== Generate User-like model
|
7
10
|
$ rails generate model User username:string email:string firstname:string \
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
11
|
+
lastname:string mobile_phone:string crypted_password:string password_salt:string \
|
12
|
+
session_id:string persistence_token:string login_count:integer last_request_at:string \
|
13
|
+
current_login_at:string last_login_at:string last_login_ip:string current_login_ip:string \
|
14
|
+
user_attributes:text refreshed_at:datetime
|
12
15
|
|
13
16
|
=== Configure User-like model
|
14
17
|
class User < ActiveRecord::Base
|
15
|
-
serialize :user_attributes
|
18
|
+
serialize :user_attributes
|
16
19
|
|
17
20
|
acts_as_authentic do |c|
|
18
21
|
c.validations_scope = :username
|
19
22
|
c.validate_password_field = false
|
20
|
-
c.require_password_confirmation = false
|
23
|
+
c.require_password_confirmation = false
|
21
24
|
c.disable_perishable_token_maintenance = true
|
22
25
|
end
|
23
26
|
end
|
@@ -49,7 +52,6 @@ This gem provides a mechanism for user authentication and authorization via NYU
|
|
49
52
|
include Authpds::Controllers::AuthpdsController
|
50
53
|
end
|
51
54
|
|
52
|
-
|
53
55
|
== Overview
|
54
56
|
The module extends Authpds and should be compatible with Authpds configuation.
|
55
57
|
It also provides hooks for custom functionality.
|
@@ -59,7 +61,4 @@ The documentation below describes NYU specific config methods available.
|
|
59
61
|
:opensso_url:: Base OpenSSO url (https://login.nyu.edu:443/sso)
|
60
62
|
:aleph_url:: Aleph url (http://aleph.library.nyu.edu)
|
61
63
|
:aleph_default_adm:: Aleph default ADM (NYU50)
|
62
|
-
:aleph_default_sublibrary:: Aleph default sublibrary (BOBST)
|
63
|
-
|
64
|
-
|
65
|
-
== Build Status {<img src="https://secure.travis-ci.org/scotdalton/authpds-nyu.png"/>}[http://travis-ci.org/scotdalton/authpds-nyu]
|
64
|
+
:aleph_default_sublibrary:: Aleph default sublibrary (BOBST)
|
data/Rakefile
CHANGED
@@ -20,9 +20,6 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
20
20
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
23
|
Bundler::GemHelper.install_tasks
|
27
24
|
|
28
25
|
require 'rake/testtask'
|
@@ -34,5 +31,4 @@ Rake::TestTask.new(:test) do |t|
|
|
34
31
|
t.verbose = false
|
35
32
|
end
|
36
33
|
|
37
|
-
|
38
|
-
task :default => :test
|
34
|
+
task :default => :test
|
data/lib/authpds-nyu/session.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
module AuthpdsNyu
|
2
2
|
# == Overview
|
3
|
-
# This gem provides a mechanism for user authentication and authorization via NYU Libraries PDS system.
|
3
|
+
# This gem provides a mechanism for user authentication and authorization via NYU Libraries PDS system.
|
4
4
|
# The module extends Authpds and should be compatible with Authpds configuation.
|
5
5
|
# It also provides hooks for custom functionality.
|
6
6
|
# The documentation below describes NYU specific config methods available.
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# == Config Options Available
|
9
9
|
# :opensso_url:: Base OpenSSO url (https://login.nyu.edu:443/sso)
|
10
10
|
# :aleph_url:: Aleph url (http://aleph.library.nyu.edu)
|
11
11
|
# :aleph_default_adm:: Aleph default ADM (NYU50)
|
12
12
|
# :aleph_default_sublibrary:: Aleph default sublibrary (BOBST)
|
13
|
-
#
|
13
|
+
#
|
14
14
|
module Session
|
15
15
|
def self.included(klass)
|
16
16
|
klass.class_eval do
|
@@ -61,11 +61,11 @@ module AuthpdsNyu
|
|
61
61
|
return @valid_sso_session
|
62
62
|
end
|
63
63
|
end
|
64
|
-
|
64
|
+
|
65
65
|
module InstanceMethods
|
66
66
|
def self.included(klass)
|
67
67
|
klass.class_eval do
|
68
|
-
pds_attributes :firstname => "givenname", :lastname => "sn", :email => "email", :primary_institution => "institute"
|
68
|
+
pds_attributes :firstname => "givenname", :lastname => "sn", :email => "email", :primary_institution => "institute"
|
69
69
|
remember_me true
|
70
70
|
remember_me_for 300
|
71
71
|
httponly true
|
@@ -73,7 +73,7 @@ module AuthpdsNyu
|
|
73
73
|
login_inaccessible_url "http://library.nyu.edu/errors/login-library-nyu-edu/"
|
74
74
|
end
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
# Overriden logout url for NYU.
|
78
78
|
def logout_url(params={})
|
79
79
|
return "#{self.class.pds_url}/logout?url=#{CGI::escape(controller.user_session_redirect_url(self.class.redirect_logout_url))}"
|
@@ -82,7 +82,7 @@ module AuthpdsNyu
|
|
82
82
|
def aleph_bor_auth_permissions(bor_id=nil, verification=nil, adm=nil, sublibrary=nil)
|
83
83
|
bor_auth = aleph_bor_auth(bor_id, verification, adm, sublibrary)
|
84
84
|
return (bor_auth.nil? or bor_auth.error) ? {} : bor_auth.permissions
|
85
|
-
end
|
85
|
+
end
|
86
86
|
|
87
87
|
def aleph_bor_auth(bor_id=nil, verification=nil, adm=nil, sublibrary=nil)
|
88
88
|
bor_id = pds_user.id if bor_id.nil? unless pds_user.nil?
|
@@ -93,7 +93,7 @@ module AuthpdsNyu
|
|
93
93
|
adm = self.class.aleph_default_adm if adm.nil?
|
94
94
|
sublibrary = self.class.aleph_default_sublibrary if sublibrary.nil?
|
95
95
|
# Call X-Service
|
96
|
-
bor_auth =
|
96
|
+
bor_auth =
|
97
97
|
Exlibris::Aleph::BorAuth.
|
98
98
|
new(aleph_url, adm, sublibrary, "N", bor_id, verification)
|
99
99
|
controller.logger.error(
|
@@ -29,7 +29,7 @@ module AuthpdsNyu
|
|
29
29
|
return @cookies[:nyulibrary_opensso_cookiename] unless @cookies[:nyulibrary_opensso_cookiename].nil?
|
30
30
|
req = Net::HTTP::Get.new(@opensso_uri.path + '/identity/getCookieNameForToken')
|
31
31
|
res = @http.request(req, '')
|
32
|
-
raise RuntimeError.new(
|
32
|
+
raise RuntimeError.new(
|
33
33
|
"Error in #{self.class}."+
|
34
34
|
"Unrecognized response: #{res}") unless res.body.starts_with?("string=")
|
35
35
|
cookie_name = res.body.split('=').at(1).chomp unless res.body.split('=').at(1).nil?
|
@@ -42,8 +42,8 @@ module AuthpdsNyu
|
|
42
42
|
token_cookie = @cookies[token_cookie_name]
|
43
43
|
token_cookie = @cookies[token_cookie_name.to_sym] if token_cookie.nil?
|
44
44
|
token_cookie = CGI.unescape(token_cookie.to_s.gsub('+', '%2B'))
|
45
|
-
token_cookie = (token_cookie != '') ?
|
46
|
-
(token_cookie.start_with?(token_cookie_name)) ?
|
45
|
+
token_cookie = (token_cookie != '') ?
|
46
|
+
(token_cookie.start_with?(token_cookie_name)) ?
|
47
47
|
token_cookie : "#{token_cookie_name}=#{token_cookie}; path=" : nil
|
48
48
|
end
|
49
49
|
|
@@ -52,7 +52,7 @@ module AuthpdsNyu
|
|
52
52
|
req = Net::HTTP::Get.new(@opensso_uri.path + '/identity/isTokenValid')
|
53
53
|
req['Cookie'] = token_cookie
|
54
54
|
res = @http.request(req, '')
|
55
|
-
raise RuntimeError.new(
|
55
|
+
raise RuntimeError.new(
|
56
56
|
"Error in #{self.class}."+
|
57
57
|
"Unrecognized response: #{res}") unless res.body.starts_with?("boolean=")
|
58
58
|
res.body.split('=').at(1).chomp == 'true'
|
data/lib/authpds-nyu/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module AuthpdsNyu
|
2
|
-
VERSION = "0.
|
3
|
-
end
|
2
|
+
VERSION = "0.2.0"
|
3
|
+
end
|
data/lib/authpds-nyu.rb
CHANGED
data/test/support/user.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
class User < ActiveRecord::Base
|
2
|
-
|
2
|
+
serialize :user_attributes
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
acts_as_authentic do |c|
|
5
|
+
c.validations_scope = :username
|
6
|
+
c.validate_password_field = false
|
7
|
+
c.require_password_confirmation = false
|
8
|
+
end
|
9
9
|
end
|
data/test/test_helper.rb
CHANGED
@@ -29,8 +29,8 @@ ActiveRecord::Schema.define(:version => 1) do
|
|
29
29
|
t.datetime "last_request_at"
|
30
30
|
t.datetime "current_login_at"
|
31
31
|
t.datetime "last_login_at"
|
32
|
-
t.string "last_login_ip"
|
33
|
-
t.string "current_login_ip"
|
32
|
+
t.string "last_login_ip"
|
33
|
+
t.string "current_login_ip"
|
34
34
|
t.text "user_attributes"
|
35
35
|
t.datetime "refreshed_at"
|
36
36
|
t.timestamps
|
@@ -42,9 +42,9 @@ require File.dirname(__FILE__) + '/../lib/authpds-nyu'
|
|
42
42
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
43
43
|
|
44
44
|
class ActiveSupport::TestCase
|
45
|
-
VALID_OPENSSO_FOR_NYU = '
|
45
|
+
VALID_OPENSSO_FOR_NYU = 'AQIC5wM2LY4Sfcxc13Lmq865G281ghiEEXHBsnl6eVSC3hU.*AAJTSQACMDIAAlMxAAIwMQ..*'
|
46
46
|
INVALID_OPENSSO = "Invalid"
|
47
|
-
VALID_PDS_HANDLE_FOR_NEW_NYU = '
|
47
|
+
VALID_PDS_HANDLE_FOR_NEW_NYU = '911201215342297526743181020780'
|
48
48
|
VALID_PDS_HANDLE_FOR_EXISTING_NYU = '83201295456116368349190324314'
|
49
49
|
VALID_PDS_HANDLE_FOR_NEWSCHOOL = '272201212284614806184193096120278'
|
50
50
|
VALID_PDS_HANDLE_FOR_COOPER = '272201212284614806184193096120278'
|
@@ -65,11 +65,11 @@ class Authlogic::TestCase::MockController
|
|
65
65
|
end
|
66
66
|
|
67
67
|
include Authpds::Controllers::AuthpdsController
|
68
|
-
|
68
|
+
|
69
69
|
def url_for(options={})
|
70
70
|
return "#{root_url}/validate?return_url=#{options[:return_url]}"
|
71
71
|
end
|
72
|
-
|
72
|
+
|
73
73
|
def root_url
|
74
74
|
return "http://railsapp.library.nyu.edu"
|
75
75
|
end
|
@@ -77,11 +77,11 @@ class Authlogic::TestCase::MockController
|
|
77
77
|
def validate_url(options={})
|
78
78
|
return "#{root_url}/validate?return_url=#{options[:return_url]}"
|
79
79
|
end
|
80
|
-
|
80
|
+
|
81
81
|
def performed?
|
82
82
|
false
|
83
83
|
end
|
84
|
-
|
84
|
+
|
85
85
|
def redirect_to(*args)
|
86
86
|
# puts args.inspect
|
87
87
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
class UserSessionTest < ActiveSupport::TestCase
|
3
|
-
|
3
|
+
|
4
4
|
def setup
|
5
5
|
activate_authlogic
|
6
6
|
controller.session[:session_id] = "FakeSessionID"
|
7
7
|
controller.cookies[:iPlanetDirectoryPro] = { :value => VALID_OPENSSO_FOR_NYU }
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
test "valid_sso_session?" do
|
11
11
|
user_session = UserSession.new
|
12
12
|
assert(user_session.valid_sso_session?)
|
@@ -22,14 +22,14 @@ class UserSessionTest < ActiveSupport::TestCase
|
|
22
22
|
assert_nil(user_session.record)
|
23
23
|
user_session = UserSession.find
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
test "logout_url" do
|
27
27
|
user_session = UserSession.new
|
28
28
|
assert_equal(
|
29
|
-
"https://logindev.library.nyu.edu/logout?url=http%3A%2F%2Fbobcatdev.library.nyu.edu",
|
29
|
+
"https://logindev.library.nyu.edu/logout?url=http%3A%2F%2Fbobcatdev.library.nyu.edu",
|
30
30
|
user_session.logout_url)
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
test "aleph_bor_auth" do
|
34
34
|
user_session = UserSession.new
|
35
35
|
bor_auth = user_session.aleph_bor_auth("N12162279", "d4465aacaa645f2164908cd4184c09f0", "NYU50", "BOBST")
|
@@ -37,7 +37,7 @@ class UserSessionTest < ActiveSupport::TestCase
|
|
37
37
|
assert_equal("CB", bor_auth.permissions[:bor_type])
|
38
38
|
assert_equal("Y", bor_auth.permissions[:hold_on_shelf])
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
test "aleph_bor_auth_permissions" do
|
42
42
|
user_session = UserSession.new
|
43
43
|
permissions = user_session.aleph_bor_auth_permissions("N12162279", "d4465aacaa645f2164908cd4184c09f0", "NYU50", "BOBST")
|
@@ -45,14 +45,14 @@ class UserSessionTest < ActiveSupport::TestCase
|
|
45
45
|
assert_equal("CB", permissions[:bor_type])
|
46
46
|
assert_equal("Y", permissions[:hold_on_shelf])
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
# test "find_new_user" do
|
50
50
|
# controller.cookies[:PDS_HANDLE] = { :value => VALID_PDS_HANDLE_FOR_NEW_NYU }
|
51
51
|
# user_session = UserSession.find
|
52
52
|
# # puts user_session.record.username
|
53
53
|
# # puts user_session.record.id
|
54
54
|
# end
|
55
|
-
#
|
55
|
+
#
|
56
56
|
# test "find_existing_user" do
|
57
57
|
# controller.cookies[:PDS_HANDLE] = { :value => VALID_PDS_HANDLE_FOR_EXISTING_NYU }
|
58
58
|
# user_session = UserSession.find
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: authpds-nyu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -32,33 +32,33 @@ dependencies:
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ! '>='
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 0
|
37
|
+
version: '0'
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 0
|
45
|
+
version: '0'
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: exlibris-aleph
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
51
|
-
- -
|
51
|
+
- - ! '>='
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0
|
53
|
+
version: '0'
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
none: false
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0
|
61
|
+
version: '0'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: sqlite3
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -109,12 +109,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
109
109
|
- - ! '>='
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '0'
|
112
|
+
segments:
|
113
|
+
- 0
|
114
|
+
hash: 44708976452511195
|
112
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
116
|
none: false
|
114
117
|
requirements:
|
115
118
|
- - ! '>='
|
116
119
|
- !ruby/object:Gem::Version
|
117
120
|
version: '0'
|
121
|
+
segments:
|
122
|
+
- 0
|
123
|
+
hash: 44708976452511195
|
118
124
|
requirements: []
|
119
125
|
rubyforge_project:
|
120
126
|
rubygems_version: 1.8.24
|