Я использую гем casrack-the-authenticator для аутентификации CAS. Мой сервер работает Thin поверх Sinatra. У меня работает бит аутентификации CAS, но я не уверен, как сказать Rack перехватывать запросы "/index.html" для подтверждения входа в CAS, и если пользователю не разрешено просматривать страницу, вернуть HTTP 403 ответ вместо того, чтобы обслуживать фактическую страницу. У кого-нибудь есть опыт с этим? Спасибо.
Мое приложение:
class Foo < Sinatra::Base
enable :sessions
set :public, "public"
use CasrackTheAuthenticator::Simple, :cas_server => "https://my.cas_server.com"
use CasrackTheAuthenticator::RequireCAS
get '/' do
puts "Hello World"
end
end
Мой файл рэпа:
require 'foo'
use Rack::CommonLogger
use Rack::Lint
run Foo
Первоначальная попытка заставить Rack понять аутентификацию в своей файловой службе (комментарии и мысли приветствуются):
builder = Rack::Builder.new do
map '/foo/index.html' do
run Proc.new { |env|
user = Rack::Request.new(env).session[CasrackTheAuthenticator::USERNAME_PARAM]
[401, { "Content-Type" => "text/html" }, "CAS Authentication Required"] unless user
# Serve index.html because we detected user
}
end
map '/foo' do
run Foo
end
end
run builder