This is an automated email from the ASF dual-hosted git repository.

pierrejeambrun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 140196dc925 AIP-84 | Add Auth for Event Logs (#47246)
140196dc925 is described below

commit 140196dc925bf0269fc7e932639724e8003b51f5
Author: LIU ZHE YOU <[email protected]>
AuthorDate: Thu Mar 6 00:07:09 2025 +0800

    AIP-84 | Add Auth for Event Logs (#47246)
---
 airflow/api_fastapi/core_api/openapi/v1-generated.yaml |  4 ++++
 .../api_fastapi/core_api/routes/public/event_logs.py   |  3 +++
 .../core_api/routes/public/test_event_logs.py          | 18 ++++++++++++++++++
 3 files changed, 25 insertions(+)

diff --git a/airflow/api_fastapi/core_api/openapi/v1-generated.yaml 
b/airflow/api_fastapi/core_api/openapi/v1-generated.yaml
index acabf892d60..bb1fb080653 100644
--- a/airflow/api_fastapi/core_api/openapi/v1-generated.yaml
+++ b/airflow/api_fastapi/core_api/openapi/v1-generated.yaml
@@ -3542,6 +3542,8 @@ paths:
       - Event Log
       summary: Get Event Log
       operationId: get_event_log
+      security:
+      - OAuth2PasswordBearer: []
       parameters:
       - name: event_log_id
         in: path
@@ -3587,6 +3589,8 @@ paths:
       summary: Get Event Logs
       description: Get all Event Logs.
       operationId: get_event_logs
+      security:
+      - OAuth2PasswordBearer: []
       parameters:
       - name: limit
         in: query
diff --git a/airflow/api_fastapi/core_api/routes/public/event_logs.py 
b/airflow/api_fastapi/core_api/routes/public/event_logs.py
index 713c54babc3..33b3c68e564 100644
--- a/airflow/api_fastapi/core_api/routes/public/event_logs.py
+++ b/airflow/api_fastapi/core_api/routes/public/event_logs.py
@@ -40,6 +40,7 @@ from airflow.api_fastapi.core_api.datamodels.event_logs 
import (
     EventLogResponse,
 )
 from airflow.api_fastapi.core_api.openapi.exceptions import 
create_openapi_http_exception_doc
+from airflow.api_fastapi.core_api.security import DagAccessEntity, 
requires_access_dag
 from airflow.models import Log
 
 event_logs_router = AirflowRouter(tags=["Event Log"], prefix="/eventLogs")
@@ -48,6 +49,7 @@ event_logs_router = AirflowRouter(tags=["Event Log"], 
prefix="/eventLogs")
 @event_logs_router.get(
     "/{event_log_id}",
     responses=create_openapi_http_exception_doc([status.HTTP_404_NOT_FOUND]),
+    dependencies=[Depends(requires_access_dag("GET", 
DagAccessEntity.AUDIT_LOG))],
 )
 def get_event_log(
     event_log_id: int,
@@ -61,6 +63,7 @@ def get_event_log(
 
 @event_logs_router.get(
     "",
+    dependencies=[Depends(requires_access_dag("GET", 
DagAccessEntity.AUDIT_LOG))],
 )
 def get_event_logs(
     limit: QueryLimit,
diff --git a/tests/api_fastapi/core_api/routes/public/test_event_logs.py 
b/tests/api_fastapi/core_api/routes/public/test_event_logs.py
index 706e12e1dc2..d9b194c0a31 100644
--- a/tests/api_fastapi/core_api/routes/public/test_event_logs.py
+++ b/tests/api_fastapi/core_api/routes/public/test_event_logs.py
@@ -177,6 +177,16 @@ class TestGetEventLog(TestEventLogsEndpoint):
 
         assert response.json() == expected_json
 
+    def test_should_raises_401_unauthenticated(self, 
unauthenticated_test_client, setup):
+        event_log_id = setup[EVENT_NORMAL].id
+        response = 
unauthenticated_test_client.get(f"/public/eventLogs/{event_log_id}")
+        assert response.status_code == 401
+
+    def test_should_raises_403_forbidden(self, unauthorized_test_client, 
setup):
+        event_log_id = setup[EVENT_NORMAL].id
+        response = 
unauthorized_test_client.get(f"/public/eventLogs/{event_log_id}")
+        assert response.status_code == 403
+
 
 class TestGetEventLogs(TestEventLogsEndpoint):
     @pytest.mark.parametrize(
@@ -306,3 +316,11 @@ class TestGetEventLogs(TestEventLogsEndpoint):
         assert resp_json["total_entries"] == expected_total_entries
         for event_log, expected_event in zip(resp_json["event_logs"], 
expected_events):
             assert event_log["event"] == expected_event
+
+    def test_should_raises_401_unauthenticated(self, 
unauthenticated_test_client):
+        response = unauthenticated_test_client.get("/public/eventLogs")
+        assert response.status_code == 401
+
+    def test_should_raises_403_forbidden(self, unauthorized_test_client):
+        response = unauthorized_test_client.get("/public/eventLogs")
+        assert response.status_code == 403

Reply via email to