139 lines
5.0 KiB
Plaintext
139 lines
5.0 KiB
Plaintext
note
|
|
description : "Basic Service that a simple web page to show the most common status codes"
|
|
date : "$Date$"
|
|
revision : "$Revision$"
|
|
|
|
class
|
|
APPLICATION_EXECUTION
|
|
|
|
inherit
|
|
WSF_EXECUTION
|
|
|
|
create
|
|
make
|
|
|
|
feature -- Basic operations
|
|
|
|
execute
|
|
-- Execute the incomming request
|
|
local
|
|
l_message: STRING
|
|
do
|
|
-- To send a response we need to setup, the status code and
|
|
-- the response headers.
|
|
if request.is_get_request_method then
|
|
if request.path_info.same_string ("/") then
|
|
response.put_header ({HTTP_STATUS_CODE}.ok, <<["Content-Type", "text/html"], ["Content-Length", web_page.count.out]>>)
|
|
response.put_string (web_page)
|
|
elseif request.path_info.same_string ("/redirect") then
|
|
send_redirect (request, response, "https://httpwg.github.io/")
|
|
elseif request.path_info.same_string ("/bad_request") then
|
|
-- Here you can do some logic for example log, send emails to register the error, before to send the response.
|
|
create l_message.make_from_string (message_template)
|
|
l_message.replace_substring_all ("$title", "Bad Request")
|
|
l_message.replace_substring_all ("$status", "Bad Request 400")
|
|
response.put_header ({HTTP_STATUS_CODE}.bad_request, <<["Content-Type", "text/html"], ["Content-Length", l_message.count.out]>>)
|
|
response.put_string (l_message)
|
|
elseif request.path_info.same_string ("/internal_error") then
|
|
-- Here you can do some logic for example log, send emails to register the error, before to send the response.
|
|
create l_message.make_from_string (message_template)
|
|
l_message.replace_substring_all ("$title", "Internal Server Error")
|
|
l_message.replace_substring_all ("$status", "Internal Server Error 500")
|
|
response.put_header ({HTTP_STATUS_CODE}.internal_server_error, <<["Content-Type", "text/html"], ["Content-Length", l_message.count.out]>>)
|
|
response.put_string (l_message)
|
|
else
|
|
create l_message.make_from_string (message_template)
|
|
l_message.replace_substring_all ("$title", "Resource not found")
|
|
l_message.replace_substring_all ("$status", "Resource not found 400")
|
|
response.put_header ({HTTP_STATUS_CODE}.not_found, <<["Content-Type", "text/html"], ["Content-Length", l_message.count.out]>>)
|
|
response.put_string (l_message)
|
|
end
|
|
else
|
|
create l_message.make_from_string (message_template)
|
|
l_message.replace_substring_all ("$title", "Method Not Allowed")
|
|
l_message.replace_substring_all ("$status", "Method Not Allowed 405")
|
|
-- Method not allowed
|
|
response.put_header ({HTTP_STATUS_CODE}.method_not_allowed, <<["Content-Type", "text/html"], ["Content-Length", l_message.count.out]>>)
|
|
response.put_string (l_message)
|
|
end
|
|
end
|
|
|
|
|
|
feature -- Home Page
|
|
|
|
send_redirect (req: WSF_REQUEST; res: WSF_RESPONSE; a_location: READABLE_STRING_32)
|
|
-- Redirect to `a_location'
|
|
local
|
|
h: HTTP_HEADER
|
|
do
|
|
create h.make
|
|
h.put_content_type_text_html
|
|
h.put_current_date
|
|
h.put_location (a_location)
|
|
res.set_status_code ({HTTP_STATUS_CODE}.see_other)
|
|
res.put_header_text (h.string)
|
|
end
|
|
|
|
web_page: STRING = "[
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>Example showing common status codes</title>
|
|
</head>
|
|
<body>
|
|
<div id="header">
|
|
<p id="name">Use a tool to see the request and header details, for example (Developers tools in Chrome or Firebugs in Firefox)</p>
|
|
</div>
|
|
<div class="left"></div>
|
|
<div class="right">
|
|
<h4>This page is an example of Status Code 200</h4>
|
|
|
|
<h4> Redirect Example </h4>
|
|
<p> Click on the following link will redirect you to the HTTP Specifcation, we can do the redirect from the HTML directly but
|
|
here we want to show you an exmaple, where you can do something before to send a redirect <a href="/redirect">Redirect</a></p>
|
|
|
|
<h4> Bad Request </h4>
|
|
<p> Click on the following link, the server will answer with a 400 error, check the status code <a href="/bad_request">Bad Request</a></p>
|
|
|
|
<h4> Internal Server Error </h4>
|
|
<p> Click on the following link, the server will answer with a 500 error, check the status code <a href="/internal_error">Internal Error</a></p>
|
|
|
|
<h4> Resource not found </h4>
|
|
<p> Click on the following link or add to the end of the url something like /1030303 the server will answer with a 404 error, check the status code <a href="/not_foundd">Not found</a></p>
|
|
|
|
</div>
|
|
<div id="footer">
|
|
<p>Useful links for status codes <a href="httpstat.us">httpstat.us</a> and <a href="httpbing.org">httpbin.org</a></p>
|
|
</div>
|
|
</body>
|
|
</html>
|
|
]"
|
|
|
|
feature -- Generic Message
|
|
|
|
message_template: STRING="[
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>$title</title>
|
|
</head>
|
|
<body>
|
|
<div id="header">
|
|
<p id="name">Use a tool to see the request and header details, for example (Developers tools in Chrome or Firebugs in Firefox)</p>
|
|
</div>
|
|
<div class="left"></div>
|
|
<div class="right">
|
|
<h4>This page is an example of $status</h4>
|
|
|
|
<div id="footer">
|
|
<p><a href="/">Back Home</a></p>
|
|
</div>
|
|
</body>
|
|
</html>
|
|
]"
|
|
|
|
|
|
|
|
|
|
end
|