note description: "Module Auth" date: "$Date: 2015-05-20 06:50:50 -0300 (mi. 20 de may. de 2015) $" revision: "$Revision: 97328 $" class CMS_AUTHENTICATION_MODULE inherit CMS_MODULE redefine register_hooks end CMS_HOOK_AUTO_REGISTER CMS_HOOK_MENU_SYSTEM_ALTER SHARED_EXECUTION_ENVIRONMENT export {NONE} all end REFACTORING_HELPER SHARED_LOGGER CMS_REQUEST_UTIL create make feature {NONE} -- Initialization make -- Create current module do version := "1.0" description := "Authentication module" package := "authentication" create root_dir.make_current cache_duration := 0 end feature -- Access name: STRING = "auth" feature -- Access: docs root_dir: PATH cache_duration: INTEGER -- Caching duration --| 0: disable --| -1: cache always valie --| nb: cache expires after nb seconds. cache_disabled: BOOLEAN do Result := cache_duration = 0 end feature -- Router setup_router (a_router: WSF_ROUTER; a_api: CMS_API) -- do configure_web (a_api, a_router) end configure_web (a_api: CMS_API; a_router: WSF_ROUTER) do a_router.handle ("/account/roc-login", create {WSF_URI_AGENT_HANDLER}.make (agent handle_login (a_api, ?, ?)), a_router.methods_head_get) a_router.handle ("/account/roc-logout", create {WSF_URI_AGENT_HANDLER}.make (agent handle_logout (a_api, ?, ?)), a_router.methods_head_get) end feature -- Hooks configuration register_hooks (a_response: CMS_RESPONSE) -- Module hooks configuration. do auto_subscribe_to_hooks (a_response) end menu_system_alter (a_menu_system: CMS_MENU_SYSTEM; a_response: CMS_RESPONSE) -- Hook execution on collection of menu contained by `a_menu_system' -- for related response `a_response'. local lnk: CMS_LOCAL_LINK do if attached a_response.current_user (a_response.request) as u then create lnk.make (u.name + " (Logout)", "account/roc-logout" ) lnk.set_weight (98) a_menu_system.primary_menu.extend (lnk) else create lnk.make ("Login", "account/roc-login") lnk.set_weight (98) a_menu_system.primary_menu.extend (lnk) end end feature -- Handler handle_login (api: CMS_API; req: WSF_REQUEST; res: WSF_RESPONSE) local r: CMS_RESPONSE do if attached api.module_by_name ("basic_auth") then -- FIXME: find better solution to support a default login system. create {GENERIC_VIEW_CMS_RESPONSE} r.make (req, res, api) r.set_redirection (r.absolute_url ("/account/roc-basic-auth", Void)) r.execute else create {GENERIC_VIEW_CMS_RESPONSE} r.make (req, res, api) r.set_value ("Login", "optional_content_type") r.execute end end handle_logout (api: CMS_API; req: WSF_REQUEST; res: WSF_RESPONSE) local r: CMS_RESPONSE do create {GENERIC_VIEW_CMS_RESPONSE} r.make (req, res, api) r.set_redirection (r.absolute_url ("", Void)) r.execute end note copyright: "Copyright (c) 1984-2013, Eiffel Software and others" license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" source: "[ Eiffel Software 5949 Hollister Ave., Goleta, CA 93117 USA Telephone 805-685-1006, Fax 805-685-6869 Website http://www.eiffel.com Customer support http://support.eiffel.com ]" end