def initialize(realm, options={})
@realm = realm
realm = URI(realm)
if realm.path.empty?
raise ArgumentError, "Invalid realm path: '#{realm.path}'"
elsif not realm.absolute?
raise ArgumentError, "Realm '#{@realm}' not absolute"
end
[:return_to, :login_good, :login_fail, :login_quit].each do |key|
if options.key? key and luri = URI(options[key])
if !luri.absolute?
raise ArgumentError, ":#{key} is not an absolute uri: '#{luri}'"
end
end
end
if options[:return_to] and ruri = URI(options[:return_to])
if ruri.path.empty?
raise ArgumentError, "Invalid return_to path: '#{ruri.path}'"
elsif realm.path != ruri.path[0, realm.path.size]
raise ArgumentError, 'return_to not within realm.' \
end
end
if extensions = options.delete(:extensions)
extensions.each do |ext, args|
add_extension ext, *args
end
end
@options = {
:session_key => 'rack.session',
:openid_param => 'openid_identifier',
:store => OIDStore,
:immediate => false,
:anonymous => false,
:catch_errors => false
}.merge(options)
@extensions = {}
end