Module: CASino::TicketGrantingTicketProcessor

Extended by:
ActiveSupport::Concern
Includes:
BrowserProcessor
Included in:
SessionsHelper
Defined in:
app/processors/casino/ticket_granting_ticket_processor.rb

Instance Method Summary collapse

Methods included from BrowserProcessor

#browser_info, #same_browser?

Instance Method Details

#acquire_ticket_granting_ticket(authentication_result, user_agent, options = {}) ⇒ Object



28
29
30
31
32
33
34
35
36
37
# File 'app/processors/casino/ticket_granting_ticket_processor.rb', line 28

def acquire_ticket_granting_ticket(authentication_result, user_agent, options = {})
  user_data = authentication_result[:user_data]
  user = load_or_initialize_user(authentication_result[:authenticator], user_data[:username], user_data[:extra_attributes])
  cleanup_expired_ticket_granting_tickets(user)
  user.ticket_granting_tickets.create!({
    awaiting_two_factor_authentication: !user.active_two_factor_authenticator.nil?,
    user_agent: user_agent,
    long_term: !!options[:long_term]
  })
end

#cleanup_expired_ticket_granting_tickets(user) ⇒ Object



53
54
55
# File 'app/processors/casino/ticket_granting_ticket_processor.rb', line 53

def cleanup_expired_ticket_granting_tickets(user)
  CASino::TicketGrantingTicket.cleanup(user)
end

#find_valid_ticket_granting_ticket(ticket, user_agent, options = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'app/processors/casino/ticket_granting_ticket_processor.rb', line 6

def find_valid_ticket_granting_ticket(ticket, user_agent, options = {})
  tgt = CASino::TicketGrantingTicket.where(ticket: ticket).first
  unless tgt.nil?
    if tgt.expired?
      Rails.logger.info "Ticket-granting ticket expired (Created: #{tgt.created_at})"
      tgt.destroy
      nil
    elsif !options[:ignore_two_factor] && tgt.awaiting_two_factor_authentication?
      Rails.logger.info 'Ticket-granting ticket is valid, but two-factor authentication is pending'
      nil
    elsif same_browser?(tgt.user_agent, user_agent)
      tgt.user_agent = user_agent
      tgt.touch
      tgt.save!
      tgt
    else
      Rails.logger.info 'User-Agent changed: ticket-granting ticket not valid for this browser'
      nil
    end
  end
end

#load_or_initialize_user(authenticator, username, extra_attributes) ⇒ Object



39
40
41
42
43
44
45
46
# File 'app/processors/casino/ticket_granting_ticket_processor.rb', line 39

def load_or_initialize_user(authenticator, username, extra_attributes)
  user = CASino::User
    .where(authenticator: authenticator, username: username)
    .first_or_initialize
  user.extra_attributes = extra_attributes
  user.save!
  return user
end

#remove_ticket_granting_ticket(ticket_granting_ticket, user_agent) ⇒ Object



48
49
50
51
# File 'app/processors/casino/ticket_granting_ticket_processor.rb', line 48

def remove_ticket_granting_ticket(ticket_granting_ticket, user_agent)
  tgt = find_valid_ticket_granting_ticket(ticket_granting_ticket, user_agent)
  tgt.destroy unless tgt.nil?
end