Module: CASinoCore::Helper::TicketGrantingTickets

Instance Method Summary collapse

Methods included from Logger

#logger

Methods included from Browser

#browser_info, #same_browser?

Instance Method Details

#acquire_ticket_granting_ticket(authentication_result, user_agent = nil, long_term = nil) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
# File 'lib/casino_core/helper/ticket_granting_tickets.rb', line 32

def acquire_ticket_granting_ticket(authentication_result, user_agent = nil, long_term = nil)
  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!({
    ticket: random_ticket_string('TGC'),
    awaiting_two_factor_authentication: !user.active_two_factor_authenticator.nil?,
    user_agent: user_agent,
    long_term: !!long_term
  })
end

#cleanup_expired_ticket_granting_tickets(user) ⇒ Object



60
61
62
# File 'lib/casino_core/helper/ticket_granting_tickets.rb', line 60

def cleanup_expired_ticket_granting_tickets(user)
  CASinoCore::Model::TicketGrantingTicket.cleanup(user)
end

#find_valid_ticket_granting_ticket(tgt, user_agent, ignore_two_factor = false) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/casino_core/helper/ticket_granting_tickets.rb', line 10

def find_valid_ticket_granting_ticket(tgt, user_agent, ignore_two_factor = false)
  ticket_granting_ticket = CASinoCore::Model::TicketGrantingTicket.where(ticket: tgt).first
  unless ticket_granting_ticket.nil?
    if ticket_granting_ticket.expired?
      logger.info "Ticket-granting ticket expired (Created: #{ticket_granting_ticket.created_at})"
      ticket_granting_ticket.destroy
      nil
    elsif !ignore_two_factor && ticket_granting_ticket.awaiting_two_factor_authentication?
      logger.info 'Ticket-granting ticket is valid, but two-factor authentication is pending'
      nil
    elsif same_browser?(ticket_granting_ticket.user_agent, user_agent)
      ticket_granting_ticket.user_agent = user_agent
      ticket_granting_ticket.touch
      ticket_granting_ticket.save!
      ticket_granting_ticket
    else
      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



44
45
46
47
48
49
50
51
# File 'lib/casino_core/helper/ticket_granting_tickets.rb', line 44

def load_or_initialize_user(authenticator, username, extra_attributes)
  user = CASinoCore::Model::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 = nil) ⇒ Object



53
54
55
56
57
58
# File 'lib/casino_core/helper/ticket_granting_tickets.rb', line 53

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