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 ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :patch: 1
3
+ :major: 0
4
+ :minor: 1
@@ -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)
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class SinatraCasTest < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+ require 'mocha'
5
+
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'sinatra_cas'
8
+
9
+ class Test::Unit::TestCase
10
+ end
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
+