sinatra-cas 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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
+