casino_core 0.0.2 → 0.0.3
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 +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"
         
     |