Sha256: 0880cbcf08d96188abf03de0a21812b4faafe5a9dd237dc49ec4e81afef25d2f

Contents?: true

Size: 1.36 KB

Versions: 9

Compression:

Stored size: 1.36 KB

Contents

require 'faraday'

module CASino::ProxyGrantingTicketProcessor
  extend ActiveSupport::Concern

  def acquire_proxy_granting_ticket(pgt_url, service_ticket)
    callback_uri = Addressable::URI.parse(pgt_url)
    if callback_uri.scheme != 'https'
      Rails.logger.warn "Proxy tickets can only be granted to callback servers using HTTPS."
      nil
    else
      contact_callback_server(callback_uri, service_ticket)
    end
  end

  private
  def contact_callback_server(callback_uri, service_ticket)
    pgt = service_ticket.proxy_granting_tickets.new({
      pgt_url: "#{callback_uri}"
    })
    return unless pgt.valid?
    callback_uri.query_values = (callback_uri.query_values || {}).merge(pgtId: pgt.ticket, pgtIou: pgt.iou)
    response = Faraday.get "#{callback_uri}"
    # TODO: does this follow redirects? CAS specification says that redirects MAY be followed (2.5.4)
    if response.success?
      pgt.save!
      Rails.logger.debug "Proxy-granting ticket generated for service '#{service_ticket.service}': #{pgt.inspect}"
      pgt
    else
      Rails.logger.warn "Proxy-granting ticket callback server responded with a bad result code '#{response.status}'. PGT will not be stored."
      nil
    end
  rescue Faraday::Error::ClientError => error
    Rails.logger.warn "Exception while communicating with proxy-granting ticket callback server: #{error.message}"
    nil
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
casino-4.1.2 app/processors/casino/proxy_granting_ticket_processor.rb
casino-4.1.1 app/processors/casino/proxy_granting_ticket_processor.rb
casino-4.1.0 app/processors/casino/proxy_granting_ticket_processor.rb
casino-4.0.3 app/processors/casino/proxy_granting_ticket_processor.rb
casino-4.0.2 app/processors/casino/proxy_granting_ticket_processor.rb
casino-4.0.1 app/processors/casino/proxy_granting_ticket_processor.rb
casino-4.0.0 app/processors/casino/proxy_granting_ticket_processor.rb
casino-4.0.0.pre.2 app/processors/casino/proxy_granting_ticket_processor.rb
casino-4.0.0.pre.1 app/processors/casino/proxy_granting_ticket_processor.rb