diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 3f9e7db0a..7da55afb1 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -18,10 +18,11 @@ jobs: run: pip install flit - name: Install Dependencies run: flit install --symlink + - name: Install build dependencies + run: pip install build + - name: Build distribution + run: python -m build - name: Publish - env: - FLIT_USERNAME: ${{ secrets.FLIT_USERNAME }} - FLIT_PASSWORD: ${{ secrets.FLIT_PASSWORD }} - run: flit publish - - name: Deploy Documentation - run: make doc-deploy + uses: pypa/gh-action-pypi-publish@v1.8.10 + with: + password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/ninja_jwt/__init__.py b/ninja_jwt/__init__.py index 626ac19be..5892b6b81 100644 --- a/ninja_jwt/__init__.py +++ b/ninja_jwt/__init__.py @@ -1,3 +1,3 @@ """Django Ninja JWT - JSON Web Token for Django-Ninja""" -__version__ = "5.2.10" +__version__ = "5.3.0" diff --git a/ninja_jwt/controller.py b/ninja_jwt/controller.py index 56fb61552..863c49d61 100644 --- a/ninja_jwt/controller.py +++ b/ninja_jwt/controller.py @@ -1,4 +1,4 @@ -import django +from asgiref.sync import sync_to_async from ninja import Schema from ninja_extra import ControllerBase, api_controller, http_post from ninja_extra.permissions import AllowAny @@ -6,7 +6,7 @@ from ninja_jwt.schema_control import SchemaControl from ninja_jwt.settings import api_settings -exports = [ +__all__ = [ "TokenVerificationController", "TokenBlackListController", "TokenObtainPairController", @@ -14,22 +14,15 @@ "TokenObtainSlidingController", "NinjaJWTDefaultController", "NinjaJWTSlidingController", + "AsyncTokenVerificationController", + "AsyncTokenBlackListController", + "AsyncTokenObtainPairController", + "AsyncTokenObtainSlidingController", + "AsyncTokenObtainSlidingController", + "AsyncNinjaJWTDefaultController", + "AsyncNinjaJWTSlidingController", ] -if not django.VERSION < (3, 1): - exports += [ - "AsyncTokenVerificationController", - "AsyncTokenBlackListController", - "AsyncTokenObtainPairController", - "AsyncTokenObtainSlidingController", - "AsyncTokenObtainSlidingController", - "AsyncNinjaJWTDefaultController", - "AsyncNinjaJWTSlidingController", - ] - -__all__ = exports - - schema = SchemaControl(api_settings) @@ -99,14 +92,14 @@ def refresh_token(self, refresh_token: schema.obtain_sliding_refresh_schema): return refresh_token.to_response_schema() -@api_controller("/token", permissions=[AllowAny], tags=["token"]) +@api_controller("/token", permissions=[AllowAny], tags=["token"], auth=None) class NinjaJWTDefaultController(TokenVerificationController, TokenObtainPairController): """NinjaJWT Default controller for obtaining and refreshing tokens""" auto_import = False -@api_controller("/token", permissions=[AllowAny], tags=["token"]) +@api_controller("/token", permissions=[AllowAny], tags=["token"], auth=None) class NinjaJWTSlidingController( TokenVerificationController, TokenObtainSlidingController ): @@ -118,84 +111,84 @@ class NinjaJWTSlidingController( auto_import = False -if not django.VERSION < (3, 1): - from asgiref.sync import sync_to_async - - class AsyncTokenVerificationController(TokenVerificationController): - @http_post( - "/verify", - response={200: Schema}, - url_name="token_verify", - ) - async def verify_token(self, token: schema.verify_schema): - return token.to_response_schema() - - class AsyncTokenBlackListController(TokenBlackListController): - auto_import = False - - @http_post( - "/blacklist", - response={200: Schema}, - url_name="token_blacklist", - ) - async def blacklist_token(self, refresh: schema.blacklist_schema): - return refresh.to_response_schema() - - class AsyncTokenObtainPairController(TokenObtainPairController): - @http_post( - "/pair", - response=schema.obtain_pair_schema.get_response_schema(), - url_name="token_obtain_pair", - ) - async def obtain_token(self, user_token: schema.obtain_pair_schema): - await sync_to_async(user_token.check_user_authentication_rule)() - return user_token.to_response_schema() - - @http_post( - "/refresh", - response=schema.obtain_pair_refresh_schema.get_response_schema(), - url_name="token_refresh", - ) - async def refresh_token(self, refresh_token: schema.obtain_pair_refresh_schema): - refresh = await sync_to_async(refresh_token.to_response_schema)() - return refresh - - class AsyncTokenObtainSlidingController(TokenObtainSlidingController): - @http_post( - "/sliding", - response=schema.obtain_sliding_schema.get_response_schema(), - url_name="token_obtain_sliding", - ) - async def obtain_token(self, user_token: schema.obtain_sliding_schema): - await sync_to_async(user_token.check_user_authentication_rule)() - return user_token.to_response_schema() - - @http_post( - "/sliding/refresh", - response=schema.obtain_sliding_refresh_schema.get_response_schema(), - url_name="token_refresh_sliding", - ) - async def refresh_token( - self, refresh_token: schema.obtain_sliding_refresh_schema - ): - refresh = await sync_to_async(refresh_token.to_response_schema)() - return refresh - - @api_controller("/token", permissions=[AllowAny], tags=["token"]) - class AsyncNinjaJWTDefaultController( - AsyncTokenVerificationController, AsyncTokenObtainPairController - ): - """NinjaJWT Async Default controller for obtaining and refreshing tokens""" - - auto_import = False - - @api_controller("/token", permissions=[AllowAny], tags=["token"]) - class AsyncNinjaJWTSlidingController( - AsyncTokenVerificationController, AsyncTokenObtainSlidingController - ): - """ - NinjaJWT Async Sliding controller for obtaining and refreshing tokens - Add 'ninja_jwt.tokens.SlidingToken' in AUTH_TOKEN_CLASSES in Settings - """ - - auto_import = False +class AsyncTokenVerificationController(TokenVerificationController): + @http_post( + "/verify", + response={200: Schema}, + url_name="token_verify", + ) + async def verify_token(self, token: schema.verify_schema): + return token.to_response_schema() + + +class AsyncTokenBlackListController(TokenBlackListController): + auto_import = False + + @http_post( + "/blacklist", + response={200: Schema}, + url_name="token_blacklist", + ) + async def blacklist_token(self, refresh: schema.blacklist_schema): + return refresh.to_response_schema() + + +class AsyncTokenObtainPairController(TokenObtainPairController): + @http_post( + "/pair", + response=schema.obtain_pair_schema.get_response_schema(), + url_name="token_obtain_pair", + ) + async def obtain_token(self, user_token: schema.obtain_pair_schema): + await sync_to_async(user_token.check_user_authentication_rule)() + return user_token.to_response_schema() + + @http_post( + "/refresh", + response=schema.obtain_pair_refresh_schema.get_response_schema(), + url_name="token_refresh", + ) + async def refresh_token(self, refresh_token: schema.obtain_pair_refresh_schema): + refresh = await sync_to_async(refresh_token.to_response_schema)() + return refresh + + +class AsyncTokenObtainSlidingController(TokenObtainSlidingController): + @http_post( + "/sliding", + response=schema.obtain_sliding_schema.get_response_schema(), + url_name="token_obtain_sliding", + ) + async def obtain_token(self, user_token: schema.obtain_sliding_schema): + await sync_to_async(user_token.check_user_authentication_rule)() + return user_token.to_response_schema() + + @http_post( + "/sliding/refresh", + response=schema.obtain_sliding_refresh_schema.get_response_schema(), + url_name="token_refresh_sliding", + ) + async def refresh_token(self, refresh_token: schema.obtain_sliding_refresh_schema): + refresh = await sync_to_async(refresh_token.to_response_schema)() + return refresh + + +@api_controller("/token", permissions=[AllowAny], tags=["token"], auth=None) +class AsyncNinjaJWTDefaultController( + AsyncTokenVerificationController, AsyncTokenObtainPairController +): + """NinjaJWT Async Default controller for obtaining and refreshing tokens""" + + auto_import = False + + +@api_controller("/token", permissions=[AllowAny], tags=["token"], auth=None) +class AsyncNinjaJWTSlidingController( + AsyncTokenVerificationController, AsyncTokenObtainSlidingController +): + """ + NinjaJWT Async Sliding controller for obtaining and refreshing tokens + Add 'ninja_jwt.tokens.SlidingToken' in AUTH_TOKEN_CLASSES in Settings + """ + + auto_import = False