Skip to content

Commit

Permalink
TS-15-Add-more-detail-to-echo-request (#81)
Browse files Browse the repository at this point in the history
* TS-15: Add http headers.

* TS-15 Refactor EchoData class.

* Remove depreated field.
  • Loading branch information
cgerull committed Nov 11, 2023
1 parent 9720faf commit d3d5b92
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 40 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ lint: ## Run pylint
pylint --disable=R,C,E0237,E1101,W0511 test_server

test:lint ## Execute python unit tests
pytest -vv --junitxml=reports/test-results.xml --cov-report=html:reports term-missing --cov=test_server tests/test_*.py
pytest -vv --junitxml=reports/test-results.xml --cov-report=html:reports --cov=test_server tests/test_*.py

run:test ## Run application local in python
export ENV=development && \
Expand Down
3 changes: 2 additions & 1 deletion test_server/echo.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def echo():
"INSERT INTO \
req_log (response_code, request_url, request_from_ip) \
VALUES (?, ?, ?)",
(200, request.url, remote_info['remote_addr']),
(200, request.url, remote_info['RemoteAddr']),
)
my_db.commit()
except my_db.IntegrityError:
Expand All @@ -78,6 +78,7 @@ def echo():

return render_template('echo/echo.html',
echo=remote_info,
headers=remote_data.get_http_headers(),
# state=local_data.get_server_state(),
env={
'version': current_app.config['VERSION'],
Expand Down
62 changes: 37 additions & 25 deletions test_server/echo_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,47 +19,59 @@ class EchoData():
headers = {}

def __init__(self, my_request):
self.remote_data = self.set_remote_data(my_request)
# self.remote_data = self.set_remote_data(my_request)
self.request = my_request

def get_remote_data(self):
""" Return the class data set."""
return self.remote_data

def set_remote_data(self, my_request):
""" Set class data from http request."""
return {
'remote_addr': self.get_remote_ip(my_request),
'url': my_request.url,
'url_charset': my_request.content_encoding,
'referrer': my_request.referrer,
'user_agent': my_request.user_agent.string,
'RemoteAddr': self.get_remote_ip(),
'URL': self.request.url,
# 'Charset': self.request.charset,
'Cookies': self.request.cookies,
'Method': f"{self.request.environ['REQUEST_METHOD']} {self.request.environ['SERVER_PROTOCOL']}",
'QueryString': self.request.environ['QUERY_STRING'],
'Referrer': self.request.referrer,
'UserAgent': self.request.user_agent.string,
}

@staticmethod
def get_http_headers(my_request):
# def set_remote_data(self, my_request):
# """ Set class data from http request."""
# return {
# 'remote_addr': self.get_remote_ip(my_request),
# 'url': my_request.url,
# 'url_charset': my_request.charset,
# 'accept_encodings': my_request.accept_encodings,
# 'accept_languages': my_request.accept_languages,
# 'accept_mimetypes': my_request.accept_mimetypes,
# 'referrer': my_request.referrer,
# 'user_agent': my_request.user_agent.string,
# }

# @staticmethod
def get_http_headers(self):
""" Get HTTP headers from request."""
result = {}
for header in my_request.headers.environ:
for header in self.request.headers.environ:
if header.startswith('HTTP_'):
result[header]=my_request.headers.environ[header]
result[header]=self.request.headers.environ[header]

return result

@staticmethod
def get_remote_ip(my_request):
# @staticmethod
def get_remote_ip(self):
"""
Get client ip address, trying to resolve any
proxies that modify the my_request.
proxies that modify the request.
"""
client_ip = ''
if 'HTTP_X_REAL_IP' in my_request.environ :
client_ip = my_request.environ['HTTP_X_REAL_IP']
elif 'X_REAL_IP' in my_request.environ :
client_ip = my_request.environ['X_REAL_IP']
elif 'HTTP_X_FORWARDED_FOR' in my_request.environ :
client_ip = my_request.environ['HTTP_X_FORWARDED_FOR']
if 'HTTP_X_REAL_IP' in self.request.environ :
client_ip = self.request.environ['HTTP_X_REAL_IP']
elif 'X_REAL_IP' in self.request.environ :
client_ip = self.request.environ['X_REAL_IP']
elif 'HTTP_X_FORWARDED_FOR' in self.request.environ :
client_ip = self.request.environ['HTTP_X_FORWARDED_FOR']
else:
client_ip = my_request.remote_addr
client_ip = self.request.remote_addr

return client_ip

51 changes: 38 additions & 13 deletions test_server/templates/echo/echo.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,53 @@
{% block content %}
<h1>Welcome to {{ config['APP_NAME'] }}</h1>

<h2>Your request was </h2>
<p>
<dl>
<h2>Request </h2>
<table class="table table-sm table-hover table-responsive-md">
<tbody>
{% for key in echo %}
<dt>{{ key }}:</dt>
<dd></dd>{{ echo[key] }}</dd>
<tr>
<td>{{ key }}</td>
<td>{{ echo[key] }}</td>
</tr>
{% endfor %}
</dl>
</p>
</tbody>
</table>


<h2>Request headers </h2>
<p>
<table class="table table-sm table-hover table-responsive-md">
<tbody>
{% for key in headers %}
<tr>
<td>{{ key }}:</td>
<td>{{ headers[key] }}</td>

</tr>
{% endfor %}
</tbody>
</table>
</p>
<!-- <h2>Server Info</h2>
<p>
{% for key in info %}
{{ key }}: {{ info[key] }}<br>
{% endfor %}
</p> -->

<h2>App version</h2>
<p>
Testserver version is {{ env.version }}<br>
Running in {{ env.environment }} environment<br>
</p>

<h2>App info</h2>
<table class="table table-sm table-hover table-responsive-md">
<tbody>
<tr>
<td>Testserver version</td>
<td>{{ env.version }}</td>
</tr>
<tr>
<td>Environment</td>
<td>{{ env.environment }}</td>
</tr>
</tbody>
</table>

{% if 0 < page_views %}
<p>
Expand Down
1 change: 1 addition & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ def runner(app):


class AuthActions(object):
""" Utility class for login simulation. """
def __init__(self, client):
self._client = client

Expand Down

0 comments on commit d3d5b92

Please sign in to comment.