auth-middleware 0.4.2__tar.gz → 0.4.4__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 (383) hide show
  1. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/.github/workflows/release.yml +27 -26
  2. auth_middleware-0.4.4/PKG-INFO +397 -0
  3. auth_middleware-0.4.4/README.md +362 -0
  4. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.buildinfo +1 -1
  5. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/environment.pickle +0 -0
  6. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/contracts/groups_provider.html +2 -2
  7. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/contracts/jwt_provider.html +2 -2
  8. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/contracts/permissions_provider.html +2 -2
  9. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/exceptions/authentication_error.html +2 -2
  10. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/exceptions/invalid_authorization_exception.html +2 -2
  11. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/exceptions/invalid_credentials_exception.html +2 -2
  12. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/exceptions/invalid_token_exception.html +2 -2
  13. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/exceptions/password_policy_error.html +2 -2
  14. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/exceptions/user_not_found_error.html +2 -2
  15. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/guards/functions.html +2 -2
  16. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/guards/group_checker.html +2 -2
  17. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/guards/permissions_checker.html +2 -2
  18. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/guards/role_checker.html +2 -2
  19. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/jwt_auth_middleware.html +2 -2
  20. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/jwt_bearer_manager.html +2 -2
  21. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/aws/cognito_authz_provider_settings.html +2 -2
  22. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/aws/cognito_exceptions.html +2 -2
  23. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/aws/cognito_groups_provider.html +2 -2
  24. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/aws/cognito_provider.html +2 -2
  25. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/aws/jwt_provider_settings.html +2 -2
  26. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/azure/entra_id_provider.html +2 -2
  27. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/azure/settings.html +2 -2
  28. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/sqlalchemy/sql_groups_provider.html +2 -2
  29. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/sqlalchemy/sql_permissions_provider.html +2 -2
  30. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/index.html +2 -2
  31. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/documentation_options.js +1 -1
  32. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/api.html +2 -2
  33. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/auth-authn.html +2 -2
  34. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/cognito_provider.html +2 -2
  35. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/entra_id_provider.html +2 -2
  36. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/exceptions.html +2 -2
  37. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/extending-authz-providers.html +2 -2
  38. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/functions.html +2 -2
  39. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/genindex.html +2 -2
  40. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/groups-provider.html +2 -2
  41. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/index.html +2 -2
  42. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/infrastructure/cognito-setup.html +2 -2
  43. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/infrastructure/entra-id-setup.html +2 -2
  44. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/infrastructure/google-setup.html +2 -2
  45. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/infrastructure.html +2 -2
  46. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/installation.html +2 -2
  47. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/jwks-cache.html +2 -2
  48. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/jwt_auth_middleware.html +2 -2
  49. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/jwt_auth_provider.html +2 -2
  50. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/jwt_bearer_manager.html +2 -2
  51. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/middleware-configuration.html +2 -2
  52. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/objects.inv +0 -0
  53. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/permissions-provider.html +2 -2
  54. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/py-modindex.html +2 -2
  55. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/search.html +2 -2
  56. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/services.html +2 -2
  57. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/types.html +2 -2
  58. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/user-guide.html +2 -2
  59. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/user-property.html +2 -2
  60. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/conf.py +1 -1
  61. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/makefile +11 -5
  62. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/pyproject.toml +8 -5
  63. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/__init__.py +1 -1
  64. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/uv.lock +12 -7
  65. auth_middleware-0.4.2/PKG-INFO +0 -396
  66. auth_middleware-0.4.2/README.md +0 -362
  67. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/.coveragerc +0 -0
  68. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/.devcontainer/.bashrc +0 -0
  69. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/.devcontainer/Dockerfile +0 -0
  70. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/.devcontainer/QUICKSTART.md +0 -0
  71. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/.devcontainer/README.md +0 -0
  72. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/.devcontainer/devcontainer.json +0 -0
  73. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/.devcontainer/start.sh +0 -0
  74. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/.devcontainer/uv.toml +0 -0
  75. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/.devcontainer/verify-setup.sh +0 -0
  76. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/.flake8 +0 -0
  77. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/.gitignore +0 -0
  78. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/.python-version +0 -0
  79. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/.sonarlint/connectedMode.json +0 -0
  80. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/.vscode/extensions.json +0 -0
  81. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/.vscode/launch.json +0 -0
  82. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/.vscode/settings.json +0 -0
  83. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/CHANGELOG.txt +0 -0
  84. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/LICENSE +0 -0
  85. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/alembic/README +0 -0
  86. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/alembic/env.py +0 -0
  87. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/alembic/script.py.mako +0 -0
  88. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/alembic/versions/de961fac6f27_initial_migration.py +0 -0
  89. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/alembic.ini +0 -0
  90. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.buildinfo.bak +0 -0
  91. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/__intersphinx_cache__/fastapi_objects.inv +0 -0
  92. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/__intersphinx_cache__/python_objects.inv +0 -0
  93. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/api.doctree +0 -0
  94. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/auth-authn.doctree +0 -0
  95. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/cognito_provider.doctree +0 -0
  96. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/entra_id_provider.doctree +0 -0
  97. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/exceptions.doctree +0 -0
  98. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/extending-authz-providers.doctree +0 -0
  99. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/functions.doctree +0 -0
  100. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/groups-provider.doctree +0 -0
  101. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/index.doctree +0 -0
  102. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/infrastructure/cognito-setup.doctree +0 -0
  103. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/infrastructure/entra-id-setup.doctree +0 -0
  104. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/infrastructure/google-setup.doctree +0 -0
  105. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/infrastructure.doctree +0 -0
  106. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/installation.doctree +0 -0
  107. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/jwks-cache.doctree +0 -0
  108. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/jwt_auth_middleware.doctree +0 -0
  109. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/jwt_auth_provider.doctree +0 -0
  110. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/jwt_bearer_manager.doctree +0 -0
  111. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/middleware-configuration.doctree +0 -0
  112. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/permissions-provider.doctree +0 -0
  113. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/services.doctree +0 -0
  114. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/types.doctree +0 -0
  115. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/user-guide.doctree +0 -0
  116. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.doctrees/user-property.doctree +0 -0
  117. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.keep +0 -0
  118. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/.nojekyll +0 -0
  119. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/exceptions/cognito_exceptions.html +0 -0
  120. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/functions.html +0 -0
  121. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/authn/cognito_authz_provider_settings.html +0 -0
  122. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/authn/cognito_provider.html +0 -0
  123. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/authn/jwt_provider.html +0 -0
  124. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/authn/jwt_provider_settings.html +0 -0
  125. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/authz/cognito_groups_provider.html +0 -0
  126. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/authz/groups_provider.html +0 -0
  127. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/authz/permissions_provider.html +0 -0
  128. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/authz/sql_groups_provider.html +0 -0
  129. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_modules/auth_middleware/providers/authz/sql_permissions_provider.html +0 -0
  130. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/api.rst.txt +0 -0
  131. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/auth-authn.rst.txt +0 -0
  132. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/cognito_provider.rst.txt +0 -0
  133. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/entra_id_provider.rst.txt +0 -0
  134. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/exceptions.rst.txt +0 -0
  135. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/extending-authz-providers.rst.txt +0 -0
  136. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/functions.rst.txt +0 -0
  137. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/groups-provider.rst.txt +0 -0
  138. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/index.rst.txt +0 -0
  139. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/infrastructure/cognito-setup.rst.txt +0 -0
  140. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/infrastructure/entra-id-setup.rst.txt +0 -0
  141. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/infrastructure/google-setup.rst.txt +0 -0
  142. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/infrastructure.rst.txt +0 -0
  143. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/installation.rst.txt +0 -0
  144. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/jwks-cache.rst.txt +0 -0
  145. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/jwt_auth_middleware.rst.txt +0 -0
  146. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/jwt_auth_provider.rst.txt +0 -0
  147. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/jwt_bearer_manager.rst.txt +0 -0
  148. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/middleware-configuration.rst.txt +0 -0
  149. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/permissions-provider.rst.txt +0 -0
  150. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/services.rst.txt +0 -0
  151. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/types.rst.txt +0 -0
  152. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/user-guide.rst.txt +0 -0
  153. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_sources/user-property.rst.txt +0 -0
  154. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  155. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/base-stemmer.js +0 -0
  156. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/basic.css +0 -0
  157. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/badge_only.css +0 -0
  158. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  159. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  160. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  161. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  162. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/fonts/fontawesome-webfont.eot +0 -0
  163. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/fonts/fontawesome-webfont.svg +0 -0
  164. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  165. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/fonts/fontawesome-webfont.woff +0 -0
  166. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  167. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/fonts/lato-bold-italic.woff +0 -0
  168. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  169. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/fonts/lato-bold.woff +0 -0
  170. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/fonts/lato-bold.woff2 +0 -0
  171. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/fonts/lato-normal-italic.woff +0 -0
  172. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  173. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/fonts/lato-normal.woff +0 -0
  174. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/fonts/lato-normal.woff2 +0 -0
  175. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/css/theme.css +0 -0
  176. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/doctools.js +0 -0
  177. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/english-stemmer.js +0 -0
  178. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/file.png +0 -0
  179. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/Lato/lato-bold.eot +0 -0
  180. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/Lato/lato-bold.ttf +0 -0
  181. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/Lato/lato-bold.woff +0 -0
  182. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/Lato/lato-bold.woff2 +0 -0
  183. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/Lato/lato-bolditalic.eot +0 -0
  184. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
  185. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/Lato/lato-bolditalic.woff +0 -0
  186. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
  187. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/Lato/lato-italic.eot +0 -0
  188. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/Lato/lato-italic.ttf +0 -0
  189. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/Lato/lato-italic.woff +0 -0
  190. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/Lato/lato-italic.woff2 +0 -0
  191. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/Lato/lato-regular.eot +0 -0
  192. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/Lato/lato-regular.ttf +0 -0
  193. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/Lato/lato-regular.woff +0 -0
  194. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/Lato/lato-regular.woff2 +0 -0
  195. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
  196. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
  197. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
  198. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
  199. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
  200. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
  201. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
  202. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
  203. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/jquery.js +0 -0
  204. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/js/badge_only.js +0 -0
  205. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/js/html5shiv-printshiv.min.js +0 -0
  206. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/js/html5shiv.min.js +0 -0
  207. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/js/theme.js +0 -0
  208. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/js/versions.js +0 -0
  209. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/language_data.js +0 -0
  210. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/minus.png +0 -0
  211. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/plus.png +0 -0
  212. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/pygments.css +0 -0
  213. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/searchtools.js +0 -0
  214. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/_static/sphinx_highlight.js +0 -0
  215. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs/searchindex.js +0 -0
  216. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/Makefile +0 -0
  217. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/api.rst +0 -0
  218. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/auth-authn.rst +0 -0
  219. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/cognito_provider.rst +0 -0
  220. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/entra_id_provider.rst +0 -0
  221. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/exceptions.rst +0 -0
  222. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/extending-authz-providers.rst +0 -0
  223. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/functions.rst +0 -0
  224. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/groups-provider.rst +0 -0
  225. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/index.rst +0 -0
  226. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/infrastructure/cognito-setup.rst +0 -0
  227. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/infrastructure/entra-id-setup.rst +0 -0
  228. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/infrastructure/google-setup.rst +0 -0
  229. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/infrastructure.rst +0 -0
  230. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/installation.rst +0 -0
  231. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/jwks-cache.rst +0 -0
  232. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/jwt_auth_middleware.rst +0 -0
  233. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/jwt_auth_provider.rst +0 -0
  234. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/jwt_bearer_manager.rst +0 -0
  235. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/make.bat +0 -0
  236. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/middleware-configuration.rst +0 -0
  237. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/permissions-provider.rst +0 -0
  238. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/services.rst +0 -0
  239. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/types.rst +0 -0
  240. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/user-guide.rst +0 -0
  241. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/docs_source/user-property.rst +0 -0
  242. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/examples/__init__.py +0 -0
  243. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/examples/audit_example.py +0 -0
  244. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/examples/auth_examples.py +0 -0
  245. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/examples/jwks_cache_example.py +0 -0
  246. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/examples/m2m_detection_example.py +0 -0
  247. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/examples/metrics_example.py +0 -0
  248. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/examples/rate_limiting_example.py +0 -0
  249. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/scripts/README.md +0 -0
  250. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/scripts/update_version.py +0 -0
  251. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/sonar-project.properties +0 -0
  252. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/auth_provider.py +0 -0
  253. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/basic_auth_middleware.py +0 -0
  254. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/cli.py +0 -0
  255. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/commands/__init__.py +0 -0
  256. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/constants.py +0 -0
  257. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/contracts/__init__.py +0 -0
  258. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/contracts/credentials_repository.py +0 -0
  259. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/contracts/groups_provider.py +0 -0
  260. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/contracts/jwt_provider.py +0 -0
  261. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/contracts/permissions_provider.py +0 -0
  262. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/contracts/profile_provider.py +0 -0
  263. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/contracts/roles_provider.py +0 -0
  264. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/exceptions/__init__.py +0 -0
  265. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/exceptions/authentication_error.py +0 -0
  266. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/exceptions/invalid_authorization_exception.py +0 -0
  267. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/exceptions/invalid_credentials_exception.py +0 -0
  268. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/exceptions/invalid_token_exception.py +0 -0
  269. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/exceptions/password_policy_error.py +0 -0
  270. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/exceptions/user_not_found_error.py +0 -0
  271. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/guards/__init__.py +0 -0
  272. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/guards/functions.py +0 -0
  273. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/guards/group_checker.py +0 -0
  274. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/guards/permissions_checker.py +0 -0
  275. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/guards/role_checker.py +0 -0
  276. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/jwt_auth_middleware.py +0 -0
  277. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/jwt_bearer_manager.py +0 -0
  278. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/logging.py +0 -0
  279. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/__init__.py +0 -0
  280. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/__init__.py +0 -0
  281. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/aws_credentials.py +0 -0
  282. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/aws_exception.py +0 -0
  283. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/cognito_authz_provider_settings.py +0 -0
  284. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/cognito_exceptions.py +0 -0
  285. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/cognito_groups_as_roles_provider.py +0 -0
  286. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/cognito_groups_provider.py +0 -0
  287. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/cognito_profile_provider.py +0 -0
  288. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/cognito_provider.py +0 -0
  289. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/identity_pool_client.py +0 -0
  290. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/identity_pool_provider.py +0 -0
  291. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/identity_pool_settings.py +0 -0
  292. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/jwt_provider_settings.py +0 -0
  293. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/services/__init__.py +0 -0
  294. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/services/cognito_auth_models.py +0 -0
  295. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/services/cognito_auth_service.py +0 -0
  296. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/services/m2m_detector.py +0 -0
  297. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/aws/utils.py +0 -0
  298. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/azure/__init__.py +0 -0
  299. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/azure/azure_exception.py +0 -0
  300. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/azure/entra_id_provider.py +0 -0
  301. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/azure/settings.py +0 -0
  302. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/azure/utils.py +0 -0
  303. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/sqlalchemy/__init__.py +0 -0
  304. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/sqlalchemy/async_database.py +0 -0
  305. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/sqlalchemy/async_database_settings.py +0 -0
  306. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/sqlalchemy/sql_base_model.py +0 -0
  307. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/sqlalchemy/sql_groups_provider.py +0 -0
  308. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/providers/sqlalchemy/sql_permissions_provider.py +0 -0
  309. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/repository/__init__.py +0 -0
  310. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/repository/json_credentials_repository.py +0 -0
  311. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/repository/settings.py +0 -0
  312. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/services/__init__.py +0 -0
  313. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/services/audit.py +0 -0
  314. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/services/metrics.py +0 -0
  315. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/services/rate_limiter.py +0 -0
  316. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/settings.py +0 -0
  317. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/types/__init__.py +0 -0
  318. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/types/jwt.py +0 -0
  319. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/types/user.py +0 -0
  320. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/src/auth_middleware/types/user_credentials.py +0 -0
  321. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/0.APITesting/_Auth/(No) Get Id Token.bru +0 -0
  322. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/0.APITesting/_Auth/Get Token (client credentials).bru +0 -0
  323. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/0.APITesting/_Auth/Login.bru +0 -0
  324. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/0.APITesting/bruno.json +0 -0
  325. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/0.APITesting/environments/Development.bru +0 -0
  326. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/__init__.py +0 -0
  327. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/commands/__init__.py +0 -0
  328. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/commands/test_cli.py +0 -0
  329. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/conftest.py +0 -0
  330. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/contracts/__init__.py +0 -0
  331. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/contracts/test_abstract_stubs.py +0 -0
  332. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/contracts/test_auth_provider.py +0 -0
  333. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/contracts/test_groups_provider.py +0 -0
  334. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/contracts/test_jwt_provider.py +0 -0
  335. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/contracts/test_jwt_provider_settings.py +0 -0
  336. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/contracts/test_permissions_provider.py +0 -0
  337. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/exceptions/__init__.py +0 -0
  338. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/exceptions/test_exceptions.py +0 -0
  339. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/guards/__init__.py +0 -0
  340. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/guards/test_functions.py +0 -0
  341. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/guards/test_group_checker.py +0 -0
  342. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/guards/test_permissions_checker.py +0 -0
  343. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/guards/test_role_checker.py +0 -0
  344. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/__init__.py +0 -0
  345. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/aws/__init__.py +0 -0
  346. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/aws/test_aws_credentials.py +0 -0
  347. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/aws/test_cognito_auth_service.py +0 -0
  348. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/aws/test_cognito_groups_as_roles_provider.py +0 -0
  349. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/aws/test_cognito_profile_provider.py +0 -0
  350. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/aws/test_cognito_provider.py +0 -0
  351. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/aws/test_cognito_provider_clean.py +0 -0
  352. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/aws/test_cognito_utils.py +0 -0
  353. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/aws/test_identity_pool_client.py +0 -0
  354. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/aws/test_identity_pool_provider.py +0 -0
  355. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/aws/test_identity_pool_settings.py +0 -0
  356. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/aws/test_jwks_cache_improvements.py +0 -0
  357. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/aws/test_m2m_detector.py +0 -0
  358. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/azure/__init__.py +0 -0
  359. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/azure/test_entra_id_init.py +0 -0
  360. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/azure/test_entra_id_provider.py +0 -0
  361. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/azure/test_entra_id_settings.py +0 -0
  362. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/azure/test_entra_id_utils.py +0 -0
  363. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/sqlalchemy/__init__.py +0 -0
  364. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/sqlalchemy/test_async_database.py +0 -0
  365. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/sqlalchemy/test_sql_groups_provider.py +0 -0
  366. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/providers/sqlalchemy/test_sql_permissions_provider.py +0 -0
  367. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/repository/__init__.py +0 -0
  368. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/repository/test_json_credentials_repository.py +0 -0
  369. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/repository/test_repository_settings.py +0 -0
  370. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/services/__init__.py +0 -0
  371. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/services/test_audit.py +0 -0
  372. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/services/test_metrics.py +0 -0
  373. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/services/test_rate_limiter.py +0 -0
  374. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/test_basic_auth_middleware.py +0 -0
  375. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/test_basic_auth_middleware_clean.py +0 -0
  376. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/test_dummy.py +0 -0
  377. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/test_jwt_auth_middleware.py +0 -0
  378. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/test_jwt_bearer_manager.py +0 -0
  379. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/test_logging.py +0 -0
  380. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/types/__init__.py +0 -0
  381. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/types/test_jwt_types.py +0 -0
  382. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/types/test_types.py +0 -0
  383. {auth_middleware-0.4.2 → auth_middleware-0.4.4}/tests/types/test_user_m2m.py +0 -0
@@ -13,17 +13,19 @@ on:
13
13
  tags:
14
14
  description: "Manual launch"
15
15
 
16
+ env:
17
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
18
+
16
19
  jobs:
17
20
  TestBuildAndPublish:
18
21
  runs-on: ubuntu-latest
22
+ permissions:
23
+ contents: write
19
24
  steps:
20
25
  - name: Checkout code
21
26
  uses: actions/checkout@v4
22
-
23
- - name: Print release information
24
- run: |
25
- echo "Release tag: ${{ github.event.release.tag_name }}"
26
- echo "Release description: ${{ github.event.release.body }}"
27
+ with:
28
+ fetch-depth: 0
27
29
 
28
30
  - name: Install uv
29
31
  uses: astral-sh/setup-uv@v5
@@ -33,28 +35,12 @@ jobs:
33
35
  with:
34
36
  python-version-file: "pyproject.toml"
35
37
 
36
- - name: Update version
38
+ - name: Read version
39
+ id: version
37
40
  run: |
38
- echo "Bumping version ..."
39
- v=$(uvx --from=toml-cli toml get --toml-path=pyproject.toml project.version)
40
- echo "Current version: $v"
41
- new_v=$(python3 -c "v='$v'; p=v.split('.'); p[-1]=str(int(p[-1])+1); print('.'.join(p))")
42
- echo "New version: $new_v"
43
- sed -i "s/^version = \"$v\"/version = \"$new_v\"/" pyproject.toml
44
- echo "Bumped version to $new_v"
45
-
46
- - name: Sync version across files
47
- run: |
48
- uv run python scripts/update_version.py
49
- echo "Synchronized version across all project files"
50
-
51
- - name: Commit and push version update
52
- run: |
53
- git config --global user.name 'GitHub Action'
54
- git config --global user.email 'action@github.com'
55
- git add pyproject.toml src/auth_middleware/__init__.py docs_source/conf.py
56
- git commit -m "Update version across all files" || echo "No changes to commit"
57
- git push origin HEAD
41
+ VERSION=$(python3 -c "import tomllib; d=tomllib.load(open('pyproject.toml','rb')); print(d['project']['version'])")
42
+ echo "VERSION=$VERSION" >> $GITHUB_ENV
43
+ echo "version=$VERSION" >> $GITHUB_OUTPUT
58
44
 
59
45
  - name: Install the project
60
46
  run: uv sync --all-extras --group dev --group docs
@@ -81,3 +67,18 @@ jobs:
81
67
  - name: Publish on pypi
82
68
  run: |
83
69
  uv publish --token ${{ secrets.PYPI_TOKEN }}
70
+
71
+ - name: Create and push git tag
72
+ run: |
73
+ git config --global user.name 'GitHub Action'
74
+ git config --global user.email 'action@github.com'
75
+ git tag "v${{ steps.version.outputs.version }}" || echo "Tag already exists"
76
+ git push origin "v${{ steps.version.outputs.version }}" || echo "Tag already pushed"
77
+
78
+ - name: Create GitHub Release
79
+ uses: softprops/action-gh-release@v2
80
+ with:
81
+ tag_name: v${{ steps.version.outputs.version }}
82
+ name: v${{ steps.version.outputs.version }}
83
+ files: dist/*
84
+ generate_release_notes: true
@@ -0,0 +1,397 @@
1
+ Metadata-Version: 2.4
2
+ Name: auth-middleware
3
+ Version: 0.4.4
4
+ Summary: Async Auth Middleware for FastAPI/Starlette
5
+ Project-URL: Homepage, https://impalah.github.io/auth-middleware/
6
+ Project-URL: Documentation, https://impalah.github.io/auth-middleware/
7
+ Project-URL: Repository, https://github.com/impalah/auth-middleware
8
+ Project-URL: Source, https://github.com/impalah/auth-middleware
9
+ Author-email: impalah <impalah@gmail.com>
10
+ License: MIT
11
+ License-File: LICENSE
12
+ Keywords: auth,fastapi,middleware,starlette
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Framework :: FastAPI
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
+ Classifier: Topic :: System :: Systems Administration :: Authentication/Directory
20
+ Requires-Python: >=3.14
21
+ Requires-Dist: click>=8.3.1
22
+ Requires-Dist: fastapi>=0.128.0
23
+ Requires-Dist: httpx>=0.28.1
24
+ Requires-Dist: joserfc>=1.6.3
25
+ Requires-Dist: loguru>=0.7.3
26
+ Requires-Dist: pydantic-settings>=2.12.0
27
+ Requires-Dist: pydantic[email]>=2.12.5
28
+ Requires-Dist: python-dotenv>=1.2.1
29
+ Requires-Dist: svix-ksuid>=0.6.2
30
+ Provides-Extra: sqlalchemy
31
+ Requires-Dist: aiomysql>=0.3.2; extra == 'sqlalchemy'
32
+ Requires-Dist: asyncpg>=0.31.0; extra == 'sqlalchemy'
33
+ Requires-Dist: sqlalchemy[asyncio]>=2.0.46; extra == 'sqlalchemy'
34
+ Description-Content-Type: text/markdown
35
+
36
+ # Auth Middleware
37
+
38
+ [![PyPI version](https://badge.fury.io/py/auth-middleware.svg)](https://badge.fury.io/py/auth-middleware)
39
+ [![Python 3.14+](https://img.shields.io/badge/python-3.14+-blue.svg)](https://www.python.org/downloads/)
40
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
41
+ [![Coverage](https://img.shields.io/badge/coverage-83%25-green.svg)](https://github.com/impalah/auth-middleware)
42
+
43
+ **Async Authentication and Authorization Middleware for FastAPI/Starlette Applications**
44
+
45
+ Auth Middleware is a comprehensive, production-ready authentication and authorization solution for FastAPI and Starlette applications. It provides a pluggable architecture that supports multiple identity providers and authorization backends with async-first design principles.
46
+
47
+ ## Features
48
+
49
+ ### **Authentication Providers**
50
+
51
+ - **AWS Cognito** — Full integration with Amazon Cognito User Pools
52
+ - **AWS Cognito Identity Pool** — Exchange User Pool tokens for temporary AWS credentials
53
+ - **Azure Entra ID** — Microsoft Azure Active Directory authentication
54
+ - **Generic JWT** — Support for any JWT-based identity provider
55
+ - **Basic Auth** — Username/password authentication via `BasicAuthMiddleware`
56
+ - **Custom Providers** — Extensible architecture via the `JWTProvider` contract
57
+
58
+ ### **Authorization & Access Control**
59
+
60
+ - **Group-based Authorization** — Role-based access control with user groups
61
+ - **Role-based Authorization** — Fine-grained role system
62
+ - **Permission-based Authorization** — Fine-grained permission system
63
+ - **SQL Backend Support** — PostgreSQL and MySQL for groups/permissions storage via SQLAlchemy
64
+ - **Cognito Groups Integration** — Direct integration with AWS Cognito groups (`cognito:groups` claim)
65
+ - **Cognito Groups-as-Roles** — Map Cognito groups directly to roles
66
+ - **Custom Authorization Providers** — Build your own via the `GroupsProvider`, `RolesProvider` and `PermissionsProvider` contracts
67
+
68
+ ### **Performance & Reliability**
69
+
70
+ - **Async-First Design** — Built for high-performance async applications
71
+ - **JWKS Caching** — Intelligent caching of JSON Web Key Sets
72
+ - **Connection Pooling** — Efficient database and HTTP connections
73
+ - **Lazy Loading** — User groups and permissions loaded on-demand
74
+ - **Error Resilience** — Graceful degradation on provider failures
75
+
76
+ ### **Developer Experience**
77
+
78
+ - **Type-Safe** — Full type hints throughout, compatible with mypy strict mode
79
+ - **FastAPI Integration** — Native dependency injection support
80
+ - **Middleware Pattern** — Standard ASGI middleware implementation
81
+ - **Environment Configuration** — 12-factor app configuration support
82
+ - **Comprehensive Documentation** — Detailed guides and API reference
83
+
84
+ ## Installation
85
+
86
+ ```bash
87
+ # pip
88
+ pip install auth-middleware
89
+
90
+ # poetry
91
+ poetry add auth-middleware
92
+
93
+ # uv (recommended)
94
+ uv add auth-middleware
95
+ ```
96
+
97
+ ## Quick Start
98
+
99
+ ### JWT Authentication with AWS Cognito
100
+
101
+ ```python
102
+ from fastapi import FastAPI, Depends, Request
103
+ from auth_middleware import JwtAuthMiddleware
104
+ from auth_middleware.guards import require_user, require_groups
105
+ from auth_middleware.providers.aws.cognito_provider import CognitoProvider
106
+ from auth_middleware.providers.aws.cognito_authz_provider_settings import CognitoAuthzProviderSettings
107
+
108
+ app = FastAPI()
109
+
110
+ auth_settings = CognitoAuthzProviderSettings(
111
+ user_pool_id="us-east-1_abcdef123",
112
+ user_pool_region="us-east-1",
113
+ jwt_token_verification_disabled=False,
114
+ )
115
+
116
+ app.add_middleware(
117
+ JwtAuthMiddleware,
118
+ auth_provider=CognitoProvider(settings=auth_settings),
119
+ )
120
+
121
+ # Requires valid authentication
122
+ @app.get("/protected", dependencies=[Depends(require_user())])
123
+ async def protected_endpoint(request: Request):
124
+ user = request.state.current_user
125
+ return {"message": f"Hello {user.name}", "user_id": user.id}
126
+
127
+ # Requires group membership
128
+ @app.get("/admin", dependencies=[Depends(require_groups(["admin", "moderator"]))])
129
+ async def admin_endpoint(request: Request):
130
+ return {"message": "Admin access granted"}
131
+ ```
132
+
133
+ ### Azure Entra ID
134
+
135
+ Set the required environment variables (read at module load time):
136
+
137
+ ```bash
138
+ AUTH_PROVIDER_AZURE_ENTRA_ID_TENANT_ID=your-tenant-id
139
+ AUTH_PROVIDER_AZURE_ENTRA_ID_AUDIENCE_ID=your-app-client-id
140
+ ```
141
+
142
+ ```python
143
+ from auth_middleware import JwtAuthMiddleware
144
+ from auth_middleware.providers.azure.entra_id_provider import EntraIDProvider
145
+
146
+ app.add_middleware(
147
+ JwtAuthMiddleware,
148
+ auth_provider=EntraIDProvider(),
149
+ )
150
+ ```
151
+
152
+ ### Basic Auth
153
+
154
+ ```python
155
+ from auth_middleware import BasicAuthMiddleware
156
+ from auth_middleware.contracts import CredentialsRepository
157
+
158
+ class MyCredentialsRepository(CredentialsRepository):
159
+ async def get_credentials(self, username: str):
160
+ # Return stored credentials for the given username
161
+ ...
162
+
163
+ app.add_middleware(
164
+ BasicAuthMiddleware,
165
+ credentials_repository=MyCredentialsRepository(),
166
+ )
167
+ ```
168
+
169
+ ## Configuration
170
+
171
+ ### Environment Variables
172
+
173
+ ```bash
174
+ # Core middleware — always read from environment
175
+ AUTH_MIDDLEWARE_DISABLED=false
176
+ AUTH_MIDDLEWARE_LOG_LEVEL=INFO
177
+
178
+ # Azure Entra ID — always read from environment at module load (required when using EntraIDProvider)
179
+ AUTH_PROVIDER_AZURE_ENTRA_ID_TENANT_ID=your-tenant-id
180
+ AUTH_PROVIDER_AZURE_ENTRA_ID_AUDIENCE_ID=your-client-id
181
+
182
+ # AWS Cognito — optional; alternative to passing values programmatically to CognitoAuthzProviderSettings
183
+ # USER_POOL_ID=us-east-1_abcdef123
184
+ # USER_POOL_REGION=us-east-1
185
+ # JWKS_CACHE_INTERVAL=20 # minutes, default 20
186
+ # JWKS_CACHE_USAGES=1000 # verifications before refresh, default 1000
187
+ ```
188
+
189
+ ### SQL-backed Groups and Permissions
190
+
191
+ ```python
192
+ from auth_middleware.providers.aws.cognito_provider import CognitoProvider
193
+ from auth_middleware.providers.sqlalchemy.sql_groups_provider import SqlGroupsProvider
194
+ from auth_middleware.providers.sqlalchemy.sql_permissions_provider import SqlPermissionsProvider
195
+ from auth_middleware.providers.sqlalchemy.async_database import AsyncDatabase
196
+ from auth_middleware.providers.sqlalchemy.async_database_settings import AsyncDatabaseSettings
197
+
198
+ AsyncDatabase.configure(AsyncDatabaseSettings(
199
+ database_url="postgresql+asyncpg://user:pass@localhost/mydb"
200
+ ))
201
+
202
+ auth_provider = CognitoProvider(
203
+ settings=auth_settings,
204
+ groups_provider=SqlGroupsProvider(),
205
+ permissions_provider=SqlPermissionsProvider(),
206
+ )
207
+
208
+ app.add_middleware(JwtAuthMiddleware, auth_provider=auth_provider)
209
+ ```
210
+
211
+ ### Cognito Groups Provider
212
+
213
+ ```python
214
+ from auth_middleware.providers.aws.cognito_provider import CognitoProvider
215
+ from auth_middleware.providers.aws.cognito_groups_provider import CognitoGroupsProvider
216
+
217
+ # Groups extracted directly from the cognito:groups JWT claim
218
+ auth_provider = CognitoProvider(
219
+ settings=auth_settings,
220
+ groups_provider=CognitoGroupsProvider,
221
+ )
222
+ ```
223
+
224
+ ## Usage Examples
225
+
226
+ ### Accessing User Information
227
+
228
+ ```python
229
+ @app.get("/profile", dependencies=[Depends(require_user())])
230
+ async def get_profile(request: Request):
231
+ user = request.state.current_user
232
+ return {
233
+ "id": user.id,
234
+ "name": user.name,
235
+ "email": user.email,
236
+ "groups": await user.groups,
237
+ "permissions": await user.permissions,
238
+ }
239
+ ```
240
+
241
+ ### Role and Permission Guards
242
+
243
+ ```python
244
+ from auth_middleware.guards import require_roles, require_permissions
245
+
246
+ @app.get("/reports", dependencies=[Depends(require_roles(["analyst", "manager"]))])
247
+ async def get_reports(request: Request):
248
+ return {"message": "Reports access granted"}
249
+
250
+ @app.post("/admin/users", dependencies=[Depends(require_permissions(["user.create"]))])
251
+ async def create_user(request: Request):
252
+ return {"message": "User creation allowed"}
253
+ ```
254
+
255
+ ### curl
256
+
257
+ ```bash
258
+ curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
259
+ http://localhost:8000/protected
260
+ ```
261
+
262
+ ## Package Structure
263
+
264
+ ```
265
+ auth_middleware/
266
+ ├── jwt_auth_middleware.py # JwtAuthMiddleware (ASGI)
267
+ ├── basic_auth_middleware.py # BasicAuthMiddleware (ASGI)
268
+ ├── constants.py # AUTH_SCHEME_BASIC, AUTH_SCHEME_BEARER
269
+ ├── contracts/ # Abstract base classes
270
+ │ ├── jwt_provider.py # JWTProvider
271
+ │ ├── groups_provider.py # GroupsProvider
272
+ │ ├── roles_provider.py # RolesProvider
273
+ │ ├── permissions_provider.py # PermissionsProvider
274
+ │ ├── profile_provider.py # ProfileProvider
275
+ │ └── credentials_repository.py # CredentialsRepository
276
+ ├── guards/ # FastAPI dependency guards
277
+ │ ├── functions.py # require_user, require_groups, require_roles,
278
+ │ │ # require_permissions, get_current_user
279
+ │ ├── group_checker.py # GroupChecker
280
+ │ ├── role_checker.py # RoleChecker
281
+ │ └── permissions_checker.py # PermissionsChecker
282
+ ├── providers/
283
+ │ ├── aws/ # AWS Cognito & Identity Pool
284
+ │ │ ├── cognito_provider.py
285
+ │ │ ├── cognito_groups_provider.py
286
+ │ │ ├── cognito_groups_as_roles_provider.py
287
+ │ │ ├── cognito_profile_provider.py
288
+ │ │ ├── cognito_authz_provider_settings.py
289
+ │ │ ├── identity_pool_provider.py
290
+ │ │ └── services/ # Cognito auth service, M2M detector
291
+ │ ├── azure/ # Azure Entra ID
292
+ │ │ ├── entra_id_provider.py
293
+ │ │ └── settings.py
294
+ │ └── sqlalchemy/ # SQL-backed authorization
295
+ │ ├── sql_groups_provider.py
296
+ │ ├── sql_permissions_provider.py
297
+ │ ├── async_database.py
298
+ │ └── async_database_settings.py
299
+ └── exceptions/ # InvalidTokenException, AuthenticationError, …
300
+ ```
301
+
302
+ ## Architecture
303
+
304
+ ```mermaid
305
+ graph TD
306
+ A[HTTP Request] --> B[JwtAuthMiddleware\nor BasicAuthMiddleware]
307
+ B --> C[JWTBearerManager]
308
+ C --> D[JWTProvider\nCognitoProvider · EntraIdProvider · IdentityPoolProvider]
309
+ D --> E[Token Validation\nJWKS cache]
310
+ E --> F[User object]
311
+ F --> G[GroupsProvider\nCognitoGroupsProvider · SqlGroupsProvider]
312
+ F --> H[PermissionsProvider\nSqlPermissionsProvider]
313
+ F --> I[RolesProvider\nCognitoGroupsAsRolesProvider]
314
+ G --> J[request.state.current_user]
315
+ H --> J
316
+ I --> J
317
+ J --> K[Guards\nrequire_user · require_groups\nrequire_roles · require_permissions]
318
+ ```
319
+
320
+ ## Core Components
321
+
322
+ | Component | Import path | Description |
323
+ | --------- | ----------- | ----------- |
324
+ | `JwtAuthMiddleware` | `auth_middleware` | ASGI middleware for JWT authentication |
325
+ | `BasicAuthMiddleware` | `auth_middleware` | ASGI middleware for Basic Auth |
326
+ | `JWTProvider` | `auth_middleware.contracts` | Abstract base for JWT providers |
327
+ | `GroupsProvider` | `auth_middleware.contracts` | Abstract base for group authorization |
328
+ | `RolesProvider` | `auth_middleware.contracts` | Abstract base for role authorization |
329
+ | `PermissionsProvider` | `auth_middleware.contracts` | Abstract base for permission authorization |
330
+ | `CredentialsRepository` | `auth_middleware.contracts` | Abstract base for Basic Auth credential lookup |
331
+ | `require_user` | `auth_middleware.guards` | Guard: requires authenticated user |
332
+ | `require_groups` | `auth_middleware.guards` | Guard: requires group membership |
333
+ | `require_roles` | `auth_middleware.guards` | Guard: requires role membership |
334
+ | `require_permissions` | `auth_middleware.guards` | Guard: requires specific permissions |
335
+ | `get_current_user` | `auth_middleware.guards` | Dependency: returns current user or `None` |
336
+ | `CognitoProvider` | `auth_middleware.providers.aws.cognito_provider` | AWS Cognito JWT provider |
337
+ | `CognitoGroupsProvider` | `auth_middleware.providers.aws.cognito_groups_provider` | Groups from `cognito:groups` claim |
338
+ | `CognitoGroupsAsRolesProvider` | `auth_middleware.providers.aws.cognito_groups_as_roles_provider` | Cognito groups mapped as roles |
339
+ | `IdentityPoolProvider` | `auth_middleware.providers.aws.identity_pool_provider` | Cognito + Identity Pool |
340
+ | `EntraIDProvider` | `auth_middleware.providers.azure.entra_id_provider` | Azure Entra ID JWT provider |
341
+ | `SqlGroupsProvider` | `auth_middleware.providers.sqlalchemy.sql_groups_provider` | DB-backed groups |
342
+ | `SqlPermissionsProvider` | `auth_middleware.providers.sqlalchemy.sql_permissions_provider` | DB-backed permissions |
343
+
344
+ ### Authenticated User Properties
345
+
346
+ Available on `request.state.current_user`:
347
+
348
+ | Property | Type | Description |
349
+ | -------- | ---- | ----------- |
350
+ | `id` | `str` | Unique identifier from the identity provider |
351
+ | `name` | `str \| None` | Display name |
352
+ | `email` | `EmailStr \| None` | Email address |
353
+ | `groups` | `list[str]` (async) | User groups |
354
+ | `roles` | `list[str]` (async) | User roles |
355
+ | `permissions` | `list[str]` (async) | User permissions |
356
+
357
+ ## Development
358
+
359
+ ```bash
360
+ # Clone and set up
361
+ git clone https://github.com/impalah/auth-middleware.git
362
+ cd auth-middleware
363
+ make venv
364
+
365
+ # Quality checks
366
+ make test # run test suite
367
+ make type-check # mypy strict
368
+ make lint # ruff
369
+ make check # all checks at once
370
+
371
+ # Build & publish
372
+ make build
373
+ make publish
374
+ ```
375
+
376
+ ## Contributing
377
+
378
+ 1. Fork the repository
379
+ 2. Create a feature branch (`git checkout -b feature/amazing-feature`)
380
+ 3. Commit your changes (`git commit -m 'feat: add amazing feature'`)
381
+ 4. Push the branch (`git push origin feature/amazing-feature`)
382
+ 5. Open a Pull Request
383
+
384
+ ## License
385
+
386
+ MIT — see [LICENSE](LICENSE) for details.
387
+
388
+ ## Links
389
+
390
+ - **Documentation**: [https://impalah.github.io/auth-middleware/](https://impalah.github.io/auth-middleware/)
391
+ - **PyPI Package**: [https://pypi.org/project/auth-middleware/](https://pypi.org/project/auth-middleware/)
392
+ - **Source Code**: [https://github.com/impalah/auth-middleware](https://github.com/impalah/auth-middleware)
393
+ - **Bug Reports**: [GitHub Issues](https://github.com/impalah/auth-middleware/issues)
394
+
395
+ ---
396
+
397
+ Created by [impalah](https://github.com/impalah) — Made for modern Python async applications