Skip to content

Commit

Permalink
refactor(api): log api request (#109)
Browse files Browse the repository at this point in the history
  • Loading branch information
vmttn committed Jul 3, 2023
1 parent f0f0b76 commit 2582c8e
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 2 deletions.
1 change: 1 addition & 0 deletions api/src/alembic/versions/2daaedf28c12_extended_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ def upgrade() -> None:
)
op.add_column("api_request", sa.Column("client_host", sa.Text(), nullable=True))
op.add_column("api_request", sa.Column("client_port", sa.Integer(), nullable=True))
op.add_column("api_request", sa.Column("endpoint_name", sa.Text(), nullable=True))


def downgrade() -> None:
Expand Down
3 changes: 3 additions & 0 deletions api/src/data_inclusion/api/core/auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ def on_error(conn: HTTPConnection, exc: Exception) -> responses.Response:

class AuthenticationBackend(authentication.AuthenticationBackend):
async def authenticate(self, conn):
if "Authorization" not in conn.headers:
return

http_bearer_instance = HTTPBearer()

try:
Expand Down
1 change: 1 addition & 0 deletions api/src/data_inclusion/api/core/request/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,4 @@ class Request(Base):
query_params = sqla.Column(JSONB)
client_host = sqla.Column(sqla.Text)
client_port = sqla.Column(sqla.Integer)
endpoint_name = sqla.Column(sqla.Text)
5 changes: 4 additions & 1 deletion api/src/data_inclusion/api/core/request/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,14 @@ def save_request(request: requests.Request, response: responses.Response) -> Non
method=request.method,
path=request.url.path,
base_url=str(request.base_url),
user=request.user.username,
user=request.user.username if request.user.is_authenticated else None,
path_params=request.path_params,
query_params=dict(request.query_params),
client_host=request.client.host,
client_port=request.client.port,
endpoint_name=request.scope["route"].name
if "route" in request.scope
else None,
)
session.add(request_instance)
session.commit()
12 changes: 11 additions & 1 deletion api/tests/core/test_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ def test_save_api_request_with_token(api_client, db_session):
assert request_instance.method == "GET"
assert request_instance.path_params == {"source": "foo", "id": "bar"}
assert request_instance.query_params == {"baz": "1"}
assert request_instance.endpoint_name == "retrieve_structure_endpoint"


def test_save_api_request_without_token(api_client, db_session):
Expand All @@ -27,4 +28,13 @@ def test_save_api_request_without_token(api_client, db_session):
response = api_client.get(url)

assert response.status_code == 403
assert db_session.query(models.Request).count() == 0
assert db_session.query(models.Request).count() == 1

request_instance = db_session.query(models.Request).first()
assert request_instance.status_code == 403
assert request_instance.user is None
assert request_instance.path == "/api/v0/structures"
assert request_instance.method == "GET"
assert request_instance.path_params == {}
assert request_instance.query_params == {}
assert request_instance.endpoint_name == "list_structures_endpoint"

0 comments on commit 2582c8e

Please sign in to comment.