Files
EWF/draft/application/cms/src/modules/openid/openid_module.e
Jocelyn Fiat 52cc356f8e Extracted the WIDGET and FORM classes out of "cms" component
and build the wsf_html library which also include the previous css lib.
2013-03-22 20:11:44 +01:00

142 lines
4.0 KiB
Plaintext

note
description: "Summary description for {OPENID_MODULE}."
author: ""
date: "$Date$"
revision: "$Revision$"
class
OPENID_MODULE
inherit
CMS_MODULE
CMS_HOOK_MENU_ALTER
CMS_HOOK_FORM_ALTER
CMS_HOOK_AUTO_REGISTER
create
make
feature {NONE} -- Initialization
make
do
name := "openid"
version := "1.0"
description := "OpenID login support"
package := "server"
end
feature {CMS_SERVICE} -- Registration
service: detachable CMS_SERVICE
register (a_service: CMS_SERVICE)
do
a_service.map_uri ("/openid/login", agent handle_login)
a_service.add_menu_alter_hook (Current)
service := a_service
end
feature -- Hooks
menu_alter (a_menu_system: CMS_MENU_SYSTEM; a_execution: CMS_EXECUTION)
local
lnk: CMS_LOCAL_LINK
req: WSF_REQUEST
do
req := a_execution.request
if req.path_info.starts_with ("/user") then
if a_execution.authenticated then
create lnk.make ("Openid identities", "/openid/login")
else
create lnk.make ("Login with Openid", "/openid/login")
end
-- a_menu_system.management_menu.extend (lnk)
a_menu_system.primary_tabs.extend (lnk)
end
end
form_alter (a_form: CMS_FORM; a_form_data: detachable WSF_FORM_DATA; a_execution: CMS_EXECUTION)
local
i: WSF_FORM_DIV
fh: WSF_FORM_HIDDEN_INPUT
do
if a_form.id.same_string ("openid-login") then
create i.make_with_text_and_css_id (
"Login with " + a_execution.link ("OpenID", "/openid/login", Void)
+ " , " + a_execution.link ("Google", "/openid/login?openid=https://www.google.com/accounts/o8/id", Void)
+ " , " + a_execution.link ("Yahoo", "/openid/login?openid=https://me.yahoo.com/", Void)
,
"openid"
)
a_form.extend (i)
elseif a_form.id.same_string ("user-login") then
create i.make_with_text_and_css_id (
"Login with " + a_execution.link ("OpenID", "/openid/login", Void)
+ " , " + a_execution.link ("Google", "/openid/login?openid=https://www.google.com/accounts/o8/id", Void)
+ " , " + a_execution.link ("Yahoo", "/openid/login?openid=https://me.yahoo.com/", Void)
,
"openid"
)
if attached a_form.items_by_type ({WSF_WIDGET_TEXT}) as lst and then not lst.is_empty then
a_form.insert_before (i, lst.last)
else
a_form.extend (i)
end
elseif a_form.id.same_string ("user-register") then
if attached {READABLE_STRING_GENERAL} a_execution.session_item ("openid.identity") as l_openid_identity then
create fh.make_with_text ("openid-identity", l_openid_identity.to_string_32)
a_execution.remove_session_item ("openid.identity")
a_form.extend (fh)
a_form.extend_text ("The new account will be associated with OpenID %""+ a_execution.html_encoded (l_openid_identity) +"%"")
if attached {READABLE_STRING_GENERAL} a_execution.session_item ("openid.nickname") as l_openid_nickname then
if attached a_form.fields_by_name ("username") as f_lst then
across
f_lst as c
loop
if attached {WSF_FORM_TEXT_INPUT} c.item as txt then
txt.set_text_value (l_openid_nickname.to_string_32)
end
end
end
a_execution.remove_session_item ("openid.nickname")
end
if attached {READABLE_STRING_GENERAL} a_execution.session_item ("openid.email") as l_openid_email then
if attached a_form.fields_by_name ("email") as f_lst then
across
f_lst as c
loop
if attached {WSF_FORM_TEXT_INPUT} c.item as txt then
txt.set_text_value (l_openid_email.to_string_32)
end
end
end
a_execution.remove_session_item ("openid.email")
end
a_form.submit_actions.extend (agent openid_user_register_submitted)
end
end
end
openid_user_register_submitted (a_form_data: WSF_FORM_DATA)
do
end
feature -- Access
handle_login (req: WSF_REQUEST; res: WSF_RESPONSE)
do
if attached service as l_service then
(create {OPENID_CMS_EXECUTION}.make (req, res, l_service)).execute
else
res.set_status_code ({HTTP_STATUS_CODE}.expectation_failed)
end
end
end