Class: Castronaut::Models::ServiceTicket
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Castronaut::Models::ServiceTicket
- Includes:
- Consumeable, Dispenser
- Defined in:
- lib/castronaut/models/service_ticket.rb
Direct Known Subclasses
Constant Summary collapse
- MissingMessage =
"Ticket or service parameter was missing in the request."
Class Method Summary collapse
- .generate_ticket_for(service, client_host, ticket_granting_ticket) ⇒ Object
- .validate_ticket(service, ticket, allow_proxy_tickets = false) ⇒ Object
Instance Method Summary collapse
- #expired? ⇒ Boolean
- #matches_service?(other_service) ⇒ Boolean
- #proxies ⇒ Object
- #service_uri ⇒ Object
- #ticket_prefix ⇒ Object
Methods included from Consumeable
Class Method Details
.generate_ticket_for(service, client_host, ticket_granting_ticket) ⇒ Object
19 20 21 22 23 24 |
# File 'lib/castronaut/models/service_ticket.rb', line 19 def self.generate_ticket_for(service, client_host, ticket_granting_ticket) create! :service => service, :username => ticket_granting_ticket.username, :client_hostname => client_host, :ticket_granting_ticket => ticket_granting_ticket end |
.validate_ticket(service, ticket, allow_proxy_tickets = false) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/castronaut/models/service_ticket.rb', line 26 def self.validate_ticket(service, ticket, allow_proxy_tickets = false) return Castronaut::TicketResult.new(nil, MissingMessage, "INVALID_REQUEST") unless service && ticket service_ticket = find_by_ticket(ticket) return Castronaut::TicketResult.new(nil, "Ticket #{ticket} not recognized.", "INVALID_TICKET") unless service_ticket return Castronaut::TicketResult.new(service_ticket, "Ticket '#{ticket}' has already been used up.", "INVALID_TICKET") if service_ticket.consumed? service_ticket.consume! if service_ticket === Castronaut::Models::ProxyTicket && !allow_proxy_tickets return Castronaut::TicketResult.new(service_ticket, "Ticket '#{ticket}' is a proxy ticket, but only service tickets are allowed here.", "INVALID_TICKET") end return Castronaut::TicketResult.new(service_ticket, "Ticket '#{ticket}' has expired.", "INVALID_TICKET") if service_ticket.expired? = "The ticket '#{ticket}' belonging to user '#{service_ticket.username}' is valid, but the requested service '#{service}' does not match the service '#{service_ticket.service}' associated with this ticket." return Castronaut::TicketResult.new(service_ticket, , "INVALID_SERVICE") unless service_ticket.matches_service?(service) Castronaut::TicketResult.new(service_ticket, nil, "success") end |
Instance Method Details
#expired? ⇒ Boolean
81 82 83 |
# File 'lib/castronaut/models/service_ticket.rb', line 81 def expired? # Time.now - service_ticket.created_on > CASServer::Conf.service_ticket_expiry end |
#matches_service?(other_service) ⇒ Boolean
51 52 53 |
# File 'lib/castronaut/models/service_ticket.rb', line 51 def matches_service?(other_service) service == other_service end |
#proxies ⇒ Object
85 86 |
# File 'lib/castronaut/models/service_ticket.rb', line 85 def proxies end |
#service_uri ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/castronaut/models/service_ticket.rb', line 55 def service_uri return nil if service.blank? begin raw_uri = URI.parse(service) if service.include? "?" if raw_uri.query.empty? query_separator = "" else query_separator = "&" end else query_separator = "?" end "#{service}#{query_separator}ticket=#{ticket}" rescue URI::InvalidURIError nil end end |
#ticket_prefix ⇒ Object
77 78 79 |
# File 'lib/castronaut/models/service_ticket.rb', line 77 def ticket_prefix "ST" end |