142 lines
4.0 KiB
Plaintext
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
|