note
description : "Basic Service that shows the standard CGI variables"
date : "$Date$"
revision : "$Revision$"
EIS: "name=CGI specification","src=(https://tools.ietf.org/html/rfc3875", "protocol=url"
class
APPLICATION
inherit
WSF_DEFAULT_SERVICE
redefine
initialize
end
create
make_and_launch
feature {NONE} -- Initialization
initialize
-- Initialize current service.
do
set_service_option ("port", 9090)
set_service_option ("verbose", true)
end
feature -- Basic operations
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
-- Execute the incomming request
local
l_raw_data: STRING
l_page_response: STRING
l_rows: STRING
do
create l_page_response.make_from_string (html_template)
if req.path_info.same_string ("/") then
-- HTTP method
l_page_response.replace_substring_all ("$http_method", req.request_method)
-- URI
l_page_response.replace_substring_all ("$uri", req.path_info)
-- Protocol
l_page_response.replace_substring_all ("$protocol", req.server_protocol)
-- Fill the table rows with CGI standard variables
create l_rows.make_empty
-- Auth_type
l_rows.append ("
")
l_rows.append ("| ")
l_rows.append ("AUTH_TYPE")
l_rows.append (" | ")
l_rows.append ("")
if attached req.auth_type as l_type then
l_rows.append (l_type)
else
l_rows.append ("Not present")
end
l_rows.append (" | ")
l_rows.append ("
")
-- Content length
l_rows.append ("")
l_rows.append ("| ")
l_rows.append ("CONTENT_LENGTH")
l_rows.append (" | ")
l_rows.append ("")
if attached req.content_length as l_content_length then
l_rows.append (l_content_length)
else
l_rows.append ("Not present")
end
l_rows.append (" | ")
l_rows.append ("
")
-- Content length
l_rows.append ("")
l_rows.append ("| ")
l_rows.append ("CONTENT_TYPE")
l_rows.append (" | ")
l_rows.append ("")
if attached req.content_type as l_content_type then
l_rows.append (l_content_type.string)
else
l_rows.append ("Not present")
end
l_rows.append (" | ")
l_rows.append ("
")
-- Gateway interface
l_rows.append ("")
l_rows.append ("| ")
l_rows.append ("GATEWAY_INTERFACE")
l_rows.append (" | ")
l_rows.append ("")
if attached req.gateway_interface as l_gateway_interface then
l_rows.append (l_gateway_interface)
else
l_rows.append ("Not present")
end
l_rows.append (" | ")
l_rows.append ("
")
-- Path info
l_rows.append ("")
l_rows.append ("| ")
l_rows.append ("PATH_INFO")
l_rows.append (" | ")
l_rows.append ("")
if attached req.path_info as l_path_info then
l_rows.append (l_path_info)
else
l_rows.append ("Not present")
end
l_rows.append (" | ")
l_rows.append ("
")
-- Path translated
l_rows.append ("")
l_rows.append ("| ")
l_rows.append ("PATH_TRANSLATED")
l_rows.append (" | ")
l_rows.append ("")
if attached req.path_translated as l_path_translated then
l_rows.append (l_path_translated)
else
l_rows.append ("Not present")
end
l_rows.append (" | ")
l_rows.append ("
")
-- Query string
l_rows.append ("")
l_rows.append ("| ")
l_rows.append ("QUERY_STRING")
l_rows.append (" | ")
l_rows.append ("")
if attached req.query_string as l_query_string then
l_rows.append (l_query_string)
else
l_rows.append ("Not present")
end
l_rows.append (" | ")
l_rows.append ("
")
-- Remote addr
l_rows.append ("")
l_rows.append ("| ")
l_rows.append ("REMOTE_ADDR")
l_rows.append (" | ")
l_rows.append ("")
l_rows.append (req.remote_addr)
l_rows.append (" | ")
l_rows.append ("
")
-- Remote host
l_rows.append ("")
l_rows.append ("| ")
l_rows.append ("REMOTE_HOST")
l_rows.append (" | ")
l_rows.append ("")
if attached req.remote_host as l_remote_host then
l_rows.append (l_remote_host)
else
l_rows.append ("Not present")
end
l_rows.append (" | ")
l_rows.append ("
")
-- Remote ident
l_rows.append ("")
l_rows.append ("| ")
l_rows.append ("REMOTE_IDENT")
l_rows.append (" | ")
l_rows.append ("")
if attached req.remote_ident as l_remote_ident then
l_rows.append (l_remote_ident)
else
l_rows.append ("Not present")
end
l_rows.append (" | ")
l_rows.append ("
")
-- Remote user
l_rows.append ("")
l_rows.append ("| ")
l_rows.append ("REMOTE_USER")
l_rows.append (" | ")
l_rows.append ("")
if attached req.remote_user as l_remote_user then
l_rows.append (l_remote_user)
else
l_rows.append ("Not present")
end
l_rows.append (" | ")
l_rows.append ("
")
-- Request method
l_rows.append ("")
l_rows.append ("| ")
l_rows.append ("REQUEST_METHOD")
l_rows.append (" | ")
l_rows.append ("")
l_rows.append (req.request_method)
l_rows.append (" | ")
l_rows.append ("
")
-- Script name
l_rows.append ("")
l_rows.append ("| ")
l_rows.append ("SCRIPT_NAME")
l_rows.append (" | ")
l_rows.append ("")
l_rows.append (req.script_name)
l_rows.append (" | ")
l_rows.append ("
")
-- Server name
l_rows.append ("")
l_rows.append ("| ")
l_rows.append ("SERVER_NAME")
l_rows.append (" | ")
l_rows.append ("")
l_rows.append (req.server_name)
l_rows.append (" | ")
l_rows.append ("
")
-- Server protocol
l_rows.append ("")
l_rows.append ("| ")
l_rows.append ("SERVER_PROTOCOL")
l_rows.append (" | ")
l_rows.append ("")
l_rows.append (req.server_protocol)
l_rows.append (" | ")
l_rows.append ("
")
-- Server software
l_rows.append ("")
l_rows.append ("| ")
l_rows.append ("SERVER_SOFTWARE")
l_rows.append (" | ")
l_rows.append ("")
l_rows.append (req.server_software)
l_rows.append (" | ")
l_rows.append ("
")
l_page_response.replace_substring_all ("$rows", l_rows)
-- Reading the raw header
if attached req.raw_header_data as l_raw_header then
l_page_response.replace_substring_all ("$raw_header", l_raw_header)
end
res.put_header ({HTTP_STATUS_CODE}.ok, <<["Content-Type", "text/html"], ["Content-Length", l_page_response.count.out]>>)
res.put_string (l_page_response)
end
end
html_template: STRING = "[
EWF service example: Showing Standard CGI Variables
HTTP METHOD:$http_method
URI:$uri
PROTOCOL:$protocol
Raw header
$raw_header
]"
end