authpds-nyu 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.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +38 -0
- data/lib/authpds-nyu.rb +12 -0
- data/lib/authpds-nyu/exlibris/aleph.rb +41 -0
- data/lib/authpds-nyu/session.rb +97 -0
- data/lib/authpds-nyu/sun/opensso.rb +81 -0
- data/lib/authpds-nyu/version.rb +3 -0
- data/lib/tasks/authpds-nyu_tasks.rake +4 -0
- data/test/authpds-nyu_test.rb +7 -0
- data/test/support/user.rb +9 -0
- data/test/support/user_session.rb +6 -0
- data/test/test_helper.rb +82 -0
- data/test/unit/aleph_bor_auth_test.rb +28 -0
- data/test/unit/opensso_test.rb +51 -0
- data/test/unit/user_session_test.rb +26 -0
- metadata +101 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2012 YOURNAME
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'rdoc/task'
|
9
|
+
rescue LoadError
|
10
|
+
require 'rdoc/rdoc'
|
11
|
+
require 'rake/rdoctask'
|
12
|
+
RDoc::Task = Rake::RDocTask
|
13
|
+
end
|
14
|
+
|
15
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
16
|
+
rdoc.rdoc_dir = 'rdoc'
|
17
|
+
rdoc.title = 'AuthpdsNyu'
|
18
|
+
rdoc.options << '--line-numbers'
|
19
|
+
rdoc.rdoc_files.include('README.rdoc')
|
20
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
Bundler::GemHelper.install_tasks
|
27
|
+
|
28
|
+
require 'rake/testtask'
|
29
|
+
|
30
|
+
Rake::TestTask.new(:test) do |t|
|
31
|
+
t.libs << 'lib'
|
32
|
+
t.libs << 'test'
|
33
|
+
t.pattern = 'test/**/*_test.rb'
|
34
|
+
t.verbose = false
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
task :default => :test
|
data/lib/authpds-nyu.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'active_support/dependencies'
|
2
|
+
require 'authpds'
|
3
|
+
AUTHPDS_NYU_PATH = File.dirname(__FILE__) + "/authpds-nyu/"
|
4
|
+
[
|
5
|
+
'session',
|
6
|
+
'sun/opensso',
|
7
|
+
'exlibris/aleph'
|
8
|
+
].each do |library|
|
9
|
+
require AUTHPDS_NYU_PATH + library
|
10
|
+
end
|
11
|
+
Authlogic::Session::Base.send(:include, AuthpdsNyu::Session)
|
12
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module AuthpdsNyu
|
2
|
+
module Exlibris
|
3
|
+
module Aleph
|
4
|
+
require 'open-uri'
|
5
|
+
class BorAuth
|
6
|
+
attr_reader :response, :error, :session_id
|
7
|
+
def initialize(aleph_url, library, sub_library, translate, bor_id, bor_verification)
|
8
|
+
url = "#{aleph_url}/X?"
|
9
|
+
url += "op=bor-auth&library=#{library}&"
|
10
|
+
url += "sub_library=#{sub_library}&translate=#{translate}&"
|
11
|
+
url += "bor_id=#{bor_id}&verification=#{bor_verification}&"
|
12
|
+
@response = Nokogiri.XML(open(url))
|
13
|
+
@session_id = @response.at("//session-id").inner_text unless @response.at("//session-id").nil?
|
14
|
+
@error = @response.at("//error").inner_text unless @response.at("//error").nil?
|
15
|
+
end
|
16
|
+
|
17
|
+
def permissions
|
18
|
+
rv = {}
|
19
|
+
return rv unless @response and self.error.nil?
|
20
|
+
rv[:home_sub_library] = @response.at("z303-home-library").inner_text unless @response.at("z303-home-library").nil?
|
21
|
+
rv[:bor_status] = @response.at("z305-bor-status").inner_text unless @response.at("z305-bor-status").nil?
|
22
|
+
rv[:bor_type] = @response.at("z305-bor-type").inner_text unless @response.at("z305-bor-type").nil?
|
23
|
+
rv[:loan_permission] = @response.at("z305-loan-permission").inner_text unless @response.at("z305-loan-permission").nil?
|
24
|
+
rv[:photo_permission] = @response.at("z305-photo-permission").inner_text unless @response.at("z305-photo-permission").nil?
|
25
|
+
rv[:over_permission] = @response.at("z305-over-permission").inner_text unless @response.at("z305-over-permission").nil?
|
26
|
+
rv[:multi_hold] = @response.at("z305-multi-hold").inner_text unless @response.at("z305-multi-hold").nil?
|
27
|
+
rv[:loan_check] = @response.at("z305-loan-check").inner_text unless @response.at("z305-loan-check").nil?
|
28
|
+
rv[:hold_permission] = @response.at("z305-hold-permission").inner_text unless @response.at("z305-hold-permission").nil?
|
29
|
+
rv[:renew_permission] = @response.at("z305-renew-permission").inner_text unless @response.at("z305-renew-permission").nil?
|
30
|
+
rv[:rr_permission] = @response.at("z305-rr-permission").inner_text unless @response.at("z305-rr-permission").nil?
|
31
|
+
rv[:ignore_late_return] = @response.at("z305-ignore-late-return").inner_text unless @response.at("z305-ignore-late-return").nil?
|
32
|
+
rv[:hold_on_shelf] = @response.at("z305-hold-on-shelf").inner_text unless @response.at("z305-hold-on-shelf").nil?
|
33
|
+
rv[:end_block_date] = @response.at("z305-end-block-date").inner_text unless @response.at("z305-end-block-date").nil?
|
34
|
+
rv[:booking_permission] = @response.at("z305-booking-permission").inner_text unless @response.at("z305-booking-permission").nil?
|
35
|
+
rv[:booking_ignore_hours] = @response.at("z305-booking-ignore-hours").inner_text unless @response.at("z305-booking-ignore-hours").nil?
|
36
|
+
return rv
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module AuthpdsNyu
|
2
|
+
module Session
|
3
|
+
def self.included(klass)
|
4
|
+
klass.class_eval do
|
5
|
+
extend Config
|
6
|
+
include AuthpdsCallbackMethods
|
7
|
+
include InstanceMethods
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module Config
|
12
|
+
# Base opensso url
|
13
|
+
def opensso_url(value = nil)
|
14
|
+
rw_config(:opensso_url, value, "https://login.nyu.edu:443/sso")
|
15
|
+
end
|
16
|
+
alias_method :opensso_url=, :opensso_url
|
17
|
+
|
18
|
+
# Base aleph url
|
19
|
+
def aleph_url(value = nil)
|
20
|
+
rw_config(:aleph_url, value, "http://aleph.library.nyu.edu")
|
21
|
+
end
|
22
|
+
alias_method :aleph_url=, :aleph_url
|
23
|
+
|
24
|
+
# Default aleph ADM
|
25
|
+
def aleph_default_adm(value = nil)
|
26
|
+
rw_config(:aleph_default_adm, value, "NYU50")
|
27
|
+
end
|
28
|
+
alias_method :aleph_default_adm=, :aleph_default_adm
|
29
|
+
|
30
|
+
# Default aleph sublibrary
|
31
|
+
def aleph_default_sublibrary(value = nil)
|
32
|
+
rw_config(:aleph_default_sublibrary, value, "BOBST")
|
33
|
+
end
|
34
|
+
alias_method :aleph_default_sublibrary=, :aleph_default_sublibrary
|
35
|
+
end
|
36
|
+
|
37
|
+
module AuthpdsCallbackMethods
|
38
|
+
def pds_record_identifier
|
39
|
+
(pds_user.opensso.nil?) ? pds_user.id : pds_user.uid
|
40
|
+
end
|
41
|
+
|
42
|
+
def valid_sso_session?
|
43
|
+
begin
|
44
|
+
@valid_sso_session ||= AuthpdsNyu::Sun::Opensso.new(controller, self.class.opensso_url).is_valid?
|
45
|
+
rescue Exception => e
|
46
|
+
handle_login_exception e
|
47
|
+
return false
|
48
|
+
end
|
49
|
+
return @valid_sso_session
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
module InstanceMethods
|
54
|
+
def self.included(klass)
|
55
|
+
klass.class_eval do
|
56
|
+
pds_attributes :id => "id", :uid => "uid",
|
57
|
+
:opensso => "opensso", :name => "name", :firstname => "givenname",
|
58
|
+
:lastname => "sn", :commonname => "cn", :email => "email",
|
59
|
+
:nyuidn => "nyuidn", :verification => "verification", :institute => "institute",
|
60
|
+
:bor_status => "bor-status", :bor_type => "bor-type",
|
61
|
+
:college_code => "college_code", :college_name => "college_name",
|
62
|
+
:dept_name => "dept_name", :dept_code => "dept_code",
|
63
|
+
:major_code => "major_code", :major => "major", :ill_permission => "ill-permission",
|
64
|
+
:newschool_ldap => "newschool_ldap"
|
65
|
+
remember_me true
|
66
|
+
remember_me_for 300
|
67
|
+
httponly true
|
68
|
+
secure true
|
69
|
+
login_inaccessible_url "http://library.nyu.edu/errors/login-library-nyu-edu/"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def aleph_bor_auth_permissions(bor_id=nil, verification=nil, adm=nil, sublibrary=nil)
|
74
|
+
bor_auth = aleph_bor_auth(bor_id, verification, adm, sublibrary)
|
75
|
+
return (bor_auth.nil? or bor_auth.error) ? {} : bor_auth.permissions
|
76
|
+
end
|
77
|
+
|
78
|
+
def aleph_bor_auth(bor_id=nil, verification=nil, adm=nil, sublibrary=nil)
|
79
|
+
bor_id = pds_user.id if bor_id.nil?
|
80
|
+
verification = pds_user.verification if verification.nil?
|
81
|
+
aleph_url = self.class.aleph_url
|
82
|
+
adm = self.class.aleph_default_adm if adm.nil?
|
83
|
+
sublibrary = self.class.aleph_default_sublibrary if sublibrary.nil?
|
84
|
+
# Call X-Service
|
85
|
+
bor_auth =
|
86
|
+
AuthPdsNyu::Exlibris::Aleph::BorAuth.
|
87
|
+
new(aleph_url, adm, sublibrary, "N", bor_id, bor_verification)
|
88
|
+
controller.logger.error(
|
89
|
+
"Error in #{self.class}. "+
|
90
|
+
"No permissions returned from Aleph bor-auth for user with bor_id #{bor_id}."+
|
91
|
+
"Error: #{(bor_auth.nil?) ? "bor_auth is nil." : bor_auth.error.inspect}"
|
92
|
+
) and return nil if bor_auth.nil? or bor_auth.error
|
93
|
+
return bor_auth
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module AuthpdsNyu
|
2
|
+
module Sun
|
3
|
+
require 'net/http'
|
4
|
+
require 'net/https'
|
5
|
+
class Opensso
|
6
|
+
def initialize(controller, opensso_url)
|
7
|
+
raise ArgumentError.new("Argument Error in #{self.class}. :opensso_url not specified.") if opensso_url.nil?;
|
8
|
+
@cookies = controller.cookies
|
9
|
+
@opensso_uri = URI.parse(opensso_url)
|
10
|
+
opensso_uri_split = URI.split(opensso_url)
|
11
|
+
# @scheme= opensso_uri_split[0]
|
12
|
+
@host= opensso_uri_split[2]
|
13
|
+
@port= opensso_uri_split[3]
|
14
|
+
end
|
15
|
+
|
16
|
+
def is_valid?
|
17
|
+
@http = Net::HTTP.new(@host, @port)
|
18
|
+
# Set read timeout to 15 seconds.
|
19
|
+
@http.read_timeout = 15
|
20
|
+
@http.use_ssl = true if @opensso_uri.is_a?(URI::HTTPS)
|
21
|
+
# Suppress "peer certificate" warning
|
22
|
+
@http.verify_mode = OpenSSL::SSL::VERIFY_NONE if @http.use_ssl?
|
23
|
+
return validate_token(get_token_cookie(get_cookie_name_for_token))
|
24
|
+
# validate_token(token_cookie) ? get_opensso_user(token_cookie) : nil
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
def get_cookie_name_for_token
|
29
|
+
return @cookies[:nyulibrary_opensso_cookiename] unless @cookies[:nyulibrary_opensso_cookiename].nil?
|
30
|
+
req = Net::HTTP::Get.new(@opensso_uri.path + '/identity/getCookieNameForToken')
|
31
|
+
res = @http.request(req, '')
|
32
|
+
raise RuntimeError.new(
|
33
|
+
"Error in #{self.class}."+
|
34
|
+
"Unrecognized response: #{res}") unless res.body.starts_with?("string=")
|
35
|
+
cookie_name = res.body.split('=').at(1).chomp unless res.body.split('=').at(1).nil?
|
36
|
+
@cookies[:nyulibrary_opensso_cookiename] = { 'value' => cookie_name, 'domain' => ".library.nyu.edu", 'path' => "/" }
|
37
|
+
return cookie_name
|
38
|
+
end
|
39
|
+
|
40
|
+
def get_token_cookie(token_cookie_name)
|
41
|
+
return nil if token_cookie_name.nil?
|
42
|
+
token_cookie = @cookies.fetch(token_cookie_name, nil)
|
43
|
+
token_cookie = @cookies[token_cookie_name.to_sym] if token_cookie.nil?
|
44
|
+
token_cookie = CGI.unescape(token_cookie.to_s.gsub('+', '%2B'))
|
45
|
+
token_cookie = (token_cookie != '') ?
|
46
|
+
(token_cookie.start_with?(token_cookie_name)) ?
|
47
|
+
token_cookie : "#{token_cookie_name}=#{token_cookie}; path=" : nil
|
48
|
+
end
|
49
|
+
|
50
|
+
def validate_token(token_cookie)
|
51
|
+
return false if token_cookie.nil?
|
52
|
+
req = Net::HTTP::Get.new(@opensso_uri.path + '/identity/isTokenValid')
|
53
|
+
req['Cookie'] = token_cookie
|
54
|
+
res = @http.request(req, '')
|
55
|
+
raise RuntimeError.new(
|
56
|
+
"Error in #{self.class}."+
|
57
|
+
"Unrecognized response: #{res}") unless res.body.starts_with?("boolean=")
|
58
|
+
res.body.split('=').at(1).chomp == 'true'
|
59
|
+
end
|
60
|
+
|
61
|
+
def get_opensso_user(token_cookie)
|
62
|
+
return if token_cookie.nil?
|
63
|
+
opensso_user = Hash[]
|
64
|
+
attribute_name = ''
|
65
|
+
req = Net::HTTP::Get.new(@opensso_uri.path + '/identity/attributes')
|
66
|
+
req['Cookie'] = token_cookie
|
67
|
+
res = @http.request(req, '')
|
68
|
+
lines = res.body.split(/\n/)
|
69
|
+
lines.each do |line|
|
70
|
+
if line.match(/^userdetails.attribute.name=/)
|
71
|
+
attribute_name = line.gsub(/^userdetails.attribute.name=/, '')
|
72
|
+
opensso_user[attribute_name] = Array.new
|
73
|
+
elsif line.match(/^userdetails.attribute.value=/)
|
74
|
+
opensso_user[attribute_name] << line.gsub(/^userdetails.attribute.value=/, '')
|
75
|
+
end
|
76
|
+
end
|
77
|
+
return opensso_user
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'active_support/dependencies'
|
2
|
+
require 'authpds'
|
3
|
+
require 'authlogic/test_case'
|
4
|
+
require "test/unit"
|
5
|
+
require 'rubygems'
|
6
|
+
require "active_record"
|
7
|
+
require "active_record/fixtures"
|
8
|
+
# Configure Rails Environment
|
9
|
+
ENV["RAILS_ENV"] = "test"
|
10
|
+
|
11
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
12
|
+
logger = Logger.new(STDOUT)
|
13
|
+
logger.level= Logger::FATAL
|
14
|
+
ActiveRecord::Base.logger = logger
|
15
|
+
ActiveRecord::Base.configurations = true
|
16
|
+
ActiveRecord::Schema.define(:version => 1) do
|
17
|
+
drop_table :users if table_exists?(:users)
|
18
|
+
create_table :users do |t|
|
19
|
+
t.string "username", :default => "", :null => false
|
20
|
+
t.string "email"
|
21
|
+
t.string "firstname", :limit => 100
|
22
|
+
t.string "lastname", :limit => 100
|
23
|
+
t.string "mobile_phone"
|
24
|
+
t.string "crypted_password"
|
25
|
+
t.string "password_salt"
|
26
|
+
t.string "session_id"
|
27
|
+
t.string "persistence_token", :null => false
|
28
|
+
t.integer "login_count", :default => 0, :null => false
|
29
|
+
t.datetime "last_request_at"
|
30
|
+
t.datetime "current_login_at"
|
31
|
+
t.datetime "last_login_at"
|
32
|
+
t.string "last_login_ip"
|
33
|
+
t.string "current_login_ip"
|
34
|
+
t.text "user_attributes"
|
35
|
+
t.datetime "refreshed_at"
|
36
|
+
t.timestamps
|
37
|
+
end unless table_exists?(:users)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Load support files
|
41
|
+
require File.dirname(__FILE__) + '/../lib/authpds-nyu' unless defined?(AuthpdsNyu)
|
42
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
43
|
+
|
44
|
+
class ActiveSupport::TestCase
|
45
|
+
VALID_OPENSSO_FOR_NYU = 'AQIC5wM2LY4SfcxDSwCymgKWMu6OksqGN0zuRV5cUdz33Bo.*AAJTSQACMDIAAlNLAAstMTg5NTE2OTAzNQACUzEAAjA2*'
|
46
|
+
INVALID_OPENSSO = "Invalid"
|
47
|
+
VALID_PDS_HANDLE_FOR_NYU = '132012112947113134742310506860'
|
48
|
+
VALID_PDS_HANDLE_FOR_NEWSCHOOL = '272201212284614806184193096120278'
|
49
|
+
VALID_PDS_HANDLE_FOR_COOPER = '272201212284614806184193096120278'
|
50
|
+
INVALID_PDS_HANDLE = "Invalid"
|
51
|
+
SESSION_ID = "qwertyuiopasdfghjkllzxcvbnm1234567890"
|
52
|
+
include ActiveRecord::TestFixtures
|
53
|
+
include Authlogic::TestCase
|
54
|
+
self.fixture_path = File.dirname(__FILE__) + "/fixtures"
|
55
|
+
self.use_transactional_fixtures = false
|
56
|
+
self.use_instantiated_fixtures = false
|
57
|
+
self.pre_loaded_fixtures = false
|
58
|
+
fixtures :all
|
59
|
+
setup :activate_authlogic
|
60
|
+
end
|
61
|
+
|
62
|
+
class Authlogic::TestCase::MockController
|
63
|
+
def self.helper_method(*args)
|
64
|
+
end
|
65
|
+
|
66
|
+
include Authpds::Controllers::AuthpdsController
|
67
|
+
|
68
|
+
def url_for(options={})
|
69
|
+
return "http://railsapp.library.nyu.edu/validate?return_url=#{options[:return_url]}"
|
70
|
+
end
|
71
|
+
|
72
|
+
def root_url
|
73
|
+
end
|
74
|
+
|
75
|
+
def performed?
|
76
|
+
false
|
77
|
+
end
|
78
|
+
|
79
|
+
def redirect_to(*args)
|
80
|
+
puts args.inspect
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
class AlephBorAuthTest < ActiveSupport::TestCase
|
3
|
+
|
4
|
+
def setup
|
5
|
+
activate_authlogic
|
6
|
+
controller.session[:session_id] = "FakeSessionID"
|
7
|
+
# controller.cookies[:PDS_HANDLE] = { :value => VALID_PDS_HANDLE_FOR_NYU }
|
8
|
+
controller.cookies[:iPlanetDirectoryPro] = { :value => VALID_OPENSSO_FOR_NYU }
|
9
|
+
end
|
10
|
+
|
11
|
+
test "new" do
|
12
|
+
bor_auth =
|
13
|
+
AuthpdsNyu::Exlibris::Aleph::BorAuth.new(
|
14
|
+
"http://alephstage.library.nyu.edu", "NYU50", "BOBST", "N",
|
15
|
+
"N12162279", "d4465aacaa645f2164908cd4184c09f0")
|
16
|
+
assert_nil(bor_auth.error, "Error is not nil.")
|
17
|
+
end
|
18
|
+
|
19
|
+
test "permissions" do
|
20
|
+
bor_auth =
|
21
|
+
AuthpdsNyu::Exlibris::Aleph::BorAuth.new(
|
22
|
+
"http://alephstage.library.nyu.edu", "NYU50", "BOBST", "N",
|
23
|
+
"N12162279", "d4465aacaa645f2164908cd4184c09f0")
|
24
|
+
assert_equal("51", bor_auth.permissions[:bor_status])
|
25
|
+
assert_equal("CB", bor_auth.permissions[:bor_type])
|
26
|
+
assert_equal("Y", bor_auth.permissions[:hold_on_shelf])
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
class OpenssoTest < ActiveSupport::TestCase
|
3
|
+
def setup
|
4
|
+
activate_authlogic
|
5
|
+
controller.session[:session_id] = "FakeSessionID"
|
6
|
+
# controller.cookies[:PDS_HANDLE] = { :value => VALID_PDS_HANDLE_FOR_NYU }
|
7
|
+
controller.cookies[:iPlanetDirectoryPro] = { :value => VALID_OPENSSO_FOR_NYU }
|
8
|
+
end
|
9
|
+
|
10
|
+
test "initialize" do
|
11
|
+
valid_opensso, invalid_opensso = nil, nil
|
12
|
+
assert_raise(ArgumentError){ AuthpdsNyu::Sun::Opensso.new(controller, nil) }
|
13
|
+
assert_nothing_raised(Exception){ valid_opensso = AuthpdsNyu::Sun::Opensso.new(controller, "https://login.nyu.edu:443/sso") }
|
14
|
+
assert_not_nil(valid_opensso.instance_variable_get(:@cookies))
|
15
|
+
assert_equal( VALID_OPENSSO_FOR_NYU, valid_opensso.instance_variable_get(:@cookies)[:iPlanetDirectoryPro])
|
16
|
+
assert_not_nil(valid_opensso.instance_variable_get(:@opensso_uri))
|
17
|
+
assert_equal( URI.parse("https://login.nyu.edu:443/sso"), valid_opensso.instance_variable_get(:@opensso_uri))
|
18
|
+
assert_nothing_raised(Exception){ invalid_opensso = AuthpdsNyu::Sun::Opensso.new(invalid_controller, "https://login.nyu.edu:443/sso") }
|
19
|
+
assert_not_nil(invalid_opensso.instance_variable_get(:@cookies))
|
20
|
+
assert_equal( INVALID_OPENSSO, invalid_opensso.instance_variable_get(:@cookies)[:iPlanetDirectoryPro])
|
21
|
+
assert_not_nil(invalid_opensso.instance_variable_get(:@opensso_uri))
|
22
|
+
assert_equal( URI.parse("https://login.nyu.edu:443/sso"), invalid_opensso.instance_variable_get(:@opensso_uri))
|
23
|
+
end
|
24
|
+
|
25
|
+
test "unresponsive_url" do
|
26
|
+
flunk("Implement Unresponsive URL Test!")
|
27
|
+
end
|
28
|
+
|
29
|
+
test "error_response" do
|
30
|
+
assert_raise(RuntimeError){ AuthpdsNyu::Sun::Opensso.new(controller, "http://www.nyu.edu").is_valid? }
|
31
|
+
end
|
32
|
+
|
33
|
+
test "is_valid?_valid" do
|
34
|
+
valid_opensso = AuthpdsNyu::Sun::Opensso.new(controller, "https://login.nyu.edu:443/sso")
|
35
|
+
assert(valid_opensso.is_valid?)
|
36
|
+
end
|
37
|
+
|
38
|
+
test "is_valid?_invalid" do
|
39
|
+
invalid_opensso = AuthpdsNyu::Sun::Opensso.new(invalid_controller, "https://login.nyu.edu:443/sso")
|
40
|
+
assert(!invalid_opensso.is_valid?)
|
41
|
+
end
|
42
|
+
|
43
|
+
def invalid_controller
|
44
|
+
activate_authlogic
|
45
|
+
controller.session[:session_id] = SESSION_ID
|
46
|
+
controller.cookies[:iPlanetDirectoryPro] = {
|
47
|
+
:value => INVALID_OPENSSO
|
48
|
+
}
|
49
|
+
return controller
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
class UserSessionTest < ActiveSupport::TestCase
|
3
|
+
|
4
|
+
def setup
|
5
|
+
activate_authlogic
|
6
|
+
controller.session[:session_id] = "FakeSessionID"
|
7
|
+
# controller.cookies[:PDS_HANDLE] = { :value => VALID_PDS_HANDLE_FOR_NYU }
|
8
|
+
controller.cookies[:iPlanetDirectoryPro] = { :value => VALID_OPENSSO_FOR_NYU }
|
9
|
+
end
|
10
|
+
|
11
|
+
test "valid_sso_session?" do
|
12
|
+
user_session = UserSession.new
|
13
|
+
assert(user_session.valid_sso_session?)
|
14
|
+
controller.cookies[:iPlanetDirectoryPro] = { :value => INVALID_OPENSSO }
|
15
|
+
user_session = UserSession.new
|
16
|
+
assert(!user_session.valid_sso_session?)
|
17
|
+
end
|
18
|
+
|
19
|
+
test "find" do
|
20
|
+
user_session = UserSession.new
|
21
|
+
assert_nil(controller.session["authpds_credentials"])
|
22
|
+
assert_nil(user_session.send(:attempted_record))
|
23
|
+
assert_nil(user_session.record)
|
24
|
+
user_session = UserSession.find
|
25
|
+
end
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: authpds-nyu
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Scot Dalton
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-03-05 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rails
|
16
|
+
requirement: &2152624780 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.2.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2152624780
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: sqlite3
|
27
|
+
requirement: &2152624000 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2152624000
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: authpds
|
38
|
+
requirement: &2152623360 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2152623360
|
47
|
+
description: NYU libraries SSO client.
|
48
|
+
email:
|
49
|
+
- scotdalton@gmail.com
|
50
|
+
executables: []
|
51
|
+
extensions: []
|
52
|
+
extra_rdoc_files: []
|
53
|
+
files:
|
54
|
+
- lib/authpds-nyu/exlibris/aleph.rb
|
55
|
+
- lib/authpds-nyu/session.rb
|
56
|
+
- lib/authpds-nyu/sun/opensso.rb
|
57
|
+
- lib/authpds-nyu/version.rb
|
58
|
+
- lib/authpds-nyu.rb
|
59
|
+
- lib/tasks/authpds-nyu_tasks.rake
|
60
|
+
- MIT-LICENSE
|
61
|
+
- Rakefile
|
62
|
+
- README.rdoc
|
63
|
+
- test/authpds-nyu_test.rb
|
64
|
+
- test/support/user.rb
|
65
|
+
- test/support/user_session.rb
|
66
|
+
- test/test_helper.rb
|
67
|
+
- test/unit/aleph_bor_auth_test.rb
|
68
|
+
- test/unit/opensso_test.rb
|
69
|
+
- test/unit/user_session_test.rb
|
70
|
+
homepage: http://github.com/scotdalton/authpds-nyu
|
71
|
+
licenses: []
|
72
|
+
post_install_message:
|
73
|
+
rdoc_options: []
|
74
|
+
require_paths:
|
75
|
+
- lib
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ! '>='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
requirements: []
|
89
|
+
rubyforge_project:
|
90
|
+
rubygems_version: 1.8.15
|
91
|
+
signing_key:
|
92
|
+
specification_version: 3
|
93
|
+
summary: NYU libraries SSO client.
|
94
|
+
test_files:
|
95
|
+
- test/authpds-nyu_test.rb
|
96
|
+
- test/support/user.rb
|
97
|
+
- test/support/user_session.rb
|
98
|
+
- test/test_helper.rb
|
99
|
+
- test/unit/aleph_bor_auth_test.rb
|
100
|
+
- test/unit/opensso_test.rb
|
101
|
+
- test/unit/user_session_test.rb
|