test_datasource_api_security.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from flask import Flask
  2. def test_datasource_list_never_serializes_credentials(monkeypatch):
  3. from app.api.data_source import routes
  4. from app.core.data_source.models import DataSourceDefinition
  5. from app.core.data_source.service import DataSourceService
  6. class FakeService:
  7. serialize = staticmethod(DataSourceService.serialize)
  8. def list(self, _payload):
  9. return [
  10. DataSourceDefinition(
  11. uid="01900000-0000-7000-8000-000000000010",
  12. name_en="warehouse",
  13. database_type="postgresql",
  14. host="db",
  15. port=5432,
  16. database="analytics",
  17. credential_ref="credential-id",
  18. credential_version=2,
  19. )
  20. ]
  21. monkeypatch.setattr(routes, "get_data_source_service", FakeService)
  22. app = Flask(__name__)
  23. with app.test_request_context("/api/datasource/list", method="POST", json={}):
  24. result = routes.data_source_list()
  25. response = result[0] if isinstance(result, tuple) else result
  26. text = response.get_data(as_text=True).lower()
  27. body = response.get_json()["data"]["data_source"][0]
  28. assert "password" not in text
  29. assert "username" not in text
  30. assert "encrypted_payload" not in text
  31. assert "credential_ref" not in text
  32. assert body["credential_configured"] is True