casino_core 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/casino_core.gemspec +4 -1
- data/lib/casino_core/helper/ticket_granting_tickets.rb +24 -0
- data/lib/casino_core/helper.rb +1 -0
- data/lib/casino_core/model/ticket_granting_ticket.rb +5 -0
- data/lib/casino_core/processor/login_credential_requestor.rb +1 -15
- data/lib/casino_core/processor/session_overview.rb +25 -0
- data/lib/casino_core/processor.rb +1 -0
- data/spec/processor/session_overview_spec.rb +50 -0
- metadata +5 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/casino_core.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "casino_core"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Nils Caspar"]
|
@@ -50,6 +50,7 @@ Gem::Specification.new do |s|
|
|
50
50
|
"lib/casino_core/helper/logger.rb",
|
51
51
|
"lib/casino_core/helper/login_tickets.rb",
|
52
52
|
"lib/casino_core/helper/service_tickets.rb",
|
53
|
+
"lib/casino_core/helper/ticket_granting_tickets.rb",
|
53
54
|
"lib/casino_core/helper/tickets.rb",
|
54
55
|
"lib/casino_core/model.rb",
|
55
56
|
"lib/casino_core/model/login_ticket.rb",
|
@@ -63,6 +64,7 @@ Gem::Specification.new do |s|
|
|
63
64
|
"lib/casino_core/processor/login_credential_requestor.rb",
|
64
65
|
"lib/casino_core/processor/logout.rb",
|
65
66
|
"lib/casino_core/processor/session_destroyer.rb",
|
67
|
+
"lib/casino_core/processor/session_overview.rb",
|
66
68
|
"lib/casino_core/railtie.rb",
|
67
69
|
"lib/casino_core/rake_tasks.rb",
|
68
70
|
"lib/casino_core/settings.rb",
|
@@ -76,6 +78,7 @@ Gem::Specification.new do |s|
|
|
76
78
|
"spec/processor/login_credential_requestor_spec.rb",
|
77
79
|
"spec/processor/logout_spec.rb",
|
78
80
|
"spec/processor/session_destroyer_spec.rb",
|
81
|
+
"spec/processor/session_overview_spec.rb",
|
79
82
|
"spec/spec_helper.rb"
|
80
83
|
]
|
81
84
|
s.homepage = "http://github.com/pencil/CASinoCore"
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'addressable/uri'
|
2
|
+
|
3
|
+
module CASinoCore
|
4
|
+
module Helper
|
5
|
+
module TicketGrantingTickets
|
6
|
+
include CASinoCore::Helper::Browser
|
7
|
+
include CASinoCore::Helper::Logger
|
8
|
+
|
9
|
+
def find_valid_ticket_granting_ticket(tgt, user_agent)
|
10
|
+
ticket_granting_ticket = CASinoCore::Model::TicketGrantingTicket.where(ticket: tgt).first
|
11
|
+
unless ticket_granting_ticket.nil?
|
12
|
+
if same_browser?(ticket_granting_ticket.user_agent, user_agent)
|
13
|
+
ticket_granting_ticket.user_agent = user_agent
|
14
|
+
ticket_granting_ticket.save!
|
15
|
+
ticket_granting_ticket
|
16
|
+
else
|
17
|
+
logger.info 'User-Agent changed: ticket-granting ticket not valid for this browser'
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/casino_core/helper.rb
CHANGED
@@ -8,5 +8,6 @@ module CASinoCore
|
|
8
8
|
autoload :LoginTickets, 'casino_core/helper/login_tickets.rb'
|
9
9
|
autoload :ServiceTickets, 'casino_core/helper/service_tickets.rb'
|
10
10
|
autoload :Tickets, 'casino_core/helper/tickets.rb'
|
11
|
+
autoload :TicketGrantingTickets, 'casino_core/helper/ticket_granting_tickets.rb'
|
11
12
|
end
|
12
13
|
end
|
@@ -6,4 +6,9 @@ class CASinoCore::Model::TicketGrantingTicket < ActiveRecord::Base
|
|
6
6
|
validates :ticket, uniqueness: true
|
7
7
|
has_many :service_tickets
|
8
8
|
has_many :proxy_granting_tickets
|
9
|
+
|
10
|
+
def browser_info
|
11
|
+
user_agent = UserAgent.parse(self.user_agent)
|
12
|
+
"#{user_agent.browser} (#{user_agent.platform})"
|
13
|
+
end
|
9
14
|
end
|
@@ -6,6 +6,7 @@ class CASinoCore::Processor::LoginCredentialRequestor < CASinoCore::Processor
|
|
6
6
|
include CASinoCore::Helper::Logger
|
7
7
|
include CASinoCore::Helper::LoginTickets
|
8
8
|
include CASinoCore::Helper::ServiceTickets
|
9
|
+
include CASinoCore::Helper::TicketGrantingTickets
|
9
10
|
|
10
11
|
def process(params = nil, cookies = nil, user_agent = nil)
|
11
12
|
params ||= {}
|
@@ -21,19 +22,4 @@ class CASinoCore::Processor::LoginCredentialRequestor < CASinoCore::Processor
|
|
21
22
|
@listener.user_not_logged_in(login_ticket)
|
22
23
|
end
|
23
24
|
end
|
24
|
-
|
25
|
-
private
|
26
|
-
def find_valid_ticket_granting_ticket(tgt, user_agent)
|
27
|
-
ticket_granting_ticket = CASinoCore::Model::TicketGrantingTicket.where(ticket: tgt).first
|
28
|
-
unless ticket_granting_ticket.nil?
|
29
|
-
if same_browser?(ticket_granting_ticket.user_agent, user_agent)
|
30
|
-
ticket_granting_ticket.user_agent = user_agent
|
31
|
-
ticket_granting_ticket.save!
|
32
|
-
ticket_granting_ticket
|
33
|
-
else
|
34
|
-
logger.info 'User-Agent changed: ticket-granting ticket not valid for this browser'
|
35
|
-
nil
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
25
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'casino_core/processor'
|
2
|
+
require 'casino_core/helper'
|
3
|
+
require 'casino_core/model'
|
4
|
+
|
5
|
+
# The SessionOverview processor to list all open session for the currently signed in user.
|
6
|
+
#
|
7
|
+
# This feature is not described in the CAS specification so it's completly optional
|
8
|
+
# to implement this on the web application side.
|
9
|
+
class CASinoCore::Processor::SessionOverview < CASinoCore::Processor
|
10
|
+
include CASinoCore::Helper::TicketGrantingTickets
|
11
|
+
|
12
|
+
# This method will call `#user_not_logged_in` or `#ticket_granting_tickets_found(Enumerable)` on the listener.
|
13
|
+
# @param [Hash] cookies cookies delivered by the client
|
14
|
+
# @param [String] user_agent user-agent delivered by the client
|
15
|
+
def process(cookies = nil, user_agent = nil)
|
16
|
+
cookies ||= {}
|
17
|
+
tgt = find_valid_ticket_granting_ticket(cookies[:tgt], user_agent)
|
18
|
+
if tgt.nil?
|
19
|
+
@listener.user_not_logged_in
|
20
|
+
else
|
21
|
+
ticket_granting_tickets = CASinoCore::Model::TicketGrantingTicket.where(username: tgt.username).order('updated_at DESC')
|
22
|
+
@listener.ticket_granting_tickets_found(ticket_granting_tickets)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -7,6 +7,7 @@ module CASinoCore
|
|
7
7
|
autoload :LoginCredentialRequestor, 'casino_core/processor/login_credential_requestor.rb'
|
8
8
|
autoload :Logout, 'casino_core/processor/logout.rb'
|
9
9
|
autoload :SessionDestroyer, 'casino_core/processor/session_destroyer.rb'
|
10
|
+
autoload :SessionOverview, 'casino_core/processor/session_overview.rb'
|
10
11
|
|
11
12
|
def initialize(listener)
|
12
13
|
@listener = listener
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CASinoCore::Processor::SessionOverview do
|
4
|
+
describe '#process' do
|
5
|
+
let(:listener) { Object.new }
|
6
|
+
let(:processor) { described_class.new(listener) }
|
7
|
+
let(:user_agent) { 'TestBrowser 1.0' }
|
8
|
+
let(:other_ticket_granting_ticket) {
|
9
|
+
CASinoCore::Model::TicketGrantingTicket.create!({
|
10
|
+
ticket: 'TGC-ocCudGzZjJtrvOXJ485mt3',
|
11
|
+
username: 'test',
|
12
|
+
extra_attributes: nil,
|
13
|
+
user_agent: user_agent
|
14
|
+
})
|
15
|
+
}
|
16
|
+
let(:cookies) { { tgt: tgt } }
|
17
|
+
|
18
|
+
before(:each) do
|
19
|
+
listener.stub(:user_not_logged_in)
|
20
|
+
listener.stub(:ticket_granting_tickets_found)
|
21
|
+
other_ticket_granting_ticket
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'with an existing ticket-granting ticket' do
|
25
|
+
let(:ticket_granting_ticket) {
|
26
|
+
CASinoCore::Model::TicketGrantingTicket.create!({
|
27
|
+
ticket: 'TGC-HXdkW233TsRtiqYGq4b8U7',
|
28
|
+
username: 'test',
|
29
|
+
extra_attributes: nil,
|
30
|
+
user_agent: user_agent
|
31
|
+
})
|
32
|
+
}
|
33
|
+
let(:tgt) { ticket_granting_ticket.ticket }
|
34
|
+
it 'calls the #ticket_granting_tickets_found method on the listener' do
|
35
|
+
listener.should_receive(:ticket_granting_tickets_found) do |tickets|
|
36
|
+
tickets.length.should == 2
|
37
|
+
end
|
38
|
+
processor.process(cookies, user_agent)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'with an invalid ticket-granting ticket' do
|
43
|
+
let(:tgt) { 'TGT-lalala' }
|
44
|
+
it 'calls the #user_not_logged_in method on the listener' do
|
45
|
+
listener.should_receive(:user_not_logged_in).with(no_args)
|
46
|
+
processor.process(cookies, user_agent)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: casino_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Nils Caspar
|
@@ -176,6 +176,7 @@ files:
|
|
176
176
|
- lib/casino_core/helper/logger.rb
|
177
177
|
- lib/casino_core/helper/login_tickets.rb
|
178
178
|
- lib/casino_core/helper/service_tickets.rb
|
179
|
+
- lib/casino_core/helper/ticket_granting_tickets.rb
|
179
180
|
- lib/casino_core/helper/tickets.rb
|
180
181
|
- lib/casino_core/model.rb
|
181
182
|
- lib/casino_core/model/login_ticket.rb
|
@@ -189,6 +190,7 @@ files:
|
|
189
190
|
- lib/casino_core/processor/login_credential_requestor.rb
|
190
191
|
- lib/casino_core/processor/logout.rb
|
191
192
|
- lib/casino_core/processor/session_destroyer.rb
|
193
|
+
- lib/casino_core/processor/session_overview.rb
|
192
194
|
- lib/casino_core/railtie.rb
|
193
195
|
- lib/casino_core/rake_tasks.rb
|
194
196
|
- lib/casino_core/settings.rb
|
@@ -202,6 +204,7 @@ files:
|
|
202
204
|
- spec/processor/login_credential_requestor_spec.rb
|
203
205
|
- spec/processor/logout_spec.rb
|
204
206
|
- spec/processor/session_destroyer_spec.rb
|
207
|
+
- spec/processor/session_overview_spec.rb
|
205
208
|
- spec/spec_helper.rb
|
206
209
|
homepage: http://github.com/pencil/CASinoCore
|
207
210
|
licenses:
|
@@ -216,7 +219,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
216
219
|
requirements:
|
217
220
|
- - ">="
|
218
221
|
- !ruby/object:Gem::Version
|
219
|
-
hash:
|
222
|
+
hash: 4231038589682610511
|
220
223
|
segments:
|
221
224
|
- 0
|
222
225
|
version: "0"
|