apache-airflow-providers-fab 2.2.1rc2__tar.gz → 2.3.0rc1__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.
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/PKG-INFO +8 -9
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/README.rst +4 -4
- apache_airflow_providers_fab-2.3.0rc1/docs/auth-manager/api-authentication.rst +340 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/auth-manager/token.rst +3 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/changelog.rst +30 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/index.rst +3 -3
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/provider.yaml +2 -1
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/pyproject.toml +4 -5
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/__init__.py +1 -1
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api/auth/backend/basic_auth.py +2 -1
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py +2 -1
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api/auth/backend/session.py +2 -1
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api_fastapi/openapi/v2-fab-auth-manager-generated.yaml +2 -2
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api_fastapi/services/login.py +17 -8
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/security_manager/override.py +13 -7
- apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/version_compat.py +35 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/api_connexion/parameters.py +2 -2
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/api_connexion/security.py +2 -1
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/api_connexion/types.py +5 -7
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/auth.py +2 -2
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/extensions/init_views.py +9 -5
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/package-lock.json +174 -130
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/package.json +4 -4
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/security_manager.py +1 -1
- apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/743.b6629eaae7f541f4158f.js → apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/www/static/dist/743.27a753a06671118f1c5c.js +2 -2
- apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.5a4eda684d2f5f33fa6a.js → apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.56d4475fdae7883d3454.js +1 -1
- apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/flash.9f756672299e9e57a824.js → apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/www/static/dist/flash.0951d47c62bc8906be65.js +1 -1
- apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/www/static/dist/jquery-ui.min.js +2 -0
- apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/loadingDots.fc35e1feb443bd3a8d80.js → apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/www/static/dist/loadingDots.deaad0ce0e7691ed6251.js +1 -1
- apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/www/static/dist/main.810554d06c3e30f2484e.js +2 -0
- apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/www/static/dist/manifest.json +22 -0
- apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/www/static/dist/materialIcons.b0c6cc32cdacff89f7c2.js +1 -0
- apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/www/static/dist/moment.518a43bcfaf149ae2836.js +1 -0
- apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/www/static/dist/runtime.4a925577de9ab84d8e00.js +1 -0
- apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/www/static/pin_100.png +0 -0
- apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/www/static/pin_32.png +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/api/auth/backend/test_basic_auth.py +0 -1
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/api/auth/backend/test_session.py +0 -1
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/api_endpoints/remote_user_api_auth_backend.py +2 -1
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/api_fastapi/routes/test_login.py +0 -3
- apache_airflow_providers_fab-2.3.0rc1/tests/unit/fab/auth_manager/api_fastapi/services/test_login.py +103 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/cli_commands/test_utils.py +0 -2
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/test_fab_auth_manager.py +0 -5
- apache_airflow_providers_fab-2.3.0rc1/www-hash.txt +1 -0
- apache_airflow_providers_fab-2.2.1rc2/docs/auth-manager/api-authentication.rst +0 -135
- apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/jquery-ui.min.js +0 -2
- apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/main.26e36c3998f451900260.js +0 -2
- apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/manifest.json +0 -22
- apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/materialIcons.e84a12f5be6e8d456d02.js +0 -1
- apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/moment.9023635a87b836172067.js +0 -1
- apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/runtime.78bb8f6146c25d99b9e2.js +0 -1
- apache_airflow_providers_fab-2.2.1rc2/tests/unit/fab/auth_manager/api_fastapi/services/test_login.py +0 -105
- apache_airflow_providers_fab-2.2.1rc2/www-hash.txt +0 -1
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/3rd-party-licenses/LICENSES-ui.txt +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/NOTICE +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/api-ref/fab-public-api-ref.rst +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/api-ref/fab-token-api-ref.rst +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/auth-manager/access-control.rst +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/auth-manager/configuring-flask-app.rst +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/auth-manager/index.rst +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/auth-manager/security.rst +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/auth-manager/webserver-authentication.rst +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/cli-ref.rst +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/commits.rst +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/conf.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/configurations-ref.rst +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/img/add-role.png +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/img/diagram_fab_auth_manager_airflow_architecture.md5sum +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/img/diagram_fab_auth_manager_airflow_architecture.png +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/img/diagram_fab_auth_manager_airflow_architecture.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/img/new-role.png +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/installing-providers-from-sources.rst +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/migrations-ref.rst +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/security.rst +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/upgrading.rst +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/3rd-party-licenses/LICENSES-ui.txt +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/LICENSE +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/alembic.ini +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api/auth/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api/auth/backend/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api_endpoints/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api_endpoints/role_and_permission_endpoint.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api_endpoints/user_endpoint.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api_fastapi/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api_fastapi/datamodels/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api_fastapi/datamodels/login.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api_fastapi/openapi/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api_fastapi/routes/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api_fastapi/routes/login.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/api_fastapi/services/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/cli_commands/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/cli_commands/db_command.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/cli_commands/definition.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/cli_commands/role_command.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/cli_commands/sync_perm_command.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/cli_commands/user_command.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/cli_commands/utils.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/fab_auth_manager.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/models/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/models/anonymous_user.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/models/db.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/openapi/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/openapi/v1-flask-api.yaml +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/schemas/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/schemas/role_and_permission_schema.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/schemas/user_schema.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/security_manager/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/security_manager/constants.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/views/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/views/permissions.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/views/roles_list.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/views/user.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/views/user_edit.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/auth_manager/views/user_stats.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/get_provider_info.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/migrations/README +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/migrations/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/migrations/env.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/migrations/script.py.mako +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/migrations/versions/0001_1_4_0_placeholder_migration.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/migrations/versions/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/airflow_flask_app.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/api_connexion/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/api_connexion/exceptions.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/app.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/constants.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/extensions/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/extensions/init_appbuilder.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/extensions/init_jinja_globals.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/extensions/init_manifest_files.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/extensions/init_security.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/extensions/init_session.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/extensions/init_wsgi_middlewares.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/security/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/security/permissions.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/security_appless.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/session.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/static/css/bootstrap-theme.css +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/static/css/flash.css +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/static/css/loading-dots.css +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/static/css/main.css +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/static/css/material-icons.css +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/static/dist/48f0ea180c40270a5b05.png +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/static/dist/649c0b07771e68fafdeb.png +0 -0
- /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.0rc1/src/airflow/providers/fab/www/static/dist/743.27a753a06671118f1c5c.js.LICENSE.txt +0 -0
- /apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.5a4eda684d2f5f33fa6a.css → /apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/www/static/dist/airflowDefaultTheme.56d4475fdae7883d3454.css +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/static/dist/f7490d556a6c42e49ba4.png +0 -0
- /apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/flash.9f756672299e9e57a824.css → /apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/www/static/dist/flash.0951d47c62bc8906be65.css +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/static/dist/jquery-ui.min.css +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/static/dist/jquery-ui.min.js.LICENSE.txt +0 -0
- /apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/loadingDots.fc35e1feb443bd3a8d80.css → /apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/www/static/dist/loadingDots.deaad0ce0e7691ed6251.css +0 -0
- /apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/main.26e36c3998f451900260.css → /apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/www/static/dist/main.810554d06c3e30f2484e.css +0 -0
- /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.0rc1/src/airflow/providers/fab/www/static/dist/main.810554d06c3e30f2484e.js.LICENSE.txt +0 -0
- /apache_airflow_providers_fab-2.2.1rc2/src/airflow/providers/fab/www/static/dist/materialIcons.e84a12f5be6e8d456d02.css → /apache_airflow_providers_fab-2.3.0rc1/src/airflow/providers/fab/www/static/dist/materialIcons.b0c6cc32cdacff89f7c2.css +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/static/dist/oss-licenses.json +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/static/js/datetime_utils.js +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/static/js/main.js +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/static/sort_asc.png +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/static/sort_both.png +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/static/sort_desc.png +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/templates/airflow/_messages.html +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/templates/airflow/error.html +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/templates/airflow/main.html +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/templates/airflow/traceback.html +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/templates/appbuilder/flash.html +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/templates/appbuilder/index.html +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/templates/appbuilder/navbar.html +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/templates/appbuilder/navbar_menu.html +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/templates/appbuilder/navbar_right.html +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/utils.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/views.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/src/airflow/providers/fab/www/webpack.config.js +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/conftest.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/api/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/api/auth/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/api/auth/backend/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/api/auth/backend/test_kerberos_auth.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/api_endpoints/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/api_endpoints/api_connexion_utils.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/api_endpoints/test_auth.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/api_endpoints/test_role_and_permission_endpoint.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/api_endpoints/test_user_endpoint.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/api_fastapi/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/api_fastapi/conftest.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/api_fastapi/routes/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/api_fastapi/services/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/cli_commands/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/cli_commands/test_db_command.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/cli_commands/test_definition.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/cli_commands/test_role_command.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/cli_commands/test_sync_perm_command.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/cli_commands/test_user_command.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/conftest.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/models/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/models/test_anonymous_user.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/models/test_db.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/schemas/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/schemas/test_role_and_permission_schema.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/schemas/test_user_schema.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/security_manager/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/security_manager/test_constants.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/security_manager/test_override.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/test_models.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/test_security.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/views/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/views/test_permissions.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/views/test_roles_list.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/views/test_user.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/views/test_user_edit.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/auth_manager/views/test_user_stats.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/decorators.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/utils.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/www/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/www/test_auth.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/www/test_utils.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/www/views/__init__.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/www/views/conftest.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/tests/unit/fab/www/views/test_connection_form_fields.py +0 -0
- {apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/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.
|
3
|
+
Version: 2.3.0rc1
|
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.
|
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,7 +15,6 @@ 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
|
@@ -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.
|
40
|
-
Project-URL: Documentation, https://airflow.staged.apache.org/docs/apache-airflow-providers-fab/2.
|
38
|
+
Project-URL: Changelog, https://airflow.staged.apache.org/docs/apache-airflow-providers-fab/2.3.0/changelog.html
|
39
|
+
Project-URL: Documentation, https://airflow.staged.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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
{apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/changelog.rst
RENAMED
@@ -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
|
|
{apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/docs/index.rst
RENAMED
@@ -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.
|
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.
|
150
|
-
* `The apache-airflow-providers-fab 2.
|
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>`__)
|
{apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/provider.yaml
RENAMED
@@ -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:
|
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
|
{apache_airflow_providers_fab-2.2.1rc2 → apache_airflow_providers_fab-2.3.0rc1}/pyproject.toml
RENAMED
@@ -25,7 +25,7 @@ build-backend = "flit_core.buildapi"
|
|
25
25
|
|
26
26
|
[project]
|
27
27
|
name = "apache-airflow-providers-fab"
|
28
|
-
version = "2.
|
28
|
+
version = "2.3.0rc1"
|
29
29
|
description = "Provider package apache-airflow-providers-fab for Apache Airflow"
|
30
30
|
readme = "README.rst"
|
31
31
|
authors = [
|
@@ -44,13 +44,12 @@ 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.
|
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
|
@@ -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.
|
131
|
-
"Changelog" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-fab/2.
|
129
|
+
"Documentation" = "https://airflow.staged.apache.org/docs/apache-airflow-providers-fab/2.3.0"
|
130
|
+
"Changelog" = "https://airflow.staged.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.
|
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,
|
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,
|
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
|
@@ -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
|
@@ -18,6 +18,7 @@ from __future__ import annotations
|
|
18
18
|
|
19
19
|
from typing import TYPE_CHECKING, cast
|
20
20
|
|
21
|
+
from flask_appbuilder.const import AUTH_LDAP
|
21
22
|
from starlette import status
|
22
23
|
from starlette.exceptions import HTTPException
|
23
24
|
|
@@ -44,14 +45,22 @@ class FABAuthManagerLogin:
|
|
44
45
|
)
|
45
46
|
|
46
47
|
auth_manager = cast("FabAuthManager", get_auth_manager())
|
47
|
-
user: User =
|
48
|
+
user: User | None = None
|
49
|
+
|
50
|
+
if auth_manager.security_manager.auth_type == AUTH_LDAP:
|
51
|
+
user = auth_manager.security_manager.auth_user_ldap(
|
52
|
+
body.username, body.password, rotate_session_id=False
|
53
|
+
)
|
54
|
+
if user is None:
|
55
|
+
user = auth_manager.security_manager.auth_user_db(
|
56
|
+
body.username, body.password, rotate_session_id=False
|
57
|
+
)
|
58
|
+
|
48
59
|
if not user:
|
49
|
-
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid
|
60
|
+
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid credentials")
|
50
61
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
user=user, expiration_time_in_seconds=expiration_time_in_seconds
|
55
|
-
)
|
62
|
+
return LoginResponse(
|
63
|
+
access_token=auth_manager.generate_jwt(
|
64
|
+
user=user, expiration_time_in_seconds=expiration_time_in_seconds
|
56
65
|
)
|
57
|
-
|
66
|
+
)
|