class Cas::Client::Middleware

Public Class Methods

new(app, &block) click to toggle source
# File lib/cas/client/middleware.rb, line 6
def initialize(app, &block)
  @app = app

  Cas::Client.configure(&block) if block_given?
end

Public Instance Methods

call(env) click to toggle source
# File lib/cas/client/middleware.rb, line 12
def call(env)
  @request = Rack::Request.new(env)
  status, headers, rack_body = @app.call(env)

  if ticket_validation?
    attributes = server.validate_service(self_url, ticket_param)
    set_session(attributes)

    return redirect_to(self_url)
  elsif status == 401
    log(env, "Cas::Client::Middleware detected 401, Status: #{status}, Headers: #{headers}\n")

    return redirect_to(server.login_url({ service_url: self_url }))
  else
    return [status, headers, rack_body]
  end
end

Private Instance Methods

log(env, message, level = :info) click to toggle source
# File lib/cas/client/middleware.rb, line 61
def log(env, message, level = :info)
  if env['rack.logger']
    env['rack.logger'].send(level, message)
  else
    env['rack.errors'].write(message)
  end
end
param_service_ticket?() click to toggle source
# File lib/cas/client/middleware.rb, line 57
def param_service_ticket?
  ticket_param.to_s =~ /\AST\-[^\s]{1,253}\Z/
end
redirect_to(url, status=302) click to toggle source
# File lib/cas/client/middleware.rb, line 41
def redirect_to(url, status=302)
  [ status, { 'Location' => url, 'Content-Type' => 'text/plain' }, ["Redirecting you to #{url}"] ]
end
self_url() click to toggle source
# File lib/cas/client/middleware.rb, line 45
def self_url
  @request.url.split('?')[0]
end
server() click to toggle source
# File lib/cas/client/middleware.rb, line 32
def server
  @_server ||= Cas::Client::Server.new
end
set_session(attributes) click to toggle source
# File lib/cas/client/middleware.rb, line 36
def set_session(attributes)
  attributes[:ticket] = ticket_param
  @request.session['cas'] = attributes
end
ticket_param() click to toggle source
# File lib/cas/client/middleware.rb, line 53
def ticket_param
  @request.params['ticket']
end
ticket_validation?() click to toggle source
# File lib/cas/client/middleware.rb, line 49
def ticket_validation?
  @request.get? && param_service_ticket?
end