apache-airflow-providers-fab 2.2.1rc2__tar.gz → 2.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/PKG-INFO +10 -11
  2. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/README.rst +4 -4
  3. apache_airflow_providers_fab-2.3.0/docs/auth-manager/api-authentication.rst +340 -0
  4. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/auth-manager/token.rst +3 -0
  5. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/changelog.rst +30 -0
  6. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/index.rst +3 -3
  7. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/provider.yaml +2 -1
  8. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/pyproject.toml +6 -7
  9. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/__init__.py +1 -1
  10. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api/auth/backend/basic_auth.py +2 -1
  11. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py +2 -1
  12. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api/auth/backend/session.py +2 -1
  13. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api_fastapi/openapi/v2-fab-auth-manager-generated.yaml +2 -2
  14. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api_fastapi/services/login.py +17 -8
  15. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/security_manager/override.py +13 -7
  16. apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/version_compat.py +35 -0
  17. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/api_connexion/parameters.py +2 -2
  18. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/api_connexion/security.py +2 -1
  19. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/api_connexion/types.py +5 -7
  20. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/auth.py +2 -2
  21. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/extensions/init_views.py +9 -5
  22. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/package-lock.json +174 -130
  23. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/package.json +4 -4
  24. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/security_manager.py +1 -1
  25. apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/743.b6629eaae7f541f4158f.js → apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/dist/743.27a753a06671118f1c5c.js +2 -2
  26. apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.5a4eda684d2f5f33fa6a.js → apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.56d4475fdae7883d3454.js +1 -1
  27. apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/flash.9f756672299e9e57a824.js → apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/dist/flash.0951d47c62bc8906be65.js +1 -1
  28. apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/dist/jquery-ui.min.js +2 -0
  29. apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/loadingDots.fc35e1feb443bd3a8d80.js → apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/dist/loadingDots.deaad0ce0e7691ed6251.js +1 -1
  30. apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/dist/main.810554d06c3e30f2484e.js +2 -0
  31. apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/dist/manifest.json +22 -0
  32. apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/dist/materialIcons.b0c6cc32cdacff89f7c2.js +1 -0
  33. apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/dist/moment.518a43bcfaf149ae2836.js +1 -0
  34. apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/dist/runtime.4a925577de9ab84d8e00.js +1 -0
  35. apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/pin_100.png +0 -0
  36. apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/pin_32.png +0 -0
  37. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/api/auth/backend/test_basic_auth.py +0 -1
  38. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/api/auth/backend/test_session.py +0 -1
  39. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/api_endpoints/remote_user_api_auth_backend.py +2 -1
  40. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/api_fastapi/routes/test_login.py +0 -3
  41. apache_airflow_providers_fab-2.3.0/tests/unit/fab/auth_manager/api_fastapi/services/test_login.py +103 -0
  42. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/cli_commands/test_utils.py +0 -2
  43. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/test_fab_auth_manager.py +0 -5
  44. apache_airflow_providers_fab-2.3.0/www-hash.txt +1 -0
  45. apache_airflow_providers_fab-2.2.1rc2/docs/auth-manager/api-authentication.rst +0 -135
  46. apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/jquery-ui.min.js +0 -2
  47. apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/main.26e36c3998f451900260.js +0 -2
  48. apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/manifest.json +0 -22
  49. apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/materialIcons.e84a12f5be6e8d456d02.js +0 -1
  50. apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/moment.9023635a87b836172067.js +0 -1
  51. apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/runtime.78bb8f6146c25d99b9e2.js +0 -1
  52. apache_airflow_providers_fab-2.2.1rc2/tests/unit/fab/auth_manager/api_fastapi/services/test_login.py +0 -105
  53. apache_airflow_providers_fab-2.2.1rc2/www-hash.txt +0 -1
  54. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/3rd-party-licenses/LICENSES-ui.txt +0 -0
  55. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/NOTICE +0 -0
  56. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/api-ref/fab-public-api-ref.rst +0 -0
  57. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/api-ref/fab-token-api-ref.rst +0 -0
  58. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/auth-manager/access-control.rst +0 -0
  59. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/auth-manager/configuring-flask-app.rst +0 -0
  60. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/auth-manager/index.rst +0 -0
  61. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/auth-manager/security.rst +0 -0
  62. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/auth-manager/webserver-authentication.rst +0 -0
  63. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/cli-ref.rst +0 -0
  64. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/commits.rst +0 -0
  65. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/conf.py +0 -0
  66. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/configurations-ref.rst +0 -0
  67. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/img/add-role.png +0 -0
  68. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/img/diagram_fab_auth_manager_airflow_architecture.md5sum +0 -0
  69. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/img/diagram_fab_auth_manager_airflow_architecture.png +0 -0
  70. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/img/diagram_fab_auth_manager_airflow_architecture.py +0 -0
  71. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/img/new-role.png +0 -0
  72. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/installing-providers-from-sources.rst +0 -0
  73. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/migrations-ref.rst +0 -0
  74. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/security.rst +0 -0
  75. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/docs/upgrading.rst +0 -0
  76. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/__init__.py +0 -0
  77. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/3rd-party-licenses/LICENSES-ui.txt +0 -0
  78. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/__init__.py +0 -0
  79. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/LICENSE +0 -0
  80. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/alembic.ini +0 -0
  81. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/__init__.py +0 -0
  82. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api/__init__.py +0 -0
  83. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api/auth/__init__.py +0 -0
  84. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api/auth/backend/__init__.py +0 -0
  85. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api_endpoints/__init__.py +0 -0
  86. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api_endpoints/role_and_permission_endpoint.py +0 -0
  87. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api_endpoints/user_endpoint.py +0 -0
  88. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api_fastapi/__init__.py +0 -0
  89. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api_fastapi/datamodels/__init__.py +0 -0
  90. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api_fastapi/datamodels/login.py +0 -0
  91. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api_fastapi/openapi/__init__.py +0 -0
  92. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api_fastapi/routes/__init__.py +0 -0
  93. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api_fastapi/routes/login.py +0 -0
  94. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/api_fastapi/services/__init__.py +0 -0
  95. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/cli_commands/__init__.py +0 -0
  96. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/cli_commands/db_command.py +0 -0
  97. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/cli_commands/definition.py +0 -0
  98. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/cli_commands/role_command.py +0 -0
  99. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/cli_commands/sync_perm_command.py +0 -0
  100. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/cli_commands/user_command.py +0 -0
  101. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/cli_commands/utils.py +0 -0
  102. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/fab_auth_manager.py +0 -0
  103. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/models/__init__.py +0 -0
  104. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/models/anonymous_user.py +0 -0
  105. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/models/db.py +0 -0
  106. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/openapi/__init__.py +0 -0
  107. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/openapi/v1-flask-api.yaml +0 -0
  108. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/schemas/__init__.py +0 -0
  109. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/schemas/role_and_permission_schema.py +0 -0
  110. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/schemas/user_schema.py +0 -0
  111. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/security_manager/__init__.py +0 -0
  112. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/security_manager/constants.py +0 -0
  113. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/views/__init__.py +0 -0
  114. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/views/permissions.py +0 -0
  115. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/views/roles_list.py +0 -0
  116. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/views/user.py +0 -0
  117. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/views/user_edit.py +0 -0
  118. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/auth_manager/views/user_stats.py +0 -0
  119. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/get_provider_info.py +0 -0
  120. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/migrations/README +0 -0
  121. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/migrations/__init__.py +0 -0
  122. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/migrations/env.py +0 -0
  123. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/migrations/script.py.mako +0 -0
  124. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/migrations/versions/0001_1_4_0_placeholder_migration.py +0 -0
  125. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/migrations/versions/__init__.py +0 -0
  126. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/__init__.py +0 -0
  127. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/airflow_flask_app.py +0 -0
  128. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/api_connexion/__init__.py +0 -0
  129. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/api_connexion/exceptions.py +0 -0
  130. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/app.py +0 -0
  131. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/constants.py +0 -0
  132. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/extensions/__init__.py +0 -0
  133. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/extensions/init_appbuilder.py +0 -0
  134. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/extensions/init_jinja_globals.py +0 -0
  135. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/extensions/init_manifest_files.py +0 -0
  136. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/extensions/init_security.py +0 -0
  137. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/extensions/init_session.py +0 -0
  138. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/extensions/init_wsgi_middlewares.py +0 -0
  139. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/security/__init__.py +0 -0
  140. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/security/permissions.py +0 -0
  141. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/security_appless.py +0 -0
  142. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/session.py +0 -0
  143. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/static/css/bootstrap-theme.css +0 -0
  144. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/static/css/flash.css +0 -0
  145. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/static/css/loading-dots.css +0 -0
  146. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/static/css/main.css +0 -0
  147. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/static/css/material-icons.css +0 -0
  148. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/static/dist/48f0ea180c40270a5b05.png +0 -0
  149. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/static/dist/649c0b07771e68fafdeb.png +0 -0
  150. /apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/743.b6629eaae7f541f4158f.js.LICENSE.txt → /apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/dist/743.27a753a06671118f1c5c.js.LICENSE.txt +0 -0
  151. /apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.5a4eda684d2f5f33fa6a.css → /apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.56d4475fdae7883d3454.css +0 -0
  152. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/static/dist/f7490d556a6c42e49ba4.png +0 -0
  153. /apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/flash.9f756672299e9e57a824.css → /apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/dist/flash.0951d47c62bc8906be65.css +0 -0
  154. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/static/dist/jquery-ui.min.css +0 -0
  155. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/static/dist/jquery-ui.min.js.LICENSE.txt +0 -0
  156. /apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/loadingDots.fc35e1feb443bd3a8d80.css → /apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/dist/loadingDots.deaad0ce0e7691ed6251.css +0 -0
  157. /apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/main.26e36c3998f451900260.css → /apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/dist/main.810554d06c3e30f2484e.css +0 -0
  158. /apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/main.26e36c3998f451900260.js.LICENSE.txt → /apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/dist/main.810554d06c3e30f2484e.js.LICENSE.txt +0 -0
  159. /apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/materialIcons.e84a12f5be6e8d456d02.css → /apache_airflow_providers_fab-2.3.0/src/airflow/providers/fab/www/static/dist/materialIcons.b0c6cc32cdacff89f7c2.css +0 -0
  160. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/static/dist/oss-licenses.json +0 -0
  161. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/static/js/datetime_utils.js +0 -0
  162. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/static/js/main.js +0 -0
  163. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/static/sort_asc.png +0 -0
  164. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/static/sort_both.png +0 -0
  165. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/static/sort_desc.png +0 -0
  166. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/templates/airflow/_messages.html +0 -0
  167. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/templates/airflow/error.html +0 -0
  168. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/templates/airflow/main.html +0 -0
  169. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/templates/airflow/traceback.html +0 -0
  170. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/templates/appbuilder/flash.html +0 -0
  171. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/templates/appbuilder/index.html +0 -0
  172. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/templates/appbuilder/navbar.html +0 -0
  173. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/templates/appbuilder/navbar_menu.html +0 -0
  174. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/templates/appbuilder/navbar_right.html +0 -0
  175. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/utils.py +0 -0
  176. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/views.py +0 -0
  177. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/src/airflow/providers/fab/www/webpack.config.js +0 -0
  178. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/conftest.py +0 -0
  179. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/__init__.py +0 -0
  180. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/__init__.py +0 -0
  181. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/__init__.py +0 -0
  182. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/api/__init__.py +0 -0
  183. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/api/auth/__init__.py +0 -0
  184. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/api/auth/backend/__init__.py +0 -0
  185. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/api/auth/backend/test_kerberos_auth.py +0 -0
  186. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/api_endpoints/__init__.py +0 -0
  187. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/api_endpoints/api_connexion_utils.py +0 -0
  188. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/api_endpoints/test_auth.py +0 -0
  189. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/api_endpoints/test_role_and_permission_endpoint.py +0 -0
  190. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/api_endpoints/test_user_endpoint.py +0 -0
  191. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/api_fastapi/__init__.py +0 -0
  192. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/api_fastapi/conftest.py +0 -0
  193. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/api_fastapi/routes/__init__.py +0 -0
  194. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/api_fastapi/services/__init__.py +0 -0
  195. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/cli_commands/__init__.py +0 -0
  196. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/cli_commands/test_db_command.py +0 -0
  197. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/cli_commands/test_definition.py +0 -0
  198. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/cli_commands/test_role_command.py +0 -0
  199. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/cli_commands/test_sync_perm_command.py +0 -0
  200. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/cli_commands/test_user_command.py +0 -0
  201. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/conftest.py +0 -0
  202. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/models/__init__.py +0 -0
  203. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/models/test_anonymous_user.py +0 -0
  204. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/models/test_db.py +0 -0
  205. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/schemas/__init__.py +0 -0
  206. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/schemas/test_role_and_permission_schema.py +0 -0
  207. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/schemas/test_user_schema.py +0 -0
  208. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/security_manager/__init__.py +0 -0
  209. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/security_manager/test_constants.py +0 -0
  210. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/security_manager/test_override.py +0 -0
  211. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/test_models.py +0 -0
  212. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/test_security.py +0 -0
  213. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/views/__init__.py +0 -0
  214. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/views/test_permissions.py +0 -0
  215. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/views/test_roles_list.py +0 -0
  216. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/views/test_user.py +0 -0
  217. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/views/test_user_edit.py +0 -0
  218. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/auth_manager/views/test_user_stats.py +0 -0
  219. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/decorators.py +0 -0
  220. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/utils.py +0 -0
  221. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/www/__init__.py +0 -0
  222. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/www/test_auth.py +0 -0
  223. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/www/test_utils.py +0 -0
  224. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/www/views/__init__.py +0 -0
  225. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/www/views/conftest.py +0 -0
  226. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/www/views/test_connection_form_fields.py +0 -0
  227. {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0}/tests/unit/fab/www/views/test_views_custom_user_views.py +0 -0
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apache-airflow-providers-fab
3
- Version: 2.2.1rc2
3
+ Version: 2.3.0
4
4
  Summary: Provider package apache-airflow-providers-fab for Apache Airflow
5
5
  Keywords: airflow-provider,fab,airflow,integration
6
6
  Author-email: Apache Software Foundation <dev@airflow.apache.org>
7
7
  Maintainer-email: Apache Software Foundation <dev@airflow.apache.org>
8
- Requires-Python: ~=3.9
8
+ Requires-Python: ~=3.10
9
9
  Description-Content-Type: text/x-rst
10
10
  Classifier: Development Status :: 5 - Production/Stable
11
11
  Classifier: Environment :: Console
@@ -15,15 +15,14 @@ Classifier: Intended Audience :: System Administrators
15
15
  Classifier: Framework :: Apache Airflow
16
16
  Classifier: Framework :: Apache Airflow :: Provider
17
17
  Classifier: License :: OSI Approved :: Apache Software License
18
- Classifier: Programming Language :: Python :: 3.9
19
18
  Classifier: Programming Language :: Python :: 3.10
20
19
  Classifier: Programming Language :: Python :: 3.11
21
20
  Classifier: Programming Language :: Python :: 3.12
22
21
  Classifier: Topic :: System :: Monitoring
23
22
  License-File: 3rd-party-licenses/LICENSES-ui.txt
24
23
  License-File: NOTICE
25
- Requires-Dist: apache-airflow>=3.0.2rc1
26
- Requires-Dist: apache-airflow-providers-common-compat>=1.2.1rc1
24
+ Requires-Dist: apache-airflow>=3.0.2
25
+ Requires-Dist: apache-airflow-providers-common-compat>=1.2.1
27
26
  Requires-Dist: blinker>=1.6.2
28
27
  Requires-Dist: flask>=2.2.1,<2.3
29
28
  Requires-Dist: flask-appbuilder==4.6.3
@@ -36,8 +35,8 @@ Requires-Dist: werkzeug>=2.2,<4
36
35
  Requires-Dist: wtforms>=3.0,<4
37
36
  Requires-Dist: kerberos>=1.3.0 ; extra == "kerberos"
38
37
  Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
39
- Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-fab/2.2.1/changelog.html
40
- Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-fab/2.2.1
38
+ Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-fab/2.3.0/changelog.html
39
+ Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-fab/2.3.0
41
40
  Project-URL: Mastodon, https://fosstodon.org/@airflow
42
41
  Project-URL: Slack Chat, https://s.apache.org/airflow-slack
43
42
  Project-URL: Source Code, https://github.com/apache/airflow
@@ -69,7 +68,7 @@ Provides-Extra: kerberos
69
68
 
70
69
  Package ``apache-airflow-providers-fab``
71
70
 
72
- Release: ``2.2.1``
71
+ Release: ``2.3.0``
73
72
 
74
73
 
75
74
  `Flask App Builder <https://flask-appbuilder.readthedocs.io/>`__
@@ -82,7 +81,7 @@ This is a provider package for ``fab`` provider. All classes for this provider p
82
81
  are in ``airflow.providers.fab`` python package.
83
82
 
84
83
  You can find package information and changelog for the provider
85
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.2.1/>`_.
84
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.3.0/>`_.
86
85
 
87
86
  Installation
88
87
  ------------
@@ -91,7 +90,7 @@ You can install this package on top of an existing Airflow 2 installation (see `
91
90
  for the minimum Airflow version supported) via
92
91
  ``pip install apache-airflow-providers-fab``
93
92
 
94
- The package supports the following python versions: 3.9,3.10,3.11,3.12
93
+ The package supports the following python versions: 3.10,3.11,3.12
95
94
 
96
95
  Requirements
97
96
  ------------
@@ -133,5 +132,5 @@ Dependent package
133
132
  ================================================================================================================== =================
134
133
 
135
134
  The changelog for the provider package can be found in the
136
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.2.1/changelog.html>`_.
135
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.3.0/changelog.html>`_.
137
136
 
@@ -23,7 +23,7 @@
23
23
 
24
24
  Package ``apache-airflow-providers-fab``
25
25
 
26
- Release: ``2.2.1``
26
+ Release: ``2.3.0``
27
27
 
28
28
 
29
29
  `Flask App Builder <https://flask-appbuilder.readthedocs.io/>`__
@@ -36,7 +36,7 @@ This is a provider package for ``fab`` provider. All classes for this provider p
36
36
  are in ``airflow.providers.fab`` python package.
37
37
 
38
38
  You can find package information and changelog for the provider
39
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.2.1/>`_.
39
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.3.0/>`_.
40
40
 
41
41
  Installation
42
42
  ------------
@@ -45,7 +45,7 @@ You can install this package on top of an existing Airflow 2 installation (see `
45
45
  for the minimum Airflow version supported) via
46
46
  ``pip install apache-airflow-providers-fab``
47
47
 
48
- The package supports the following python versions: 3.9,3.10,3.11,3.12
48
+ The package supports the following python versions: 3.10,3.11,3.12
49
49
 
50
50
  Requirements
51
51
  ------------
@@ -87,4 +87,4 @@ Dependent package
87
87
  ================================================================================================================== =================
88
88
 
89
89
  The changelog for the provider package can be found in the
90
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.2.1/changelog.html>`_.
90
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.3.0/changelog.html>`_.
@@ -0,0 +1,340 @@
1
+ .. Licensed to the Apache Software Foundation (ASF) under one
2
+ or more contributor license agreements. See the NOTICE file
3
+ distributed with this work for additional information
4
+ regarding copyright ownership. The ASF licenses this file
5
+ to you under the Apache License, Version 2.0 (the
6
+ "License"); you may not use this file except in compliance
7
+ with the License. You may obtain a copy of the License at
8
+
9
+ .. http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ .. Unless required by applicable law or agreed to in writing,
12
+ software distributed under the License is distributed on an
13
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ KIND, either express or implied. See the License for the
15
+ specific language governing permissions and limitations
16
+ under the License.
17
+
18
+ FAB auth manager API authentication
19
+ ===================================
20
+
21
+ .. note::
22
+ This guide only applies to :doc:`FAB auth manager API </api-ref/fab-public-api-ref>`.
23
+
24
+ Authentication for the APIs is handled by what is called an authentication backend. The default is to check the user session:
25
+
26
+ .. code-block:: ini
27
+
28
+ [fab]
29
+ auth_backends = airflow.providers.fab.auth_manager.api.auth.backend.session
30
+
31
+ If you want to check which authentication backends are currently set, you can use ``airflow config get-value fab auth_backends``
32
+ command as in the example below.
33
+
34
+ .. code-block:: console
35
+
36
+ $ airflow config get-value fab auth_backends
37
+ airflow.providers.fab.auth_manager.api.auth.backend.basic_auth
38
+
39
+ .. versionchanged:: 3.0.0
40
+
41
+ In Airflow, the default setting is using token based authentication.
42
+ This approach is independent from which ``auth_backend`` is used.
43
+ The default setting is using Airflow public API to create a token (JWT) first and use this token in the requests to access the API.
44
+
45
+ Kerberos authentication
46
+ '''''''''''''''''''''''
47
+
48
+ Kerberos authentication is currently supported for the API, both experimental and stable.
49
+
50
+ To enable Kerberos authentication, set the following in the configuration:
51
+
52
+ .. code-block:: ini
53
+
54
+ [fab]
55
+ auth_backends = airflow.providers.fab.auth_manager.api.auth.backend.kerberos_auth
56
+
57
+ [kerberos]
58
+ keytab = <KEYTAB>
59
+
60
+ The Airflow Kerberos service is configured as ``airflow/fully.qualified.domainname@REALM``. Make sure this
61
+ principal exists `in both the Kerberos database as well as in the keytab file </docs/apache-airflow/stable/security/kerberos.html#enabling-kerberos>`_.
62
+
63
+ You have to make sure to name your users with the kerberos full username/realm in order to make it
64
+ work. This means that your user name should be ``user_name@REALM``.
65
+
66
+ .. code-block:: bash
67
+
68
+ kinit user_name@REALM
69
+ ENDPOINT_URL="http://localhost:8080/"
70
+ curl -X GET \
71
+ --negotiate \ # enables Negotiate (SPNEGO) authentication
72
+ --service airflow \ # matches the `airflow` service name in the `airflow/fully.qualified.domainname@REALM` principal
73
+ --user : \
74
+ "${ENDPOINT_URL}/api/v1/pools"
75
+
76
+
77
+ .. note::
78
+
79
+ Remember that the APIs are secured by both authentication and `access control <./access-control.html>`_.
80
+ This means that your user needs to have a Role with necessary associated permissions, otherwise you'll receive
81
+ a 403 response.
82
+
83
+
84
+ Basic authentication
85
+ ''''''''''''''''''''
86
+
87
+ `Basic username password authentication <https://en.wikipedia.org/wiki/Basic_access_authentication>`_ is currently
88
+ supported for the API. This works for users created through LDAP login or
89
+ within Airflow Metadata DB using password.
90
+
91
+ To enable basic authentication, set the following in the configuration:
92
+
93
+ .. code-block:: ini
94
+
95
+ [fab]
96
+ auth_backends = airflow.providers.fab.auth_manager.api.auth.backend.basic_auth
97
+
98
+ Username and password needs to be base64 encoded and send through the
99
+ ``Authorization`` HTTP header in the following format:
100
+
101
+ .. code-block:: text
102
+
103
+ Authorization: Basic Base64(username:password)
104
+
105
+ Here is a sample curl command you can use to validate the setup:
106
+
107
+ .. code-block:: bash
108
+
109
+ ENDPOINT_URL="http://localhost:8080/"
110
+ curl -X GET \
111
+ --user "username:password" \
112
+ "${ENDPOINT_URL}/api/v1/pools"
113
+
114
+ Note, you can still enable this setting to allow API access through username
115
+ password credential even though Airflow webserver might be using another
116
+ authentication method. Under this setup, only users created through LDAP or
117
+ ``airflow users create`` command will be able to pass the API authentication.
118
+
119
+ Roll your own API authentication
120
+ ''''''''''''''''''''''''''''''''
121
+
122
+ Each auth backend is defined as a new Python module. It must have 2 defined methods:
123
+
124
+ * ``init_app(app: Flask)`` - function invoked when creating a flask application, which allows you to add a new view.
125
+ * ``requires_authentication(fn: Callable)`` - a decorator that allows arbitrary code execution before and after or instead of a view function.
126
+
127
+ and may have one of the following to support API client authorizations used by :ref:`remote mode for CLI <cli-remote>`:
128
+
129
+ * function ``create_client_session() -> requests.Session``
130
+ * attribute ``CLIENT_AUTH: tuple[str, str] | requests.auth.AuthBase | None``
131
+
132
+ After writing your backend module, provide the fully qualified module name in the ``auth_backends`` key in the ``[fab]``
133
+ section of ``airflow.cfg``.
134
+
135
+ Additional options to your auth backend can be configured in ``airflow.cfg``, as a new option.
136
+
137
+ Example using Keycloak authentication
138
+ '''''''''''''''''''''''''''''''''''''
139
+
140
+ The following example add also ``PKCE`` authentication flow.
141
+
142
+ You must configure Keycloak accordingly, create ``clientID`` in Keycloak:
143
+
144
+ .. code-block:: text
145
+
146
+ Client ID: <airflow-client-id> # Your choice
147
+ Root URL: https://<your-airflow-url.fr>
148
+ Home URL:
149
+ Valid redirect URIs: https://<your-airflow-url.fr>/auth/oauth-authorized/keycloak # with webserver (airflow <3.0) it was https://<your-airflow-url.fr>/oauth-authorized/keycloak
150
+
151
+ Valid post logout redirect URIs: https://<your-airflow-url.fr>
152
+
153
+ Web origins: +
154
+ Admin URL: https://<your-airflow-url.fr>
155
+
156
+ In Capability config, you must select:
157
+
158
+ .. code-block:: text
159
+
160
+ Client authentication On
161
+ Authorization Off
162
+ Authentication flow [x] Standard flow [x] Direct access grants
163
+ [ ] Implicit flow [ ] Service accounts roles
164
+ [ ] OAuth 2.0 Device Authorization Grant
165
+ [ ] OIDC CIBA Grant
166
+
167
+ In Roles tab, you must create the following roles:
168
+
169
+ .. code-block:: text
170
+
171
+ airflow_admin
172
+ airflow_op
173
+ airflow_public
174
+ airflow_user
175
+ airflow_viewer
176
+
177
+ In Advanced tab, section Advanced settings (needed for PKCE flow):
178
+
179
+ .. code-block:: text
180
+
181
+ Proof Key for Code Exchange Code Challenge Method: S256
182
+
183
+ You must create the following environment variables in your Airflow deployment:
184
+
185
+ .. code-block:: bash
186
+
187
+ export CLIENT_ID=<airflow-client-id>
188
+ export CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
189
+ export OIDC_ISSUER=https://<your-keycloak-url.fr>/auth/realms/<REALM>
190
+ export AIRFLOW__API__BASE_URL=https://<your-airflow-url.fr>
191
+
192
+ or create a Secret with these values for your Helm chart:
193
+
194
+ .. code-block:: bash
195
+
196
+ kubectl -n airflow create secret generic airflow-api-keycloak \
197
+ --from-literal=CLIENT_ID=<airflow-client-id> \
198
+ --from-literal=CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
199
+ --from-literal=OIDC_ISSUER=https://<your-keycloak-url.fr>/auth/realms/<REALM> \
200
+ --from-literal=AIRFLOW__API__BASE_URL=https://<your-airflow-url.fr>
201
+
202
+ and configure your Helm chart to use this Secret:
203
+
204
+ .. code-block:: yaml
205
+
206
+ apiServer:
207
+ env:
208
+ - name: CLIENT_ID
209
+ valueFrom:
210
+ secretKeyRef:
211
+ name: airflow-api-keycloak
212
+ key: CLIENT_ID
213
+ - name: CLIENT_SECRET
214
+ valueFrom:
215
+ secretKeyRef:
216
+ name: airflow-api-keycloak
217
+ key: CLIENT_SECRET
218
+ - name: OIDC_ISSUER
219
+ valueFrom:
220
+ secretKeyRef:
221
+ name: airflow-api-keycloak
222
+ key: OIDC_ISSUER
223
+ - name: AIRFLOW__API__BASE_URL
224
+ valueFrom:
225
+ secretKeyRef:
226
+ name: airflow-api-keycloak
227
+ key: AIRFLOW__API__BASE_URL
228
+
229
+ Here is an example of what you might have in your ``webserver_config.py`` or ``apiServerConfig`` value in Helm chart:
230
+
231
+ .. code-block:: python
232
+
233
+ from airflow.providers.fab.auth_manager.security_manager.override import FabAirflowSecurityManagerOverride
234
+ from base64 import b64decode
235
+ from cryptography.hazmat.primitives import serialization
236
+ from flask import redirect, session
237
+ from flask_appbuilder import expose
238
+ from flask_appbuilder.security.manager import AUTH_OAUTH
239
+ from flask_appbuilder.security.views import AuthOAuthView
240
+ import jwt
241
+ import logging
242
+ import os
243
+ import requests
244
+
245
+ log = logging.getLogger(__name__)
246
+ CSRF_ENABLED = True
247
+ AUTH_TYPE = AUTH_OAUTH
248
+ AUTH_USER_REGISTRATION = True
249
+ AUTH_ROLES_SYNC_AT_LOGIN = True
250
+ AUTH_USER_REGISTRATION_ROLE = "Public"
251
+ PERMANENT_SESSION_LIFETIME = 43200
252
+
253
+ # Make sure you create these roles on Keycloak
254
+ AUTH_ROLES_MAPPING = {
255
+ "airflow_admin": ["Admin"],
256
+ "airflow_op": ["Op"],
257
+ "airflow_public": ["Public"],
258
+ "airflow_user": ["User"],
259
+ "airflow_viewer": ["Viewer"],
260
+ }
261
+ PROVIDER_NAME = "keycloak"
262
+ CLIENT_ID = os.getenv("CLIENT_ID")
263
+ CLIENT_SECRET = os.getenv("CLIENT_SECRET")
264
+ AIRFLOW__API__BASE_URL = os.getenv("AIRFLOW__API__BASE_URL")
265
+ OIDC_ISSUER = os.getenv("OIDC_ISSUER")
266
+ OIDC_BASE_URL = f"{OIDC_ISSUER}/protocol/openid-connect"
267
+ OIDC_TOKEN_URL = f"{OIDC_BASE_URL}/token"
268
+ OIDC_AUTH_URL = f"{OIDC_BASE_URL}/auth"
269
+ OIDC_METADATA_URL = f"{OIDC_ISSUER}/.well-known/openid-configuration"
270
+ OAUTH_PROVIDERS = [
271
+ {
272
+ "name": PROVIDER_NAME,
273
+ "token_key": "access_token",
274
+ "icon": "fa-key",
275
+ "remote_app": {
276
+ "api_base_url": OIDC_BASE_URL,
277
+ "access_token_url": OIDC_TOKEN_URL,
278
+ "authorize_url": OIDC_AUTH_URL,
279
+ "server_metadata_url": OIDC_METADATA_URL,
280
+ "request_token_url": None,
281
+ "client_id": CLIENT_ID,
282
+ "client_secret": CLIENT_SECRET,
283
+ "client_kwargs": {
284
+ "scope": "email profile",
285
+ "code_challenge_method": "S256", # Needed for PKCE flow
286
+ "response_type": "code", # Needed for PKCE flow
287
+ },
288
+ },
289
+ }
290
+ ]
291
+
292
+ # Fetch public key
293
+ req = requests.get(OIDC_ISSUER)
294
+ key_der_base64 = req.json()["public_key"]
295
+ key_der = b64decode(key_der_base64.encode())
296
+ public_key = serialization.load_der_public_key(key_der)
297
+
298
+
299
+ class CustomOAuthView(AuthOAuthView):
300
+ @expose("/logout/", methods=["GET", "POST"])
301
+ def logout(self):
302
+ session.clear()
303
+ return redirect(
304
+ f"{OIDC_ISSUER}/protocol/openid-connect/logout?post_logout_redirect_uri={AIRFLOW__API__BASE_URL}&client_id={CLIENT_ID}"
305
+ )
306
+
307
+
308
+ class CustomSecurityManager(FabAirflowSecurityManagerOverride):
309
+ authoauthview = CustomOAuthView
310
+
311
+ def get_oauth_user_info(self, provider, response):
312
+ if provider == "keycloak":
313
+ token = response["access_token"]
314
+ me = jwt.decode(token, public_key, algorithms=["HS256", "RS256"], audience=CLIENT_ID)
315
+
316
+ # Extract roles from resource access
317
+ groups = me.get("resource_access", {}).get(CLIENT_ID, {}).get("roles", [])
318
+
319
+ log.info(f"groups: {groups}")
320
+
321
+ if not groups:
322
+ groups = ["Viewer"]
323
+
324
+ userinfo = {
325
+ "username": me.get("preferred_username"),
326
+ "email": me.get("email"),
327
+ "first_name": me.get("given_name"),
328
+ "last_name": me.get("family_name"),
329
+ "role_keys": groups,
330
+ }
331
+
332
+ log.info(f"user info: {userinfo}")
333
+
334
+ return userinfo
335
+ else:
336
+ return {}
337
+
338
+
339
+ # Make sure to replace this with your own implementation of AirflowSecurityManager class
340
+ SECURITY_MANAGER_CLASS = CustomSecurityManager
@@ -40,3 +40,6 @@ Example
40
40
  }'
41
41
 
42
42
  This process will return a token that you can use in the Airflow public API requests.
43
+
44
+ Only users from database (`AUTH_TYPE = AUTH_DB`) or from LDAP (`AUTH_TYPE = AUTH_LDAP`) can be used to generate a token.
45
+ See :doc:`Airflow public API <webserver-authentication>` for more details.
@@ -20,6 +20,36 @@
20
20
  Changelog
21
21
  ---------
22
22
 
23
+ 2.3.0
24
+ .....
25
+
26
+ Features
27
+ ~~~~~~~~
28
+
29
+ * ``[AIP-68] Support pluginv2 views (#52582)``
30
+
31
+ Bug Fixes
32
+ ~~~~~~~~~
33
+
34
+ * ``Set prefix to generate correctly the FAB Auth Manager API ref (#52329)``
35
+ * ``Fix airflow pin for fab provider (#52351)``
36
+ * ``Sanitize Username (#52419)``
37
+
38
+ Misc
39
+ ~~~~
40
+
41
+ * ``Drop support for Python 3.9 (#52072)``
42
+ * ``Bump the fab-ui-package-updates group across 1 directory with 4 updates (#52108)``
43
+
44
+ Doc-only
45
+ ~~~~~~~~
46
+
47
+ * ``Enable LDAP users to generate an Airflow token with 'FabAuthManager' (#52295)``
48
+
49
+ .. Below changes are excluded from the changelog. Move them to
50
+ appropriate section above if needed. Do not delete the lines(!):
51
+ * ``remove pytest db_test marker where unnecessary (#52171)``
52
+
23
53
  2.2.1
24
54
  .....
25
55
 
@@ -84,7 +84,7 @@ apache-airflow-providers-fab package
84
84
  `Flask App Builder <https://flask-appbuilder.readthedocs.io/>`__
85
85
 
86
86
 
87
- Release: 2.2.1
87
+ Release: 2.3.0
88
88
 
89
89
  Provider package
90
90
  ----------------
@@ -146,5 +146,5 @@ Downloading official packages
146
146
  You can download officially released packages and verify their checksums and signatures from the
147
147
  `Official Apache Download site <https://downloads.apache.org/airflow/providers/>`_
148
148
 
149
- * `The apache-airflow-providers-fab 2.2.1 sdist package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-2.2.1.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-2.2.1.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-2.2.1.tar.gz.sha512>`__)
150
- * `The apache-airflow-providers-fab 2.2.1 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-2.2.1-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-2.2.1-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-2.2.1-py3-none-any.whl.sha512>`__)
149
+ * `The apache-airflow-providers-fab 2.3.0 sdist package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-2.3.0.tar.gz>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-2.3.0.tar.gz.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-2.3.0.tar.gz.sha512>`__)
150
+ * `The apache-airflow-providers-fab 2.3.0 wheel package <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-2.3.0-py3-none-any.whl>`_ (`asc <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-2.3.0-py3-none-any.whl.asc>`__, `sha512 <https://downloads.apache.org/airflow/providers/apache_airflow_providers_fab-2.3.0-py3-none-any.whl.sha512>`__)
@@ -28,13 +28,14 @@ description: |
28
28
  # For providers until we think it should be released.
29
29
  state: ready
30
30
 
31
- source-date-epoch: 1749896451
31
+ source-date-epoch: 1751473430
32
32
 
33
33
  # Note that those versions are maintained by release manager - do not update them manually
34
34
  # with the exception of case where other provider in sources has >= new provider version.
35
35
  # In such case adding >= NEW_VERSION and bumping to NEW_VERSION in a provider have
36
36
  # to be done in the same PR
37
37
  versions:
38
+ - 2.3.0
38
39
  - 2.2.1
39
40
  - 2.2.0
40
41
  - 2.1.0
@@ -25,7 +25,7 @@ build-backend = "flit_core.buildapi"
25
25
 
26
26
  [project]
27
27
  name = "apache-airflow-providers-fab"
28
- version = "2.2.1rc2"
28
+ version = "2.3.0"
29
29
  description = "Provider package apache-airflow-providers-fab for Apache Airflow"
30
30
  readme = "README.rst"
31
31
  authors = [
@@ -44,21 +44,20 @@ classifiers = [
44
44
  "Framework :: Apache Airflow",
45
45
  "Framework :: Apache Airflow :: Provider",
46
46
  "License :: OSI Approved :: Apache Software License",
47
- "Programming Language :: Python :: 3.9",
48
47
  "Programming Language :: Python :: 3.10",
49
48
  "Programming Language :: Python :: 3.11",
50
49
  "Programming Language :: Python :: 3.12",
51
50
  "Topic :: System :: Monitoring",
52
51
  ]
53
- requires-python = "~=3.9"
52
+ requires-python = "~=3.10"
54
53
  license-files = ["NOTICE", "*/LICENSE*"]
55
54
  # The dependencies should be modified in place in the generated file.
56
55
  # Any change in the dependencies is preserved when the file is regenerated
57
56
  # Make sure to run ``breeze static-checks --type update-providers-dependencies --all-files``
58
57
  # After you modify the dependencies, and rebuild your Breeze CI image with ``breeze ci-image build``
59
58
  dependencies = [
60
- "apache-airflow>=3.0.2rc1",
61
- "apache-airflow-providers-common-compat>=1.2.1rc1",
59
+ "apache-airflow>=3.0.2",
60
+ "apache-airflow-providers-common-compat>=1.2.1",
62
61
  # Blinker use for signals in Flask, this is an optional dependency in Flask 2.2 and lower.
63
62
  # In Flask 2.3 it becomes a mandatory dependency, and flask signals are always available.
64
63
  "blinker>=1.6.2",
@@ -127,8 +126,8 @@ apache-airflow-providers-common-sql = {workspace = true}
127
126
  apache-airflow-providers-standard = {workspace = true}
128
127
 
129
128
  [project.urls]
130
- "Documentation" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-fab/2.2.1"
131
- "Changelog" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-fab/2.2.1/changelog.html"
129
+ "Documentation" = "https://airflow.apache.org/docs/apache-airflow-providers-fab/2.3.0"
130
+ "Changelog" = "https://airflow.apache.org/docs/apache-airflow-providers-fab/2.3.0/changelog.html"
132
131
  "Bug Tracker" = "https://github.com/apache/airflow/issues"
133
132
  "Source Code" = "https://github.com/apache/airflow"
134
133
  "Slack Chat" = "https://s.apache.org/airflow-slack"
@@ -29,7 +29,7 @@ from airflow import __version__ as airflow_version
29
29
 
30
30
  __all__ = ["__version__"]
31
31
 
32
- __version__ = "2.2.1"
32
+ __version__ = "2.3.0"
33
33
 
34
34
  if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
35
35
  "3.0.2"
@@ -18,8 +18,9 @@
18
18
 
19
19
  from __future__ import annotations
20
20
 
21
+ from collections.abc import Callable
21
22
  from functools import wraps
22
- from typing import TYPE_CHECKING, Any, Callable, TypeVar, cast
23
+ from typing import TYPE_CHECKING, Any, TypeVar, cast
23
24
 
24
25
  from flask import Response, current_app, request
25
26
  from flask_appbuilder.const import AUTH_LDAP
@@ -19,8 +19,9 @@ from __future__ import annotations
19
19
 
20
20
  import logging
21
21
  import os
22
+ from collections.abc import Callable
22
23
  from functools import wraps
23
- from typing import TYPE_CHECKING, Any, Callable, NamedTuple, TypeVar, cast
24
+ from typing import TYPE_CHECKING, Any, NamedTuple, TypeVar, cast
24
25
 
25
26
  import kerberos
26
27
  from flask import Response, current_app, g, make_response, request
@@ -18,8 +18,9 @@
18
18
 
19
19
  from __future__ import annotations
20
20
 
21
+ from collections.abc import Callable
21
22
  from functools import wraps
22
- from typing import Any, Callable, TypeVar, cast
23
+ from typing import Any, TypeVar, cast
23
24
 
24
25
  from flask import Response
25
26
 
@@ -6,7 +6,7 @@ info:
6
6
  endpoints to manage users and permissions managed by the FAB auth manager.
7
7
  version: 0.1.0
8
8
  paths:
9
- /token:
9
+ /auth/token:
10
10
  post:
11
11
  tags:
12
12
  - FabAuthManager
@@ -44,7 +44,7 @@ paths:
44
44
  application/json:
45
45
  schema:
46
46
  $ref: '#/components/schemas/HTTPValidationError'
47
- /token/cli:
47
+ /auth/token/cli:
48
48
  post:
49
49
  tags:
50
50
  - FabAuthManager