casino_core 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- casino_core (1.3.0)
4
+ casino_core (1.3.1)
5
5
  activerecord (~> 3.2.9)
6
6
  addressable (~> 2.3)
7
7
  faraday (~> 0.8)
@@ -12,15 +12,15 @@ PATH
12
12
  GEM
13
13
  remote: http://rubygems.org/
14
14
  specs:
15
- activemodel (3.2.11)
16
- activesupport (= 3.2.11)
15
+ activemodel (3.2.12)
16
+ activesupport (= 3.2.12)
17
17
  builder (~> 3.0.0)
18
- activerecord (3.2.11)
19
- activemodel (= 3.2.11)
20
- activesupport (= 3.2.11)
18
+ activerecord (3.2.12)
19
+ activemodel (= 3.2.12)
20
+ activesupport (= 3.2.12)
21
21
  arel (~> 3.0.2)
22
22
  tzinfo (~> 0.3.29)
23
- activesupport (3.2.11)
23
+ activesupport (3.2.12)
24
24
  i18n (~> 0.6)
25
25
  multi_json (~> 1.0)
26
26
  addressable (2.3.2)
@@ -34,7 +34,7 @@ GEM
34
34
  faraday (0.8.5)
35
35
  multipart-post (~> 1.1)
36
36
  i18n (0.6.1)
37
- multi_json (1.5.0)
37
+ multi_json (1.6.1)
38
38
  multipart-post (1.1.5)
39
39
  nokogiri (1.5.6)
40
40
  rake (10.0.3)
@@ -58,7 +58,7 @@ GEM
58
58
  webmock (1.9.0)
59
59
  addressable (>= 2.2.7)
60
60
  crack (>= 0.1.7)
61
- yard (0.8.3)
61
+ yard (0.8.4.1)
62
62
 
63
63
  PLATFORMS
64
64
  ruby
@@ -9,8 +9,15 @@ module CASinoCore
9
9
 
10
10
  def find_valid_ticket_granting_ticket(tgt, user_agent, ignore_two_factor = false)
11
11
  ticket_granting_ticket = CASinoCore::Model::TicketGrantingTicket.where(ticket: tgt).first
12
- unless ticket_granting_ticket.nil? || (!ignore_two_factor && ticket_granting_ticket.awaiting_two_factor_authentication?)
13
- if same_browser?(ticket_granting_ticket.user_agent, user_agent)
12
+ unless ticket_granting_ticket.nil?
13
+ if ticket_granting_ticket.expired?
14
+ logger.info "Ticket-granting ticket expired (Created: #{ticket_granting_ticket.created_at})"
15
+ ticket_granting_ticket.destroy
16
+ nil
17
+ elsif !ignore_two_factor && ticket_granting_ticket.awaiting_two_factor_authentication?
18
+ logger.info 'Ticket-granting ticket is valid, but two-factor authentication is pending'
19
+ nil
20
+ elsif same_browser?(ticket_granting_ticket.user_agent, user_agent)
14
21
  ticket_granting_ticket.user_agent = user_agent
15
22
  ticket_granting_ticket.touch
16
23
  ticket_granting_ticket.save!
@@ -10,6 +10,10 @@ class CASinoCore::Model::TicketGrantingTicket < ActiveRecord::Base
10
10
  before_destroy :destroy_service_tickets
11
11
  after_destroy :destroy_proxy_granting_tickets
12
12
 
13
+ def self.cleanup
14
+ self.destroy_all(['created_at < ?', CASinoCore::Settings.ticket_granting_ticket[:lifetime].seconds.ago])
15
+ end
16
+
13
17
  def browser_info
14
18
  unless self.user_agent.blank?
15
19
  user_agent = UserAgent.parse(self.user_agent)
@@ -29,6 +33,11 @@ class CASinoCore::Model::TicketGrantingTicket < ActiveRecord::Base
29
33
  end
30
34
  end
31
35
 
36
+ def expired?
37
+ lifetime = CASinoCore::Settings.ticket_granting_ticket[:lifetime]
38
+ (Time.now - (self.created_at || Time.now)) > lifetime
39
+ end
40
+
32
41
  private
33
42
  def destroy_service_tickets
34
43
  self.service_tickets.each do |service_ticket|
@@ -3,11 +3,14 @@ require 'casino_core/authenticator'
3
3
  module CASinoCore
4
4
  class Settings
5
5
  class << self
6
- attr_accessor :login_ticket, :service_ticket, :proxy_ticket, :two_factor_authenticator, :authenticators, :logger
6
+ attr_accessor :login_ticket, :ticket_granting_ticket, :service_ticket, :proxy_ticket, :two_factor_authenticator, :authenticators, :logger
7
7
  DEFAULT_SETTINGS = {
8
8
  login_ticket: {
9
9
  lifetime: 600
10
10
  },
11
+ ticket_granting_ticket: {
12
+ lifetime: 86400
13
+ },
11
14
  service_ticket: {
12
15
  lifetime_unconsumed: 300,
13
16
  lifetime_consumed: 86400
@@ -35,8 +35,14 @@ namespace :casino_core do
35
35
  puts "Deleted #{rows_affected} inactive two-factor authenticators."
36
36
  end
37
37
 
38
+ desc 'Remove expired ticket-granting tickets.'
39
+ task ticket_granting_tickets: 'casino_core:db:configure_connection' do
40
+ rows_affected = CASinoCore::Model::TicketGrantingTicket.cleanup.length
41
+ puts "Deleted #{rows_affected} ticket-granting tickets."
42
+ end
43
+
38
44
  desc 'Perform all cleanup tasks.'
39
- task all: [:service_tickets, :proxy_tickets, :login_tickets, :two_factor_authenticators] do
45
+ task all: [:ticket_granting_tickets, :service_tickets, :proxy_tickets, :login_tickets, :two_factor_authenticators] do
40
46
  end
41
47
  end
42
48
  end
@@ -1,3 +1,3 @@
1
1
  module CASinoCore
2
- VERSION = '1.3.0'
2
+ VERSION = '1.3.1'
3
3
  end
@@ -80,4 +80,36 @@ describe CASinoCore::Model::TicketGrantingTicket do
80
80
  end
81
81
  end
82
82
  end
83
+
84
+ describe '#expired?' do
85
+ context 'with an expired ticket' do
86
+ before(:each) do
87
+ ticket_granting_ticket.created_at = 25.hours.ago
88
+ ticket_granting_ticket.save!
89
+ end
90
+
91
+ it 'returns true' do
92
+ ticket_granting_ticket.expired?.should == true
93
+ end
94
+ end
95
+
96
+ context 'with an unexpired ticket' do
97
+ it 'returns false' do
98
+ ticket_granting_ticket.expired?.should == false
99
+ end
100
+ end
101
+ end
102
+
103
+ describe '.cleanup' do
104
+ let!(:other_ticket_granting_ticket) { FactoryGirl.create :ticket_granting_ticket }
105
+
106
+ it 'deletes expired ticket-granting tickets' do
107
+ ticket_granting_ticket.created_at = 25.hours.ago
108
+ ticket_granting_ticket.save!
109
+ lambda do
110
+ described_class.cleanup
111
+ end.should change(described_class, :count).by(-1)
112
+ described_class.find_by_ticket(ticket_granting_ticket.ticket).should be_false
113
+ end
114
+ end
83
115
  end
@@ -64,6 +64,18 @@ describe CASinoCore::Processor::LoginCredentialRequestor do
64
64
  end
65
65
  end
66
66
 
67
+ context 'when ticket-granting ticket expired' do
68
+ before(:each) do
69
+ ticket_granting_ticket.created_at = 25.hours.ago
70
+ ticket_granting_ticket.save!
71
+ end
72
+
73
+ it 'calls the #user_not_logged_in method on the listener' do
74
+ listener.should_receive(:user_not_logged_in).with(kind_of(CASinoCore::Model::LoginTicket))
75
+ processor.process(nil, cookies, user_agent)
76
+ end
77
+ end
78
+
67
79
  context 'with a service' do
68
80
  let(:service) { 'http://example.com/' }
69
81
  let(:params) { { service: service } }
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: casino_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -36,7 +36,7 @@ cert_chain:
36
36
  b1VSdnUwRzgvWXlIVUFtSVUvV0tyanIxYmdjZjFWUnYKUjRLRDFNblVWL3Y1
37
37
  MDJwaU1sWG1qeE9XZGJLOHl2UUVIa3N1L3pqYkNqU3UrTTJrd0ZtV0dzeDVu
38
38
  eCtWZHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
39
- date: 2013-02-08 00:00:00.000000000 Z
39
+ date: 2013-02-17 00:00:00.000000000 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
@@ -431,7 +431,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
431
431
  version: '0'
432
432
  segments:
433
433
  - 0
434
- hash: 1075447066647602137
434
+ hash: 4202762284368637569
435
435
  required_rubygems_version: !ruby/object:Gem::Requirement
436
436
  none: false
437
437
  requirements:
@@ -440,7 +440,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
440
440
  version: '0'
441
441
  segments:
442
442
  - 0
443
- hash: 1075447066647602137
443
+ hash: 4202762284368637569
444
444
  requirements: []
445
445
  rubyforge_project:
446
446
  rubygems_version: 1.8.24
metadata.gz.sig CHANGED
@@ -1 +1,3 @@
1
- ���þ�i�cʞ|� ⦏m4��~����V��o\�d��9�3�2ҹ�ǰd@�(yy�謵��[�k�����!u�"��L(�+�z�\��� ���r�)���l�N�ߌ{c�+�����S7�� ��z�}'��o ���R���ħl�̆����� ����[ jq���'F`��7q�m���p�R�l-�:XB² B��%k��T&�Bᣔ#�__�k�Yf�_�]*M�]mk��Q�B
1
+ ��p\T5|��sSE�*
2
+ _f���O���}!#��� �T�.�re8e5�ȄZ�Z��.��{���R��+�\��/�P�p}7��ܫ�j\�s�" ��ܟ�[S����]�:���„~!$�|&��NƠ�\X��չl!za�����Ӷw�F�Ux�=
3
+ V��U���x��f����Y+������;&���Y��9�E>ߔ��f<�.�H�62d�)���۠�]�x3������/�3tJղfBۅSq &