Initial CMS API commmit.
This commit is contained in:
60
examples/api/src/service/filter/authentication_filter.e
Normal file
60
examples/api/src/service/filter/authentication_filter.e
Normal file
@@ -0,0 +1,60 @@
|
||||
note
|
||||
description: "Authentication filter."
|
||||
author: "Olivier Ligot"
|
||||
date: "$Date: 2014-08-20 15:21:15 -0300 (mi., 20 ago. 2014) $"
|
||||
revision: "$Revision: 95678 $"
|
||||
|
||||
class
|
||||
AUTHENTICATION_FILTER
|
||||
|
||||
inherit
|
||||
WSF_URI_TEMPLATE_HANDLER
|
||||
|
||||
APP_ABSTRACT_HANDLER
|
||||
rename
|
||||
set_esa_config as make
|
||||
end
|
||||
WSF_FILTER
|
||||
|
||||
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature -- Basic operations
|
||||
|
||||
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute the filter
|
||||
local
|
||||
l_auth: HTTP_AUTHORIZATION
|
||||
do
|
||||
log.write_debug (generator + ".execute " )
|
||||
create l_auth.make (req.http_authorization)
|
||||
if attached req.raw_header_data as l_raw_data then
|
||||
log.write_debug (generator + ".execute " + l_raw_data )
|
||||
end
|
||||
-- A valid user
|
||||
if (attached l_auth.type as l_auth_type and then l_auth_type.is_case_insensitive_equal ("basic")) and then
|
||||
attached l_auth.login as l_auth_login and then attached l_auth.password as l_auth_password then
|
||||
if api_service.login_valid (l_auth_login, l_auth_password) then
|
||||
if attached api_service.user_by_name (l_auth_login) as l_user then
|
||||
req.set_execution_variable ("user", l_user)
|
||||
execute_next (req, res)
|
||||
else
|
||||
-- Internal server error
|
||||
end
|
||||
else
|
||||
log.write_error (generator + ".execute login_valid failed for: " + l_auth_login )
|
||||
execute_next (req, res)
|
||||
end
|
||||
else
|
||||
log.write_error (generator + ".execute Not valid")
|
||||
execute_next (req, res)
|
||||
end
|
||||
end
|
||||
|
||||
note
|
||||
copyright: "2011-2012, Olivier Ligot, Jocelyn Fiat and others"
|
||||
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
||||
|
||||
end
|
||||
27
examples/api/src/service/filter/cors_filter.e
Normal file
27
examples/api/src/service/filter/cors_filter.e
Normal file
@@ -0,0 +1,27 @@
|
||||
note
|
||||
description: "CORS filter"
|
||||
date: "$Date: 2014-08-08 16:02:11 -0300 (vi., 08 ago. 2014) $"
|
||||
revision: "$Revision: 95593 $"
|
||||
|
||||
class
|
||||
CORS_FILTER
|
||||
|
||||
inherit
|
||||
WSF_FILTER
|
||||
|
||||
feature -- Basic operations
|
||||
|
||||
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute the filter.
|
||||
local
|
||||
l_header: HTTP_HEADER
|
||||
do
|
||||
create l_header.make
|
||||
-- l_header.add_header_key_value ("Access-Control-Allow-Origin", "localhost")
|
||||
l_header.add_header_key_value ("Access-Control-Allow-Headers", "*")
|
||||
l_header.add_header_key_value ("Access-Control-Allow-Methods", "*")
|
||||
l_header.add_header_key_value ("Access-Control-Allow-Credentials", "true")
|
||||
res.put_header_lines (l_header)
|
||||
execute_next (req, res)
|
||||
end
|
||||
end
|
||||
42
examples/api/src/service/filter/error_filter.e
Normal file
42
examples/api/src/service/filter/error_filter.e
Normal file
@@ -0,0 +1,42 @@
|
||||
note
|
||||
description: "Error filter"
|
||||
date: "$Date: 2014-08-08 16:02:11 -0300 (vi., 08 ago. 2014) $"
|
||||
revision: "$Revision: 95593 $"
|
||||
|
||||
class
|
||||
ERROR_FILTER
|
||||
|
||||
inherit
|
||||
WSF_URI_TEMPLATE_HANDLER
|
||||
|
||||
APP_ABSTRACT_HANDLER
|
||||
rename
|
||||
set_esa_config as make
|
||||
end
|
||||
WSF_FILTER
|
||||
|
||||
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature -- Basic operations
|
||||
|
||||
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute the filter
|
||||
|
||||
do
|
||||
if roc_config.is_successful and then roc_config.api_service.successful then
|
||||
log.write_information (generator + ".execute")
|
||||
execute_next (req, res)
|
||||
else
|
||||
-- send internal server error.
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
note
|
||||
copyright: "2011-2012, Olivier Ligot, Jocelyn Fiat and others"
|
||||
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
||||
|
||||
end
|
||||
54
examples/api/src/service/filter/logger_filter.e
Normal file
54
examples/api/src/service/filter/logger_filter.e
Normal file
@@ -0,0 +1,54 @@
|
||||
note
|
||||
description: "Logger filter"
|
||||
date: "$Date: 2014-08-08 16:02:11 -0300 (vi., 08 ago. 2014) $"
|
||||
revision: "$Revision: 95593 $"
|
||||
|
||||
class
|
||||
LOGGER_FILTER
|
||||
|
||||
|
||||
inherit
|
||||
WSF_URI_TEMPLATE_HANDLER
|
||||
|
||||
APP_ABSTRACT_HANDLER
|
||||
rename
|
||||
set_esa_config as make
|
||||
end
|
||||
WSF_FILTER
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature -- Basic operations
|
||||
|
||||
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute the filter.
|
||||
local
|
||||
s: STRING_8
|
||||
do
|
||||
log.write_debug (generator + ".execute")
|
||||
create s.make (2048)
|
||||
if attached req.content_type as l_type then
|
||||
s.append ("[length=")
|
||||
s.append_natural_64 (req.content_length_value)
|
||||
s.append_character (']')
|
||||
s.append_character (' ')
|
||||
s.append (l_type.debug_output)
|
||||
s.append_character ('%N')
|
||||
end
|
||||
|
||||
append_iterable_to ("Path parameters", req.path_parameters, s)
|
||||
append_iterable_to ("Query parameters", req.query_parameters, s)
|
||||
append_iterable_to ("Form parameters", req.form_parameters, s)
|
||||
|
||||
if not s.is_empty then
|
||||
log.write_debug (generator + ".execute" + s)
|
||||
end
|
||||
execute_next (req, res)
|
||||
end
|
||||
|
||||
|
||||
note
|
||||
copyright: "2011-2012, Olivier Ligot, Jocelyn Fiat and others"
|
||||
license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
|
||||
end
|
||||
48
examples/api/src/service/handler/app_abstract_handler.e
Normal file
48
examples/api/src/service/handler/app_abstract_handler.e
Normal file
@@ -0,0 +1,48 @@
|
||||
note
|
||||
description: "Abstrat Eiffel Support API Handler."
|
||||
date: "$Date: 2014-08-08 16:02:11 -0300 (vi., 08 ago. 2014) $"
|
||||
revision: "$Revision: 95593 $"
|
||||
|
||||
deferred class
|
||||
APP_ABSTRACT_HANDLER
|
||||
|
||||
inherit
|
||||
WSF_HANDLER
|
||||
|
||||
APP_HANDLER
|
||||
|
||||
SHARED_CONNEG_HELPER
|
||||
|
||||
feature -- Change
|
||||
|
||||
set_esa_config (a_esa_config: like roc_config)
|
||||
-- Set `roc_config' to `a_esa_condig'.
|
||||
do
|
||||
roc_config := a_esa_config
|
||||
ensure
|
||||
esa_config_set: roc_config = a_esa_config
|
||||
end
|
||||
|
||||
feature -- Access
|
||||
|
||||
roc_config: ROC_CONFIG
|
||||
-- Configuration.
|
||||
|
||||
api_service: ROC_API_SERVICE
|
||||
-- api Service.
|
||||
do
|
||||
Result := roc_config.api_service
|
||||
end
|
||||
|
||||
email_service: ROC_EMAIL_SERVICE
|
||||
-- Email Service.
|
||||
do
|
||||
Result := roc_config.email_service
|
||||
end
|
||||
|
||||
is_web: BOOLEAN
|
||||
do
|
||||
Result := roc_config.is_web
|
||||
end
|
||||
|
||||
end
|
||||
98
examples/api/src/service/handler/app_handler.e
Normal file
98
examples/api/src/service/handler/app_handler.e
Normal file
@@ -0,0 +1,98 @@
|
||||
note
|
||||
description: "Summary description for {ESA_HANDLER}."
|
||||
date: "$Date: 2014-08-20 15:21:15 -0300 (mi., 20 ago. 2014) $"
|
||||
revision: "$Revision: 95678 $"
|
||||
|
||||
class
|
||||
APP_HANDLER
|
||||
|
||||
inherit
|
||||
|
||||
SHARED_LOGGER
|
||||
|
||||
feature -- User
|
||||
|
||||
current_user_name (req: WSF_REQUEST): detachable READABLE_STRING_32
|
||||
-- Current user name or Void in case of Guest users.
|
||||
note
|
||||
EIS: "src=eiffel:?class=AUTHENTICATION_FILTER&feature=execute"
|
||||
do
|
||||
if attached {CMS_USER} current_user (req) as l_user then
|
||||
Result := l_user.name
|
||||
end
|
||||
end
|
||||
|
||||
current_user (req: WSF_REQUEST): detachable CMS_USER
|
||||
-- Current user or Void in case of Guest user.
|
||||
note
|
||||
EIS: "eiffel:?class=AUTHENTICATION_FILTER&feature=execute"
|
||||
do
|
||||
if attached {CMS_USER} req.execution_variable ("user") as l_user then
|
||||
Result := l_user
|
||||
end
|
||||
end
|
||||
|
||||
feature -- Media Type
|
||||
|
||||
current_media_type (req: WSF_REQUEST): detachable READABLE_STRING_32
|
||||
-- Current media type or Void if it's not acceptable.
|
||||
do
|
||||
if attached {STRING} req.execution_variable ("media_type") as l_type then
|
||||
Result := l_type
|
||||
end
|
||||
end
|
||||
|
||||
feature -- Absolute Host
|
||||
|
||||
absolute_host (req: WSF_REQUEST; a_path:STRING): STRING
|
||||
do
|
||||
Result := req.absolute_script_url (a_path)
|
||||
if Result.last_index_of ('/', Result.count) = Result.count then
|
||||
Result.remove_tail (1)
|
||||
end
|
||||
log.write_debug (generator + ".absolute_host " + Result )
|
||||
end
|
||||
|
||||
feature -- Compression
|
||||
|
||||
current_compression (req: WSF_REQUEST): detachable READABLE_STRING_32
|
||||
-- Current compression encoding or Void if it's not acceptable.
|
||||
do
|
||||
if attached {STRING} req.execution_variable ("compression") as l_encoding then
|
||||
Result := l_encoding
|
||||
end
|
||||
end
|
||||
|
||||
feature {NONE} -- Implementations
|
||||
|
||||
append_iterable_to (a_title: READABLE_STRING_8; it: detachable ITERABLE [WSF_VALUE]; s: STRING_8)
|
||||
local
|
||||
n: INTEGER
|
||||
do
|
||||
if it /= Void then
|
||||
across it as c loop
|
||||
n := n + 1
|
||||
end
|
||||
if n > 0 then
|
||||
s.append (a_title)
|
||||
s.append_character (':')
|
||||
s.append_character ('%N')
|
||||
across
|
||||
it as c
|
||||
loop
|
||||
s.append (" - ")
|
||||
s.append (c.item.url_encoded_name)
|
||||
s.append_character (' ')
|
||||
s.append_character ('{')
|
||||
s.append (c.item.generating_type)
|
||||
s.append_character ('}')
|
||||
s.append_character ('=')
|
||||
s.append (c.item.debug_output.as_string_8)
|
||||
s.append_character ('%N')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
57
examples/api/src/service/handler/navigation_handler.e
Normal file
57
examples/api/src/service/handler/navigation_handler.e
Normal file
@@ -0,0 +1,57 @@
|
||||
note
|
||||
description: "Summary description for {NAVIGATION_HANDLER}."
|
||||
date: "$Date$"
|
||||
revision: "$Revision$"
|
||||
|
||||
class
|
||||
NAVIGATION_HANDLER
|
||||
inherit
|
||||
APP_ABSTRACT_HANDLER
|
||||
rename
|
||||
set_esa_config as make
|
||||
end
|
||||
|
||||
WSF_FILTER
|
||||
|
||||
WSF_URI_HANDLER
|
||||
rename
|
||||
execute as uri_execute,
|
||||
new_mapping as new_uri_mapping
|
||||
end
|
||||
|
||||
WSF_RESOURCE_HANDLER_HELPER
|
||||
redefine
|
||||
do_get
|
||||
end
|
||||
|
||||
REFACTORING_HELPER
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature -- execute
|
||||
|
||||
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
execute_next (req, res)
|
||||
end
|
||||
|
||||
uri_execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
end
|
||||
|
||||
feature -- HTTP Methods
|
||||
|
||||
do_get (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
create l_page.make (req, "modules/navigation.tpl")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
end
|
||||
190
examples/api/src/service/handler/node_content_handler.e
Normal file
190
examples/api/src/service/handler/node_content_handler.e
Normal file
@@ -0,0 +1,190 @@
|
||||
note
|
||||
description: "Summary description for {NEW_CONTENT_HANDLER}."
|
||||
date: "$Date$"
|
||||
revision: "$Revision$"
|
||||
|
||||
class
|
||||
NODE_CONTENT_HANDLER
|
||||
|
||||
inherit
|
||||
APP_ABSTRACT_HANDLER
|
||||
rename
|
||||
set_esa_config as make
|
||||
end
|
||||
|
||||
WSF_FILTER
|
||||
|
||||
WSF_URI_HANDLER
|
||||
rename
|
||||
execute as uri_execute,
|
||||
new_mapping as new_uri_mapping
|
||||
end
|
||||
|
||||
WSF_URI_TEMPLATE_HANDLER
|
||||
rename
|
||||
execute as uri_template_execute,
|
||||
new_mapping as new_uri_template_mapping
|
||||
select
|
||||
new_uri_template_mapping
|
||||
end
|
||||
|
||||
WSF_RESOURCE_HANDLER_HELPER
|
||||
redefine
|
||||
do_get,
|
||||
do_post,
|
||||
do_put
|
||||
end
|
||||
|
||||
REFACTORING_HELPER
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature -- execute
|
||||
|
||||
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
execute_next (req, res)
|
||||
end
|
||||
|
||||
uri_execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
end
|
||||
|
||||
uri_template_execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
end
|
||||
|
||||
feature -- HTTP Methods
|
||||
|
||||
do_get (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
if attached current_user_name (req) then
|
||||
-- Existing node
|
||||
if attached {WSF_STRING} req.path_parameter ("id") as l_id then
|
||||
if l_id.is_integer and then attached {CMS_NODE} api_service.node (l_id.integer_value) as l_node then
|
||||
create l_page.make (req, "modules/node_content.tpl")
|
||||
l_page.set_value (l_node.content, "content")
|
||||
l_page.set_value (l_id.value, "id")
|
||||
l_page.set_value (roc_config.is_web, "web")
|
||||
l_page.set_value (roc_config.is_html, "html")
|
||||
l_page.send_to (res)
|
||||
else
|
||||
do_error (req, res, l_id)
|
||||
end
|
||||
else
|
||||
-- Todo extract method
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
l_page.set_value ("500", "code")
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
else
|
||||
(create {ROC_RESPONSE}.make(req,"")).new_response_unauthorized (req, res)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
do_post (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
u_node: CMS_NODE
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
if attached current_user_name (req) then
|
||||
if attached {WSF_STRING} req.path_parameter ("id") as l_id then
|
||||
if l_id.is_integer and then attached {CMS_NODE} api_service.node (l_id.integer_value) as l_node then
|
||||
if attached {WSF_STRING} req.form_parameter ("method") as l_method then
|
||||
if l_method.is_case_insensitive_equal ("PUT") then
|
||||
do_put (req, res)
|
||||
else
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
l_page.set_value ("500", "code")
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
end
|
||||
else
|
||||
do_error (req, res, l_id)
|
||||
end
|
||||
else
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
l_page.set_value ("500", "code")
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
else
|
||||
(create {ROC_RESPONSE}.make(req,"")).new_response_unauthorized (req, res)
|
||||
end
|
||||
end
|
||||
|
||||
do_put (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
u_node: CMS_NODE
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
to_implement ("Check if user has permissions")
|
||||
if attached current_user (req) as l_user then
|
||||
if attached {WSF_STRING} req.path_parameter ("id") as l_id then
|
||||
if l_id.is_integer and then attached {CMS_NODE} api_service.node (l_id.integer_value) as l_node then
|
||||
u_node := extract_data_form (req)
|
||||
u_node.set_id (l_id.integer_value)
|
||||
api_service.update_node_content (l_user.id, u_node.id, u_node.content)
|
||||
(create {ROC_RESPONSE}.make (req, "")).new_response_redirect (req, res, req.absolute_script_url (""))
|
||||
else
|
||||
do_error (req, res, l_id)
|
||||
end
|
||||
else
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
l_page.set_value ("500", "code")
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
else
|
||||
(create {ROC_RESPONSE}.make(req,"")).new_response_unauthorized (req, res)
|
||||
end
|
||||
end
|
||||
feature -- Error
|
||||
|
||||
do_error (req: WSF_REQUEST; res: WSF_RESPONSE; a_id: WSF_STRING)
|
||||
-- Handling error.
|
||||
local
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
if a_id.is_integer then
|
||||
-- resource not found
|
||||
l_page.set_value ("404", "code")
|
||||
else
|
||||
-- bad request
|
||||
l_page.set_value ("400", "code")
|
||||
end
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to(res)
|
||||
end
|
||||
|
||||
|
||||
feature -- {NONE} Form data
|
||||
|
||||
|
||||
extract_data_form (req: WSF_REQUEST): CMS_NODE
|
||||
-- Extract request form data and build a object
|
||||
-- Node
|
||||
do
|
||||
create Result.make ("", "", "")
|
||||
if attached {WSF_STRING}req.form_parameter ("content") as l_content then
|
||||
Result.set_content (l_content.value)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
225
examples/api/src/service/handler/node_handler.e
Normal file
225
examples/api/src/service/handler/node_handler.e
Normal file
@@ -0,0 +1,225 @@
|
||||
note
|
||||
description: "Summary description for {NODE_HANDLER}."
|
||||
date: "$Date$"
|
||||
revision: "$Revision$"
|
||||
|
||||
class
|
||||
NODE_HANDLER
|
||||
|
||||
inherit
|
||||
|
||||
APP_ABSTRACT_HANDLER
|
||||
rename
|
||||
set_esa_config as make
|
||||
end
|
||||
|
||||
WSF_FILTER
|
||||
|
||||
WSF_URI_HANDLER
|
||||
rename
|
||||
execute as uri_execute,
|
||||
new_mapping as new_uri_mapping
|
||||
end
|
||||
|
||||
WSF_URI_TEMPLATE_HANDLER
|
||||
rename
|
||||
execute as uri_template_execute,
|
||||
new_mapping as new_uri_template_mapping
|
||||
select
|
||||
new_uri_template_mapping
|
||||
end
|
||||
|
||||
WSF_RESOURCE_HANDLER_HELPER
|
||||
redefine
|
||||
do_get,
|
||||
do_post,
|
||||
do_put,
|
||||
do_delete
|
||||
end
|
||||
|
||||
REFACTORING_HELPER
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature -- execute
|
||||
|
||||
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
execute_next (req, res)
|
||||
end
|
||||
|
||||
uri_execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
end
|
||||
|
||||
uri_template_execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
end
|
||||
|
||||
feature -- HTTP Methods
|
||||
|
||||
do_get (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
-- Existing node
|
||||
if attached {WSF_STRING} req.path_parameter ("id") as l_id then
|
||||
if l_id.is_integer and then attached {CMS_NODE} api_service.node (l_id.integer_value) as l_node then
|
||||
create l_page.make (req, "modules/node.tpl")
|
||||
l_page.set_value (l_node, "node")
|
||||
l_page.set_value (roc_config.is_web, "web")
|
||||
l_page.set_value (roc_config.is_html, "html")
|
||||
l_page.send_to (res)
|
||||
else
|
||||
do_error (req, res, l_id)
|
||||
end
|
||||
else
|
||||
-- Factory
|
||||
new_node (req, res)
|
||||
end
|
||||
end
|
||||
|
||||
do_post (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
u_node: CMS_NODE
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
to_implement ("Check user permissions!!!")
|
||||
if attached current_user (req) as l_user then
|
||||
if attached {WSF_STRING} req.path_parameter ("id") as l_id then
|
||||
if l_id.is_integer and then attached {CMS_NODE} api_service.node (l_id.integer_value) as l_node then
|
||||
if attached {WSF_STRING} req.form_parameter ("method") as l_method then
|
||||
if l_method.is_case_insensitive_equal ("DELETE") then
|
||||
do_delete (req, res)
|
||||
elseif l_method.is_case_insensitive_equal ("PUT") then
|
||||
do_put (req, res)
|
||||
else
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
l_page.set_value ("500", "code")
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
end
|
||||
else
|
||||
do_error (req, res, l_id)
|
||||
end
|
||||
else
|
||||
-- New node
|
||||
u_node := extract_data_form (req)
|
||||
u_node.set_author (l_user)
|
||||
api_service.new_node (u_node)
|
||||
(create {ROC_RESPONSE}.make (req, "")).new_response_redirect (req, res, req.absolute_script_url (""))
|
||||
end
|
||||
else
|
||||
(create {ROC_RESPONSE}.make(req,"")).new_response_unauthorized (req, res)
|
||||
end
|
||||
end
|
||||
|
||||
do_put (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
u_node: CMS_NODE
|
||||
do
|
||||
|
||||
if attached current_user (req) as l_user then
|
||||
if attached {WSF_STRING} req.path_parameter ("id") as l_id then
|
||||
if l_id.is_integer and then attached {CMS_NODE} api_service.node (l_id.integer_value) as l_node then
|
||||
u_node := extract_data_form (req)
|
||||
u_node.set_id (l_id.integer_value)
|
||||
api_service.update_node (l_user.id,u_node)
|
||||
(create {ROC_RESPONSE}.make (req, "")).new_response_redirect (req, res, req.absolute_script_url (""))
|
||||
else
|
||||
do_error (req, res, l_id)
|
||||
end
|
||||
else
|
||||
-- Internal server error
|
||||
end
|
||||
else
|
||||
(create {ROC_RESPONSE}.make(req,"")).new_response_unauthorized (req, res)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
do_delete (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
do
|
||||
if attached current_user_name (req) then
|
||||
if attached {WSF_STRING} req.path_parameter ("id") as l_id then
|
||||
if l_id.is_integer and then attached {CMS_NODE} api_service.node (l_id.integer_value) as l_node then
|
||||
api_service.delete_node (l_id.integer_value)
|
||||
(create {ROC_RESPONSE}.make (req, "")).new_response_redirect (req, res, req.absolute_script_url (""))
|
||||
else
|
||||
do_error (req, res, l_id)
|
||||
end
|
||||
else
|
||||
-- Internal server error
|
||||
end
|
||||
else
|
||||
(create {ROC_RESPONSE}.make(req,"")).new_response_unauthorized (req, res)
|
||||
end
|
||||
end
|
||||
|
||||
feature -- Error
|
||||
|
||||
do_error (req: WSF_REQUEST; res: WSF_RESPONSE; a_id: WSF_STRING)
|
||||
-- Handling error.
|
||||
local
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
if a_id.is_integer then
|
||||
-- resource not found
|
||||
l_page.set_value ("404", "code")
|
||||
else
|
||||
-- bad request
|
||||
l_page.set_value ("400", "code")
|
||||
end
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
|
||||
feature {NONE} -- Node
|
||||
|
||||
new_node (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
local
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
if attached current_user_name (req) then
|
||||
create l_page.make (req, "modules/node.tpl")
|
||||
l_page.set_value (roc_config.is_web, "web")
|
||||
l_page.set_value (roc_config.is_html, "html")
|
||||
|
||||
l_page.send_to (res)
|
||||
else
|
||||
(create {ROC_RESPONSE}.make (req, "")).new_response_unauthorized (req, res)
|
||||
end
|
||||
end
|
||||
|
||||
feature -- {NONE} Form data
|
||||
|
||||
extract_data_form (req: WSF_REQUEST): CMS_NODE
|
||||
-- Extract request form data and build a object
|
||||
-- Node
|
||||
do
|
||||
create Result.make ("", "", "")
|
||||
if attached {WSF_STRING} req.form_parameter ("title") as l_title then
|
||||
Result.set_title (l_title.value)
|
||||
end
|
||||
if attached {WSF_STRING} req.form_parameter ("summary") as l_summary then
|
||||
Result.set_summary (l_summary.value)
|
||||
end
|
||||
if attached {WSF_STRING} req.form_parameter ("content") as l_content then
|
||||
Result.set_content (l_content.value)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
199
examples/api/src/service/handler/node_summary_handler.e
Normal file
199
examples/api/src/service/handler/node_summary_handler.e
Normal file
@@ -0,0 +1,199 @@
|
||||
note
|
||||
description: "Summary description for {NODE_SUMMARY_HANDLER}."
|
||||
date: "$Date$"
|
||||
revision: "$Revision$"
|
||||
|
||||
class
|
||||
NODE_SUMMARY_HANDLER
|
||||
|
||||
inherit
|
||||
APP_ABSTRACT_HANDLER
|
||||
rename
|
||||
set_esa_config as make
|
||||
end
|
||||
|
||||
WSF_FILTER
|
||||
|
||||
WSF_URI_HANDLER
|
||||
rename
|
||||
execute as uri_execute,
|
||||
new_mapping as new_uri_mapping
|
||||
end
|
||||
|
||||
WSF_URI_TEMPLATE_HANDLER
|
||||
rename
|
||||
execute as uri_template_execute,
|
||||
new_mapping as new_uri_template_mapping
|
||||
select
|
||||
new_uri_template_mapping
|
||||
end
|
||||
|
||||
WSF_RESOURCE_HANDLER_HELPER
|
||||
redefine
|
||||
do_get,
|
||||
do_post,
|
||||
do_put
|
||||
end
|
||||
|
||||
REFACTORING_HELPER
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature -- execute
|
||||
|
||||
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
execute_next (req, res)
|
||||
end
|
||||
|
||||
uri_execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
end
|
||||
|
||||
uri_template_execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
end
|
||||
|
||||
feature -- HTTP Methods
|
||||
|
||||
do_get (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
if attached current_user_name (req) then
|
||||
-- Existing node
|
||||
if attached {WSF_STRING} req.path_parameter ("id") as l_id then
|
||||
if l_id.is_integer and then attached {CMS_NODE} api_service.node (l_id.integer_value) as l_node then
|
||||
create l_page.make (req, "modules/node_summary.tpl")
|
||||
l_page.set_value (l_node.summary, "summary")
|
||||
l_page.set_value (roc_config.is_web, "web")
|
||||
l_page.set_value (roc_config.is_html, "html")
|
||||
l_page.set_value (l_id.value, "id")
|
||||
l_page.send_to (res)
|
||||
else
|
||||
do_error (req, res, l_id)
|
||||
end
|
||||
else
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
l_page.set_value ("500", "code")
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
else
|
||||
(create {ROC_RESPONSE}.make(req,"")).new_response_unauthorized (req, res)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
do_post (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
u_node: CMS_NODE
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
if attached current_user_name (req) then
|
||||
if attached {WSF_STRING} req.path_parameter ("id") as l_id then
|
||||
if l_id.is_integer and then attached {CMS_NODE} api_service.node (l_id.integer_value) as l_node then
|
||||
if attached {WSF_STRING} req.form_parameter ("method") as l_method then
|
||||
if l_method.is_case_insensitive_equal ("PUT") then
|
||||
do_put (req, res)
|
||||
else
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
l_page.set_value ("500", "code")
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
end
|
||||
else
|
||||
do_error (req, res, l_id)
|
||||
end
|
||||
else
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
l_page.set_value ("500", "code")
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
else
|
||||
(create {ROC_RESPONSE}.make(req,"")).new_response_unauthorized (req, res)
|
||||
end
|
||||
end
|
||||
|
||||
do_put (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
u_node: CMS_NODE
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
to_implement ("Check if user has permissions!!!")
|
||||
if attached current_user (req) as l_user then
|
||||
if attached {WSF_STRING} req.path_parameter ("id") as l_id then
|
||||
if l_id.is_integer and then attached {CMS_NODE} api_service.node (l_id.integer_value) as l_node then
|
||||
u_node := extract_data_form (req)
|
||||
u_node.set_id (l_id.integer_value)
|
||||
api_service.update_node_summary (l_user.id,u_node.id, u_node.summary)
|
||||
(create {ROC_RESPONSE}.make (req, "")).new_response_redirect (req, res, req.absolute_script_url (""))
|
||||
else
|
||||
do_error (req, res, l_id)
|
||||
end
|
||||
else
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
l_page.set_value ("500", "code")
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
else
|
||||
(create {ROC_RESPONSE}.make(req,"")).new_response_unauthorized (req, res)
|
||||
end
|
||||
end
|
||||
|
||||
feature -- Error
|
||||
|
||||
do_error (req: WSF_REQUEST; res: WSF_RESPONSE; a_id: WSF_STRING)
|
||||
-- Handling error.
|
||||
local
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
if a_id.is_integer then
|
||||
-- resource not found
|
||||
l_page.set_value ("404", "code")
|
||||
else
|
||||
-- bad request
|
||||
l_page.set_value ("400", "code")
|
||||
end
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to(res)
|
||||
end
|
||||
|
||||
feature {NONE} -- Node
|
||||
|
||||
new_node (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
local
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
create l_page.make (req, "modules/node.tpl")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
|
||||
feature -- {NONE} Form data
|
||||
|
||||
|
||||
extract_data_form (req: WSF_REQUEST): CMS_NODE
|
||||
-- Extract request form data and build a object
|
||||
-- Node
|
||||
do
|
||||
create Result.make ("", "", "")
|
||||
if attached {WSF_STRING}req.form_parameter ("summary") as l_summary then
|
||||
Result.set_summary (l_summary.value)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
199
examples/api/src/service/handler/node_title_handler.e
Normal file
199
examples/api/src/service/handler/node_title_handler.e
Normal file
@@ -0,0 +1,199 @@
|
||||
note
|
||||
description: "Summary description for {NODE_TITLE_HANDLER}."
|
||||
author: ""
|
||||
date: "$Date$"
|
||||
revision: "$Revision$"
|
||||
|
||||
class
|
||||
NODE_TITLE_HANDLER
|
||||
|
||||
inherit
|
||||
|
||||
APP_ABSTRACT_HANDLER
|
||||
rename
|
||||
set_esa_config as make
|
||||
end
|
||||
|
||||
WSF_FILTER
|
||||
|
||||
WSF_URI_HANDLER
|
||||
rename
|
||||
execute as uri_execute,
|
||||
new_mapping as new_uri_mapping
|
||||
end
|
||||
|
||||
WSF_URI_TEMPLATE_HANDLER
|
||||
rename
|
||||
execute as uri_template_execute,
|
||||
new_mapping as new_uri_template_mapping
|
||||
select
|
||||
new_uri_template_mapping
|
||||
end
|
||||
|
||||
WSF_RESOURCE_HANDLER_HELPER
|
||||
redefine
|
||||
do_get,
|
||||
do_post,
|
||||
do_put
|
||||
end
|
||||
|
||||
REFACTORING_HELPER
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature -- execute
|
||||
|
||||
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
execute_next (req, res)
|
||||
end
|
||||
|
||||
uri_execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
end
|
||||
|
||||
uri_template_execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
end
|
||||
|
||||
feature -- HTTP Methods
|
||||
|
||||
do_get (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
if attached current_user_name (req) as l_user then
|
||||
-- Existing node
|
||||
if attached {WSF_STRING} req.path_parameter ("id") as l_id then
|
||||
if l_id.is_integer and then attached {CMS_NODE} api_service.node (l_id.integer_value) as l_node then
|
||||
create l_page.make (req, "modules/node_title.tpl")
|
||||
l_page.set_value (l_node.title, "title")
|
||||
l_page.set_value (l_id.value, "id")
|
||||
l_page.set_value (roc_config.is_web, "web")
|
||||
l_page.set_value (roc_config.is_html, "html")
|
||||
l_page.send_to (res)
|
||||
else
|
||||
do_error (req, res, l_id)
|
||||
end
|
||||
else
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
l_page.set_value ("500", "code")
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
else
|
||||
(create {ROC_RESPONSE}.make(req,"")).new_response_unauthorized (req, res)
|
||||
end
|
||||
end
|
||||
|
||||
do_post (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
u_node: CMS_NODE
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
if attached current_user_name (req) as l_user then
|
||||
if attached {WSF_STRING} req.path_parameter ("id") as l_id then
|
||||
if l_id.is_integer and then attached {CMS_NODE} api_service.node (l_id.integer_value) as l_node then
|
||||
if attached {WSF_STRING} req.form_parameter ("method") as l_method then
|
||||
if l_method.is_case_insensitive_equal ("PUT") then
|
||||
do_put (req, res)
|
||||
else
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
l_page.set_value ("500", "code")
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
end
|
||||
else
|
||||
do_error (req, res, l_id)
|
||||
end
|
||||
else
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
l_page.set_value ("500", "code")
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
else
|
||||
(create {ROC_RESPONSE}.make(req,"")).new_response_unauthorized (req, res)
|
||||
end
|
||||
end
|
||||
|
||||
do_put (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
u_node: CMS_NODE
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
to_implement ("Check if user has permissions")
|
||||
if attached current_user (req) as l_user then
|
||||
if attached {WSF_STRING} req.path_parameter ("id") as l_id then
|
||||
if l_id.is_integer and then attached {CMS_NODE} api_service.node (l_id.integer_value) as l_node then
|
||||
u_node := extract_data_form (req)
|
||||
u_node.set_id (l_id.integer_value)
|
||||
api_service.update_node_title (l_user.id,u_node.id, u_node.title)
|
||||
(create {ROC_RESPONSE}.make (req, "")).new_response_redirect (req, res, req.absolute_script_url (""))
|
||||
else
|
||||
do_error (req, res, l_id)
|
||||
end
|
||||
else
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
l_page.set_value ("500", "code")
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
else
|
||||
(create {ROC_RESPONSE}.make(req,"")).new_response_unauthorized (req, res)
|
||||
end
|
||||
end
|
||||
|
||||
feature -- Error
|
||||
|
||||
do_error (req: WSF_REQUEST; res: WSF_RESPONSE; a_id: WSF_STRING)
|
||||
-- Handling error.
|
||||
local
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
if a_id.is_integer then
|
||||
-- resource not found
|
||||
l_page.set_value ("404", "code")
|
||||
else
|
||||
-- bad request
|
||||
l_page.set_value ("400", "code")
|
||||
end
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
|
||||
feature {NONE} -- Node
|
||||
|
||||
new_node (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
local
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
create l_page.make (req, "modules/node.tpl")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
|
||||
feature -- {NONE} Form data
|
||||
|
||||
extract_data_form (req: WSF_REQUEST): CMS_NODE
|
||||
-- Extract request form data and build a object
|
||||
-- Node
|
||||
do
|
||||
create Result.make ("", "", "")
|
||||
if attached {WSF_STRING} req.form_parameter ("title") as l_title then
|
||||
Result.set_title (l_title.value)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
62
examples/api/src/service/handler/nodes_handler.e
Normal file
62
examples/api/src/service/handler/nodes_handler.e
Normal file
@@ -0,0 +1,62 @@
|
||||
note
|
||||
description: "Summary description for {NODES_HANDLER}."
|
||||
date: "$Date$"
|
||||
revision: "$Revision$"
|
||||
|
||||
class
|
||||
NODES_HANDLER
|
||||
|
||||
inherit
|
||||
APP_ABSTRACT_HANDLER
|
||||
rename
|
||||
set_esa_config as make
|
||||
end
|
||||
|
||||
WSF_FILTER
|
||||
|
||||
WSF_URI_HANDLER
|
||||
rename
|
||||
execute as uri_execute,
|
||||
new_mapping as new_uri_mapping
|
||||
end
|
||||
|
||||
WSF_RESOURCE_HANDLER_HELPER
|
||||
redefine
|
||||
do_get
|
||||
end
|
||||
|
||||
REFACTORING_HELPER
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature -- execute
|
||||
|
||||
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
execute_next (req, res)
|
||||
end
|
||||
|
||||
uri_execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
end
|
||||
|
||||
feature -- HTTP Methods
|
||||
|
||||
do_get (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
|
||||
create l_page.make (req, "modules/nodes.tpl")
|
||||
l_page.set_value (api_service.nodes, "nodes")
|
||||
l_page.set_value (roc_config.is_web, "web")
|
||||
l_page.set_value (roc_config.is_html, "html")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
end
|
||||
63
examples/api/src/service/handler/roc_login_handler.e
Normal file
63
examples/api/src/service/handler/roc_login_handler.e
Normal file
@@ -0,0 +1,63 @@
|
||||
note
|
||||
description: "Handle Login using Basic Authentication"
|
||||
date: "$Date: 2014-08-08 16:02:11 -0300 (vi., 08 ago. 2014) $"
|
||||
revision: "$Revision: 95593 $"
|
||||
|
||||
class
|
||||
ROC_LOGIN_HANDLER
|
||||
|
||||
inherit
|
||||
APP_ABSTRACT_HANDLER
|
||||
rename
|
||||
set_esa_config as make
|
||||
end
|
||||
|
||||
WSF_URI_HANDLER
|
||||
rename
|
||||
execute as uri_execute,
|
||||
new_mapping as new_uri_mapping
|
||||
end
|
||||
|
||||
WSF_FILTER
|
||||
|
||||
|
||||
WSF_RESOURCE_HANDLER_HELPER
|
||||
redefine
|
||||
do_get
|
||||
end
|
||||
|
||||
REFACTORING_HELPER
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature -- execute
|
||||
|
||||
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler.
|
||||
do
|
||||
execute_methods (req, res)
|
||||
execute_next (req, res)
|
||||
end
|
||||
|
||||
uri_execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler.
|
||||
do
|
||||
execute_methods (req, res)
|
||||
end
|
||||
|
||||
feature -- HTTP Methods
|
||||
|
||||
do_get (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
do
|
||||
if attached {STRING_32} current_user_name (req) as l_user then
|
||||
(create {ROC_RESPONSE}.make(req,"")).new_response_redirect (req, res, req.absolute_script_url(""))
|
||||
else
|
||||
(create {ROC_RESPONSE}.make(req,"")).new_response_authenticate (req, res)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
end
|
||||
59
examples/api/src/service/handler/roc_logoff_handler.e
Normal file
59
examples/api/src/service/handler/roc_logoff_handler.e
Normal file
@@ -0,0 +1,59 @@
|
||||
note
|
||||
description: "Handle Logoff for Basic Authentication"
|
||||
date: "$Date: 2014-08-08 16:02:11 -0300 (vi., 08 ago. 2014) $"
|
||||
revision: "$Revision: 95593 $"
|
||||
|
||||
class
|
||||
ROC_LOGOFF_HANDLER
|
||||
|
||||
inherit
|
||||
|
||||
APP_ABSTRACT_HANDLER
|
||||
rename
|
||||
set_esa_config as make
|
||||
end
|
||||
|
||||
WSF_URI_HANDLER
|
||||
rename
|
||||
execute as uri_execute,
|
||||
new_mapping as new_uri_mapping
|
||||
end
|
||||
|
||||
WSF_RESOURCE_HANDLER_HELPER
|
||||
redefine
|
||||
do_get
|
||||
end
|
||||
|
||||
REFACTORING_HELPER
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature -- execute
|
||||
|
||||
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler.
|
||||
do
|
||||
execute_methods (req, res)
|
||||
end
|
||||
|
||||
uri_execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler.
|
||||
do
|
||||
execute_methods (req, res)
|
||||
end
|
||||
|
||||
feature -- HTTP Methods
|
||||
|
||||
do_get (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
do
|
||||
log.write_information(generator + ".do_get Processing logoff")
|
||||
if attached req.query_parameter ("prompt") as l_prompt then
|
||||
(create {ROC_RESPONSE}.make(req,"")).new_response_unauthorized (req, res)
|
||||
else
|
||||
(create {ROC_RESPONSE}.make(req,"master2/logoff.tpl")).new_response_denied (req, res)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
63
examples/api/src/service/handler/roc_root_handler.e
Normal file
63
examples/api/src/service/handler/roc_root_handler.e
Normal file
@@ -0,0 +1,63 @@
|
||||
note
|
||||
description: "ROOT_HANDLER."
|
||||
date: "$Date: 2014-08-08 16:02:11 -0300 (vi., 08 ago. 2014) $"
|
||||
revision: "$Revision: 95593 $"
|
||||
|
||||
class
|
||||
ROC_ROOT_HANDLER
|
||||
|
||||
inherit
|
||||
APP_ABSTRACT_HANDLER
|
||||
rename
|
||||
set_esa_config as make
|
||||
end
|
||||
|
||||
WSF_FILTER
|
||||
|
||||
WSF_URI_HANDLER
|
||||
rename
|
||||
execute as uri_execute,
|
||||
new_mapping as new_uri_mapping
|
||||
end
|
||||
|
||||
WSF_RESOURCE_HANDLER_HELPER
|
||||
redefine
|
||||
do_get
|
||||
end
|
||||
|
||||
REFACTORING_HELPER
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature -- execute
|
||||
|
||||
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
execute_next (req, res)
|
||||
end
|
||||
|
||||
uri_execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
end
|
||||
|
||||
feature -- HTTP Methods
|
||||
|
||||
do_get (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
|
||||
create l_page.make (req, "layout2.tpl")
|
||||
l_page.set_value (api_service.recent_nodes (0,5), "nodes")
|
||||
l_page.set_value (is_web, "web")
|
||||
l_page.set_value (roc_config.is_html, "html")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
|
||||
end
|
||||
163
examples/api/src/service/handler/user_handler.e
Normal file
163
examples/api/src/service/handler/user_handler.e
Normal file
@@ -0,0 +1,163 @@
|
||||
note
|
||||
description: "Summary description for {USER_HANDLER}."
|
||||
author: ""
|
||||
date: "$Date$"
|
||||
revision: "$Revision$"
|
||||
|
||||
class
|
||||
USER_HANDLER
|
||||
|
||||
inherit
|
||||
|
||||
APP_ABSTRACT_HANDLER
|
||||
rename
|
||||
set_esa_config as make
|
||||
end
|
||||
|
||||
WSF_FILTER
|
||||
|
||||
WSF_URI_HANDLER
|
||||
rename
|
||||
execute as uri_execute,
|
||||
new_mapping as new_uri_mapping
|
||||
end
|
||||
|
||||
WSF_URI_TEMPLATE_HANDLER
|
||||
rename
|
||||
execute as uri_template_execute,
|
||||
new_mapping as new_uri_template_mapping
|
||||
select
|
||||
new_uri_template_mapping
|
||||
end
|
||||
|
||||
WSF_RESOURCE_HANDLER_HELPER
|
||||
redefine
|
||||
do_get,
|
||||
do_post,
|
||||
do_put,
|
||||
do_delete
|
||||
end
|
||||
|
||||
REFACTORING_HELPER
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature -- execute
|
||||
|
||||
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
execute_next (req, res)
|
||||
end
|
||||
|
||||
uri_execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
end
|
||||
|
||||
uri_template_execute (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- Execute request handler
|
||||
do
|
||||
execute_methods (req, res)
|
||||
end
|
||||
|
||||
feature -- HTTP Methods
|
||||
|
||||
do_get (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
-- Existing node
|
||||
create l_page.make (req, "modules/register.tpl")
|
||||
l_page.set_value (roc_config.is_web, "web")
|
||||
l_page.set_value (roc_config.is_html, "html")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
|
||||
do_post (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
u_node: CMS_NODE
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
-- New user
|
||||
api_service.new_user (extract_data_form (req))
|
||||
if api_service.successful then
|
||||
(create {ROC_RESPONSE}.make (req, "")).new_response_redirect (req, res, req.absolute_script_url (""))
|
||||
else
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
do_put (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
local
|
||||
u_node: CMS_NODE
|
||||
do
|
||||
end
|
||||
|
||||
do_delete (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
-- <Precursor>
|
||||
do
|
||||
end
|
||||
|
||||
feature -- Error
|
||||
|
||||
do_error (req: WSF_REQUEST; res: WSF_RESPONSE; a_id: WSF_STRING)
|
||||
-- Handling error.
|
||||
local
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
create l_page.make (req, "master2/error.tpl")
|
||||
if a_id.is_integer then
|
||||
-- resource not found
|
||||
l_page.set_value ("404", "code")
|
||||
else
|
||||
-- bad request
|
||||
l_page.set_value ("400", "code")
|
||||
end
|
||||
l_page.set_value (req.absolute_script_url (req.path_info), "request")
|
||||
l_page.send_to (res)
|
||||
end
|
||||
|
||||
feature {NONE} -- Node
|
||||
|
||||
new_node (req: WSF_REQUEST; res: WSF_RESPONSE)
|
||||
local
|
||||
l_page: ROC_RESPONSE
|
||||
do
|
||||
if attached current_user_name (req) then
|
||||
create l_page.make (req, "modules/node.tpl")
|
||||
l_page.send_to (res)
|
||||
else
|
||||
(create {ROC_RESPONSE}.make (req, "")).new_response_unauthorized (req, res)
|
||||
end
|
||||
end
|
||||
|
||||
feature -- {NONE} Form data
|
||||
|
||||
extract_data_form (req: WSF_REQUEST): CMS_USER
|
||||
-- Extract request form data and build a object
|
||||
-- user
|
||||
do
|
||||
create Result.make ("")
|
||||
if attached {WSF_STRING} req.form_parameter ("username") as l_username then
|
||||
Result.set_name (l_username)
|
||||
end
|
||||
if
|
||||
attached {WSF_STRING} req.form_parameter ("password") as l_password and then
|
||||
attached {WSF_STRING} req.form_parameter ("check_password") as l_check_password and then
|
||||
l_password.value.is_case_insensitive_equal (l_check_password.value)
|
||||
then
|
||||
Result.set_password (l_password)
|
||||
end
|
||||
if attached {WSF_STRING} req.form_parameter ("email") as l_email then
|
||||
Result.set_email (l_email)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
126
examples/api/src/service/roc_api_service.e
Normal file
126
examples/api/src/service/roc_api_service.e
Normal file
@@ -0,0 +1,126 @@
|
||||
note
|
||||
description: "API Service facade to the underlying business logic"
|
||||
date: "$Date: 2014-08-20 15:21:15 -0300 (mi., 20 ago. 2014) $"
|
||||
revision: "$Revision: 95678 $"
|
||||
|
||||
class
|
||||
ROC_API_SERVICE
|
||||
|
||||
inherit
|
||||
|
||||
SHARED_ERROR
|
||||
REFACTORING_HELPER
|
||||
|
||||
|
||||
create make
|
||||
|
||||
|
||||
feature -- Initialize
|
||||
|
||||
make (a_storage: CMS_STORAGE)
|
||||
-- Create the API service with an storege `a_storage'.
|
||||
do
|
||||
storage := a_storage
|
||||
set_successful
|
||||
ensure
|
||||
storage_set: storage = a_storage
|
||||
end
|
||||
|
||||
feature -- Access
|
||||
|
||||
login_valid (l_auth_login, l_auth_password: READABLE_STRING_32): BOOLEAN
|
||||
local
|
||||
l_security: SECURITY_PROVIDER
|
||||
do
|
||||
Result := storage.is_valid_credential (l_auth_login, l_auth_password)
|
||||
end
|
||||
|
||||
feature -- Access: Node
|
||||
|
||||
nodes: LIST[CMS_NODE]
|
||||
-- List of nodes.
|
||||
do
|
||||
fixme ("Implementation")
|
||||
Result := storage.recent_nodes (0, 10)
|
||||
end
|
||||
|
||||
recent_nodes (a_offset, a_rows: INTEGER): LIST[CMS_NODE]
|
||||
-- List of the `a_rows' most recent nodes starting from `a_offset'.
|
||||
do
|
||||
Result := storage.recent_nodes (a_offset, a_rows)
|
||||
end
|
||||
|
||||
node (a_id: INTEGER_64): detachable CMS_NODE
|
||||
-- Node by ID.
|
||||
do
|
||||
fixme ("Check preconditions")
|
||||
Result := storage.node (a_id)
|
||||
end
|
||||
|
||||
|
||||
feature -- Change: Node
|
||||
|
||||
new_node (a_node: CMS_NODE)
|
||||
-- Add a new node
|
||||
do
|
||||
storage.save_node (a_node)
|
||||
end
|
||||
|
||||
delete_node (a_id: INTEGER_64)
|
||||
do
|
||||
storage.delete_node (a_id)
|
||||
end
|
||||
|
||||
update_node (a_id: like {CMS_USER}.id; a_node: CMS_NODE)
|
||||
do
|
||||
storage.update_node (a_id,a_node)
|
||||
end
|
||||
|
||||
update_node_title (a_id: like {CMS_USER}.id; a_node_id: like {CMS_NODE}.id; a_title: READABLE_STRING_32)
|
||||
do
|
||||
fixme ("Check preconditions")
|
||||
storage.update_node_title (a_id,a_node_id,a_title)
|
||||
end
|
||||
|
||||
update_node_summary (a_id: like {CMS_USER}.id; a_node_id: like {CMS_NODE}.id; a_summary: READABLE_STRING_32)
|
||||
do
|
||||
fixme ("Check preconditions")
|
||||
storage.update_node_summary (a_id,a_node_id, a_summary)
|
||||
end
|
||||
|
||||
update_node_content (a_id: like {CMS_USER}.id; a_node_id: like {CMS_NODE}.id; a_content: READABLE_STRING_32)
|
||||
do
|
||||
fixme ("Check preconditions")
|
||||
storage.update_node_content (a_id,a_node_id, a_content)
|
||||
end
|
||||
|
||||
|
||||
feature -- Access: User
|
||||
|
||||
user_by_name (a_username: READABLE_STRING_32): detachable CMS_USER
|
||||
do
|
||||
Result := storage.user_by_name (a_username)
|
||||
end
|
||||
feature -- Change User
|
||||
|
||||
new_user (a_user: CMS_USER)
|
||||
-- Add a new user `a_user'.
|
||||
do
|
||||
if
|
||||
attached a_user.password as l_password and then
|
||||
attached a_user.email as l_email
|
||||
then
|
||||
storage.save_user (a_user)
|
||||
else
|
||||
fixme ("Add error")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
feature {NONE} -- Implemenataion
|
||||
|
||||
|
||||
storage: CMS_STORAGE
|
||||
-- Persistence storage
|
||||
|
||||
end
|
||||
127
examples/api/src/service/roc_email_service.e
Normal file
127
examples/api/src/service/roc_email_service.e
Normal file
@@ -0,0 +1,127 @@
|
||||
note
|
||||
description: "Provides email access"
|
||||
date: "$Date: 2014-08-20 15:21:15 -0300 (mi., 20 ago. 2014) $"
|
||||
revision: "$Revision: 95678 $"
|
||||
|
||||
class
|
||||
ROC_EMAIL_SERVICE
|
||||
|
||||
inherit
|
||||
|
||||
SHARED_ERROR
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature {NONE} -- Initialization
|
||||
|
||||
make (a_smtp_server: READABLE_STRING_32)
|
||||
-- Create an instance of {ESA_EMAIL_SERVICE} with an smtp_server `a_smtp_server'.
|
||||
-- Using "noreplies@eiffel.com" as admin email.
|
||||
local
|
||||
l_address_factory: INET_ADDRESS_FACTORY
|
||||
do
|
||||
-- Get local host name needed in creation of SMTP_PROTOCOL.
|
||||
create l_address_factory
|
||||
create smtp_protocol.make (a_smtp_server, l_address_factory.create_localhost.host_name)
|
||||
set_successful
|
||||
end
|
||||
|
||||
admin_email: IMMUTABLE_STRING_8
|
||||
-- Administrator email.
|
||||
once
|
||||
Result := "noreplies@eiffel.com"
|
||||
end
|
||||
|
||||
webmaster_email: IMMUTABLE_STRING_8
|
||||
-- Webmaster email.
|
||||
once
|
||||
Result := "webmaster@eiffel.com"
|
||||
end
|
||||
|
||||
smtp_protocol: SMTP_PROTOCOL
|
||||
-- SMTP protocol.
|
||||
|
||||
feature -- Basic Operations
|
||||
|
||||
send_template_email (a_to, a_token, a_host: STRING)
|
||||
-- Send successful registration message containing activation code `a_token' to `a_to'.
|
||||
require
|
||||
attached_to: a_to /= Void
|
||||
attached_token: a_token /= Void
|
||||
attached_host: a_host /= Void
|
||||
local
|
||||
l_content: STRING
|
||||
l_url: URL_ENCODER
|
||||
l_path: PATH
|
||||
l_html: HTML_ENCODER
|
||||
l_email: EMAIL
|
||||
do
|
||||
if successful then
|
||||
log.write_information (generator + ".send_post_registration_email to [" + a_to + "]" )
|
||||
create l_path.make_current
|
||||
create l_url
|
||||
create l_html
|
||||
create l_content.make (1024)
|
||||
l_content.append ("Thank you for registering at CMS.%N%NTo complete your registration, please click on this link to activate your account:%N%N")
|
||||
l_content.append (a_host)
|
||||
l_content.append ("/activation?code=")
|
||||
l_content.append (l_url.encoded_string (a_token))
|
||||
l_content.append ("&email=")
|
||||
l_content.append (l_url.encoded_string (a_to))
|
||||
l_content.append ("%N%NOnce there, please enter the following information and then click the Activate Account, button.%N%N")
|
||||
l_content.append ("Your e-mail: ")
|
||||
l_content.append (l_html.encoded_string (a_to))
|
||||
l_content.append ("%N%NYour activation code: ")
|
||||
l_content.append (l_html.encoded_string(a_token))
|
||||
l_content.append ("%N%NThank you for joining us.%N%N CMS team.")
|
||||
l_content.append (Disclaimer)
|
||||
-- Create our message.
|
||||
create l_email.make_with_entry (admin_email, a_to)
|
||||
l_email.set_message (l_content)
|
||||
l_email.add_header_entry ({EMAIL_CONSTANTS}.H_subject, "CMS Site: Account Activation")
|
||||
send_email (l_email)
|
||||
end
|
||||
end
|
||||
|
||||
send_shutdown_email (a_message: READABLE_STRING_GENERAL)
|
||||
-- Send email shutdown cause by an unexpected condition.
|
||||
local
|
||||
l_email: EMAIL
|
||||
l_content: STRING
|
||||
do
|
||||
create l_email.make_with_entry (admin_email, webmaster_email)
|
||||
create l_content.make (2048)
|
||||
l_content.append (a_message.as_string_32)
|
||||
l_email.set_message (l_content)
|
||||
l_email.add_header_entry ({EMAIL_CONSTANTS}.H_subject, "ROC API exception")
|
||||
send_email (l_email)
|
||||
end
|
||||
|
||||
feature {NONE} -- Implementation
|
||||
|
||||
send_email (a_email: EMAIL)
|
||||
-- Send the email represented by `a_email'.
|
||||
local
|
||||
l_retried: BOOLEAN
|
||||
do
|
||||
if not l_retried then
|
||||
log.write_information (generator + ".send_email Process send email.")
|
||||
smtp_protocol.initiate_protocol
|
||||
smtp_protocol.transfer (a_email)
|
||||
smtp_protocol.close_protocol
|
||||
log.write_information (generator + ".send_email Email sent.")
|
||||
set_successful
|
||||
else
|
||||
log.write_error (generator + ".send_email Email not send" + last_error_message )
|
||||
end
|
||||
rescue
|
||||
set_last_error_from_exception (generator + ".send_email")
|
||||
l_retried := True
|
||||
retry
|
||||
end
|
||||
|
||||
Disclaimer: STRING = "This email is generated automatically, and the address is not monitored for responses. If you try contacting us by using %"reply%", you will not receive an answer."
|
||||
-- Email not monitored disclaimer.
|
||||
|
||||
end
|
||||
185
examples/api/src/service/roc_rest_api.e
Normal file
185
examples/api/src/service/roc_rest_api.e
Normal file
@@ -0,0 +1,185 @@
|
||||
note
|
||||
description: "[
|
||||
REST API configuration
|
||||
We manage URI and Uri templates using Routers. They are used to delegate calls (to the corresponing handlers) based on a URI template.
|
||||
We define a Rooter and attach handlers to it.
|
||||
]"
|
||||
date: "$Date: 2014-08-08 16:02:11 -0300 (vi., 08 ago. 2014) $"
|
||||
revision: "$Revision: 95593 $"
|
||||
|
||||
class
|
||||
ROC_REST_API
|
||||
|
||||
inherit
|
||||
|
||||
ROC_ABSTRACT_API
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature -- Initialization
|
||||
|
||||
setup_router
|
||||
-- Setup `router'.
|
||||
local
|
||||
fhdl: WSF_FILE_SYSTEM_HANDLER
|
||||
do
|
||||
configure_api_root
|
||||
configure_api_node
|
||||
configure_api_navigation
|
||||
configure_api_login
|
||||
configure_api_nodes
|
||||
configure_api_node_title
|
||||
configure_api_node_summary
|
||||
configure_api_node_content
|
||||
configure_api_logoff
|
||||
configure_api_register
|
||||
|
||||
|
||||
create fhdl.make_hidden_with_path (layout.www_path)
|
||||
fhdl.disable_index
|
||||
fhdl.set_not_found_handler (agent (ia_uri: READABLE_STRING_8; ia_req: WSF_REQUEST; ia_res: WSF_RESPONSE)
|
||||
do
|
||||
execute_default (ia_req, ia_res)
|
||||
end)
|
||||
router.handle_with_request_methods ("/", fhdl, router.methods_GET)
|
||||
end
|
||||
|
||||
feature -- Configure Resources Routes
|
||||
|
||||
configure_api_root
|
||||
local
|
||||
l_root_handler:ROC_ROOT_HANDLER
|
||||
l_methods: WSF_REQUEST_METHODS
|
||||
do
|
||||
create l_root_handler.make (roc_config)
|
||||
create l_methods
|
||||
l_methods.enable_get
|
||||
router.handle_with_request_methods ("/", l_root_handler, l_methods)
|
||||
end
|
||||
|
||||
configure_api_node
|
||||
local
|
||||
l_report_handler: NODE_HANDLER
|
||||
l_methods: WSF_REQUEST_METHODS
|
||||
do
|
||||
create l_report_handler.make (roc_config)
|
||||
create l_methods
|
||||
l_methods.enable_get
|
||||
l_methods.enable_post
|
||||
l_methods.enable_put
|
||||
router.handle_with_request_methods ("/node", l_report_handler, l_methods)
|
||||
|
||||
create l_report_handler.make (roc_config)
|
||||
create l_methods
|
||||
l_methods.enable_get
|
||||
l_methods.enable_post
|
||||
l_methods.enable_put
|
||||
l_methods.enable_delete
|
||||
router.handle_with_request_methods ("/node/{id}", l_report_handler, l_methods)
|
||||
end
|
||||
|
||||
configure_api_navigation
|
||||
local
|
||||
l_report_handler: NAVIGATION_HANDLER
|
||||
l_methods: WSF_REQUEST_METHODS
|
||||
do
|
||||
create l_report_handler.make (roc_config)
|
||||
create l_methods
|
||||
l_methods.enable_get
|
||||
router.handle_with_request_methods ("/navigation", l_report_handler, l_methods)
|
||||
end
|
||||
|
||||
configure_api_login
|
||||
local
|
||||
l_report_handler: ROC_LOGIN_HANDLER
|
||||
l_methods: WSF_REQUEST_METHODS
|
||||
do
|
||||
create l_report_handler.make (roc_config)
|
||||
create l_methods
|
||||
l_methods.enable_get
|
||||
router.handle_with_request_methods ("/login", l_report_handler, l_methods)
|
||||
end
|
||||
|
||||
configure_api_logoff
|
||||
local
|
||||
l_report_handler: ROC_LOGOFF_HANDLER
|
||||
l_methods: WSF_REQUEST_METHODS
|
||||
do
|
||||
create l_report_handler.make (roc_config)
|
||||
create l_methods
|
||||
l_methods.enable_get
|
||||
router.handle_with_request_methods ("/logoff", l_report_handler, l_methods)
|
||||
end
|
||||
|
||||
|
||||
configure_api_nodes
|
||||
local
|
||||
l_report_handler: NODES_HANDLER
|
||||
l_methods: WSF_REQUEST_METHODS
|
||||
do
|
||||
create l_report_handler.make (roc_config)
|
||||
create l_methods
|
||||
l_methods.enable_get
|
||||
router.handle_with_request_methods ("/nodes", l_report_handler, l_methods)
|
||||
end
|
||||
|
||||
|
||||
configure_api_node_summary
|
||||
local
|
||||
l_report_handler: NODE_SUMMARY_HANDLER
|
||||
l_methods: WSF_REQUEST_METHODS
|
||||
do
|
||||
create l_report_handler.make (roc_config)
|
||||
create l_methods
|
||||
l_methods.enable_get
|
||||
l_methods.enable_post
|
||||
l_methods.enable_put
|
||||
router.handle_with_request_methods ("/node/{id}/summary", l_report_handler, l_methods)
|
||||
end
|
||||
|
||||
|
||||
configure_api_node_title
|
||||
local
|
||||
l_report_handler: NODE_TITLE_HANDLER
|
||||
l_methods: WSF_REQUEST_METHODS
|
||||
do
|
||||
create l_report_handler.make (roc_config)
|
||||
create l_methods
|
||||
l_methods.enable_get
|
||||
l_methods.enable_post
|
||||
l_methods.enable_put
|
||||
router.handle_with_request_methods ("/node/{id}/title", l_report_handler, l_methods)
|
||||
end
|
||||
|
||||
|
||||
configure_api_node_content
|
||||
local
|
||||
l_report_handler: NODE_CONTENT_HANDLER
|
||||
l_methods: WSF_REQUEST_METHODS
|
||||
do
|
||||
create l_report_handler.make (roc_config)
|
||||
create l_methods
|
||||
l_methods.enable_get
|
||||
l_methods.enable_post
|
||||
l_methods.enable_put
|
||||
router.handle_with_request_methods ("/node/{id}/content", l_report_handler, l_methods)
|
||||
end
|
||||
|
||||
|
||||
configure_api_register
|
||||
local
|
||||
l_report_handler: USER_HANDLER
|
||||
l_methods: WSF_REQUEST_METHODS
|
||||
do
|
||||
create l_report_handler.make (roc_config)
|
||||
create l_methods
|
||||
l_methods.enable_get
|
||||
l_methods.enable_post
|
||||
l_methods.enable_put
|
||||
router.handle_with_request_methods ("/user", l_report_handler, l_methods)
|
||||
end
|
||||
|
||||
|
||||
|
||||
end
|
||||
48
examples/api/src/service/shared_conneg_helper.e
Normal file
48
examples/api/src/service/shared_conneg_helper.e
Normal file
@@ -0,0 +1,48 @@
|
||||
note
|
||||
description: "Conneg Helper"
|
||||
date: "$Date: 2014-08-08 16:02:11 -0300 (vi., 08 ago. 2014) $"
|
||||
revision: "$Revision: 95593 $"
|
||||
|
||||
class
|
||||
SHARED_CONNEG_HELPER
|
||||
|
||||
|
||||
feature -- Access
|
||||
|
||||
conneg (req: WSF_REQUEST): SERVER_CONTENT_NEGOTIATION
|
||||
-- Content negotiatior for all requests.
|
||||
once
|
||||
create Result.make ({HTTP_MIME_TYPES}.text_html, "en", "UTF-8", "identity")
|
||||
end
|
||||
|
||||
mime_types_supported (req: WSF_REQUEST): LIST [STRING]
|
||||
-- All values for Accept header that `Current' can serve.
|
||||
do
|
||||
create {ARRAYED_LIST [STRING]} Result.make_from_array (<<{HTTP_MIME_TYPES}.text_html, "application/vnd.collection+json">>)
|
||||
Result.compare_objects
|
||||
ensure
|
||||
mime_types_supported_includes_default: Result.has (conneg (req).default_media_type)
|
||||
end
|
||||
|
||||
media_type_variants (req: WSF_REQUEST): HTTP_ACCEPT_MEDIA_TYPE_VARIANTS
|
||||
-- Media type negotiation.
|
||||
do
|
||||
Result := conneg (req).media_type_preference (mime_types_supported (req), req.http_accept)
|
||||
end
|
||||
|
||||
compression_supported (req: WSF_REQUEST): LIST [STRING]
|
||||
-- All values for Accept-Encofing header that `Current' can serve.
|
||||
do
|
||||
create {ARRAYED_LIST [STRING]} Result.make_from_array (<<"identity","deflate">>)
|
||||
Result.compare_objects
|
||||
ensure
|
||||
compression_supported_includes_default: Result.has (conneg (req).default_encoding)
|
||||
end
|
||||
|
||||
compression_variants (req: WSF_REQUEST): HTTP_ACCEPT_ENCODING_VARIANTS
|
||||
-- Compression negotiation.
|
||||
do
|
||||
Result := conneg (req).encoding_preference (compression_supported (req), req.http_accept_encoding)
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user