sinatra-cas 0.1.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/VERSION.yml +4 -0
- data/lib/sinatra_cas.rb +96 -0
- data/test/sinatra_cas_test.rb +7 -0
- data/test/test_helper.rb +10 -0
- metadata +59 -0
data/VERSION.yml
ADDED
data/lib/sinatra_cas.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
# NAME: sinatra-cas
|
2
|
+
# VERSION: 0.1.1 (Jan 19, 2008)
|
3
|
+
# AUTHOR: Galin Yordanov <gyordanov@gmail.com> Nabbr Corp
|
4
|
+
# DESCRIPTION: CAS plugin for Sinatra apps
|
5
|
+
# COMPATIBILITY: - Sinatra 0.9.0.2
|
6
|
+
# LICENSE: Apache License, Version 2.0
|
7
|
+
#
|
8
|
+
# INSTRUCTIONS:
|
9
|
+
|
10
|
+
# ====== DEFAULT OPTIONS FOR PLUGIN ======
|
11
|
+
module Sinatra
|
12
|
+
module Plugins
|
13
|
+
module CAS
|
14
|
+
OPTIONS = {
|
15
|
+
:enabled => true,
|
16
|
+
:cas_server_url => nil,
|
17
|
+
:session_timeout => 14400
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
module Sinatra
|
25
|
+
module Plugins
|
26
|
+
module CAS
|
27
|
+
helpers do
|
28
|
+
def login_required?
|
29
|
+
return false if request.env['REQUEST_URI'] =~ /^\/extjs\/|^\/js\/|^\/css\//
|
30
|
+
return false if request.env['PATH_INFO'] =~ /.css$|.jpg$|.png$|.gif$|.json$/
|
31
|
+
return true
|
32
|
+
end
|
33
|
+
|
34
|
+
def get_serice_url
|
35
|
+
surl = (request.env['rack.url_scheme'] + "://"+request.env['HTTP_HOST'] + request.env['REQUEST_URI'])
|
36
|
+
surl = surl.gsub(/service=[^&]*[&]?/,'').gsub(/ticket=[^&]*[&]?/,'').gsub(/logout?/,'').gsub(/logout/,'')
|
37
|
+
surl.gsub(/\?$/,'')
|
38
|
+
end
|
39
|
+
|
40
|
+
def logout_url
|
41
|
+
client = CASClient::Client.new({:cas_base_url => Plugins::CAS::OPTIONS[:cas_server_url]})
|
42
|
+
client.logout_url(get_serice_url,get_serice_url)
|
43
|
+
end
|
44
|
+
|
45
|
+
def logout
|
46
|
+
session.delete :cas_username
|
47
|
+
redirect logout_url
|
48
|
+
end
|
49
|
+
|
50
|
+
def login
|
51
|
+
if ! login_required? && ! Plugins::CAS::OPTIONS[:enabled]
|
52
|
+
return nil
|
53
|
+
end
|
54
|
+
client = CASClient::Client.new({:cas_base_url => Plugins::CAS::OPTIONS[:cas_server_url]})
|
55
|
+
caslogin_url = client.add_service_to_login_url(get_serice_url)
|
56
|
+
params = nested_params(request.params)
|
57
|
+
if params[:ticket]
|
58
|
+
if params[:ticket] =~ /^PT-/
|
59
|
+
st = CASClient::ProxyTicket.new(params[:ticket], get_serice_url, params[:renew])
|
60
|
+
else
|
61
|
+
st = CASClient::ServiceTicket.new(params[:ticket], get_serice_url, params[:renew])
|
62
|
+
end
|
63
|
+
client.validate_service_ticket(st)
|
64
|
+
if st.is_valid?
|
65
|
+
yield st.response.user if block_given?
|
66
|
+
params[:cas_username] = st.response.user
|
67
|
+
session[:cas_username] = st.response.user
|
68
|
+
session[:cas_last_valid_ticket] = Time.now.to_i
|
69
|
+
redirect get_serice_url
|
70
|
+
else
|
71
|
+
redirect caslogin_url
|
72
|
+
end
|
73
|
+
else
|
74
|
+
if session[:cas_username]
|
75
|
+
session[:cas_last_valid_ticket] = Time.now.to_i unless session.has_key? :cas_last_valid_ticket
|
76
|
+
time_ago = Time.now.to_i - session[:cas_last_valid_ticket]
|
77
|
+
if time_ago > 14400
|
78
|
+
session.delete :cas_username
|
79
|
+
redirect caslogin_url
|
80
|
+
else
|
81
|
+
session[:created_at] = Time.now.to_i
|
82
|
+
params.merge!(session)
|
83
|
+
end
|
84
|
+
else
|
85
|
+
# go ahead and redirect to the cas
|
86
|
+
redirect caslogin_url
|
87
|
+
end
|
88
|
+
end
|
89
|
+
@cas_username = params[:cas_username]
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
Sinatra::Base.send(:include, Sinatra::Plugins::CAS)
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sinatra-cas
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Galin Yordanov
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-01-20 00:00:00 -05:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: CAS Plugin for Sinatra ...
|
17
|
+
email: gyordanov@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- VERSION.yml
|
26
|
+
- lib/sinatra_cas.rb
|
27
|
+
- test/sinatra_cas_test.rb
|
28
|
+
- test/test_helper.rb
|
29
|
+
has_rdoc: true
|
30
|
+
homepage: http://github.com/gyordanov/sinatra-cas
|
31
|
+
licenses: []
|
32
|
+
|
33
|
+
post_install_message:
|
34
|
+
rdoc_options:
|
35
|
+
- --inline-source
|
36
|
+
- --charset=UTF-8
|
37
|
+
require_paths:
|
38
|
+
- lib
|
39
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: "0"
|
44
|
+
version:
|
45
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: "0"
|
50
|
+
version:
|
51
|
+
requirements: []
|
52
|
+
|
53
|
+
rubyforge_project:
|
54
|
+
rubygems_version: 1.3.5
|
55
|
+
signing_key:
|
56
|
+
specification_version: 2
|
57
|
+
summary: CAS Plugin for Sinatra ...
|
58
|
+
test_files: []
|
59
|
+
|