note
description : "OPENID demo application root class"
date : "$Date$"
revision : "$Revision$"
class
APPLICATION_EXECUTION
inherit
WSF_ROUTED_SKELETON_EXECUTION
undefine
requires_proxy
end
WSF_ROUTED_URI_TEMPLATE_HELPER
WSF_NO_PROXY_POLICY
SHARED_EXECUTION_ENVIRONMENT
export
{NONE} all
end
create
make
feature {NONE} -- Initialization
setup_router
do
map_uri_template_agent ("/", agent handle_root, Void)
map_uri_template_agent ("/openid", agent handle_openid, Void)
end
handle_root (req: WSF_REQUEST; res: WSF_RESPONSE)
local
m: WSF_HTML_PAGE_RESPONSE
s: STRING
do
create m.make
m.set_title ("EWF::OpenID demo")
create s.make_empty
s.append ("
%N")
s.append ("%N")
m.set_body (s)
res.send (m)
end
handle_openid (req: WSF_REQUEST; res: WSF_RESPONSE)
local
m: WSF_HTML_PAGE_RESPONSE
redir: WSF_HTML_DELAYED_REDIRECTION_RESPONSE
s: STRING
o: OPENID_CONSUMER
v: OPENID_CONSUMER_VALIDATION
do
if attached req.string_item ("openid.mode") as l_openid_mode then
create m.make
m.set_title ("EWF::OpenID demo")
create s.make_empty
if l_openid_mode.same_string ("id_res") then
o := new_openid_consumer (req)
create v.make_from_items (o, req.items_as_string_items)
v.validate
if v.is_valid then
s.append ("User authenticated
")
s.append ("Request items")
across
req.items as c
loop
s.append ("- " + c.item.url_encoded_name + "=" + c.item.string_representation + "
")
end
s.append ("
")
s.append ("Attributes")
across
v.attributes as c
loop
s.append ("- " + c.key + "=" + c.item + "
")
end
s.append ("
")
else
s.append ("User authentication failed!!!
")
end
else
s.append ("Unexpected OpenID.mode=" + l_openid_mode + "
")
end
m.set_body (s)
res.send (m)
elseif attached req.string_item ("openid_identifier") as l_id then
create s.make_empty
o := new_openid_consumer (req)
s.append ("Testing " + l_id + "
%N")
s.append ("Return-to" + o.return_url + "
")
if attached o.auth_url (l_id) as l_auth_url then
s.append ("Click to sign with " + l_id + "
")
create redir.make (l_auth_url, 1)
s.append ("Automatically follow link in " + redir.delay.out + " second(s)
")
redir.set_title ("EWF::OpenID demo")
redir.set_body (s)
res.send (redir)
else
create m.make
m.set_title ("EWF::OpenID demo")
m.set_body (s)
res.send (m)
end
else
res.redirect_now ("/")
end
end
new_openid_consumer (req: WSF_REQUEST): OPENID_CONSUMER
do
create Result.make (req.absolute_script_url ("/openid"))
Result.ask_email (True)
Result.ask_all_info (False)
-- Result.ask_nickname (False)
-- Result.ask_fullname (False)
-- Result.ask_country (True)
end
end