module Sinatra::CasHelper

Constants

CAS_CLIENT

Public Instance Methods

authenticated(model) click to toggle source
# File lib/sinatra/helpers/cas.rb, line 53
def authenticated(model)
  raise 500 if session[:cas_user].nil? || session[:cas_user].empty?
  model.find(:hxt_id => "#{session[:cas_user]}")
end
logged_in?(request, session) click to toggle source
# File lib/sinatra/helpers/cas.rb, line 41
def logged_in?(request, session)
  session[:cas_ticket] && !session[:cas_ticket].empty?
end
need_authentication(request, session) click to toggle source
# File lib/sinatra/helpers/cas.rb, line 10
def need_authentication(request, session)
  if session[:cas_ticket]
    if request[:ticket] && session[:cas_ticket] != request[:ticket]
      true
    else
      false
    end
  else
    true
  end
end
process_cas_login(request, session) click to toggle source
# File lib/sinatra/helpers/cas.rb, line 22
def process_cas_login(request, session)
  if request[:ticket] && request[:ticket] != session[:ticket]

    service_url = read_service_url(request)
    service_ticket = read_ticket(request[:ticket], service_url)

    CAS_CLIENT.validate_service_ticket(service_ticket)

    if service_ticket.success
      session[:cas_ticket] = service_ticket.ticket
      session[:cas_user] = service_ticket.user
    else
      redirect request.path_info
      #raise "Service Ticket validation failed! #{st.failure_code} - #{st.failure_message}"
    end
  end

end
require_authorization(request, session) click to toggle source
# File lib/sinatra/helpers/cas.rb, line 45
def require_authorization(request, session)
  if !logged_in?(request, session)
    service_url = read_service_url(request)
    url = CAS_CLIENT.add_service_to_login_url(service_url)
    redirect url
  end
end

Private Instance Methods

logout_cas(request, session) click to toggle source
# File lib/sinatra/helpers/cas.rb, line 81
def logout_cas(request, session)
  if logged_in?(request, session)
    url = CAS_CLIENT.logout_url()
    session.clear
    str = request.referer || ''
    comeback = "=" + (str.include?("?")? str.slice(0..(str.index('?')-1)) : str) #Hack mal!
    redirect url + (url.include?("?service")? "" : "?service") + comeback
  end
end
read_service_url(request) click to toggle source
# File lib/sinatra/helpers/cas.rb, line 69
def read_service_url(request)
  service_url = url(request.path_info)
  if request.GET
    params = request.GET.dup
    params.delete(:ticket)
    if params
      [service_url, Rack::Utils.build_nested_query(params)].join('?')
    end
  end
  return service_url
end
read_ticket(ticket_str, service_url) click to toggle source
# File lib/sinatra/helpers/cas.rb, line 59
def read_ticket(ticket_str, service_url)
  return nil unless ticket_str and !ticket_str.empty?

  if ticket_str =~ /^PT-/
    CASClient::ProxyTicket.new(ticket_str, service_url)
  else
    CASClient::ServiceTicket.new(ticket_str, service_url)
  end
end