Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 19be2fe

Browse files
committedFeb 6, 2023
Add refresh view
1 parent 10b0c13 commit 19be2fe

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed
 

‎python/nav/web/api/v1/views.py

+28
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
from oidc_auth.authentication import JSONWebTokenAuthentication
4444

4545
from nav.models import manage, event, cabling, rack, profiles
46+
from nav.models.api import JWTRefreshToken
4647
from nav.models.fields import INFINITY, UNRESOLVED
4748
from nav.web.servicecheckers import load_checker_classes
4849
from nav.util import auth_token
@@ -1064,6 +1065,33 @@ class RackViewSet(NAVAPIMixin, viewsets.ReadOnlyModelViewSet):
10641065
search_fields = ['rackname']
10651066

10661067

1068+
class JWTRefreshViewSet(APIView):
1069+
"""
1070+
Accepts a valid refresh token.
1071+
Returns a new refresh token and an access token.
1072+
"""
1073+
1074+
def post(self, request):
1075+
try:
1076+
db_token = JWTRefreshToken.objects.get(
1077+
token=request.data.get('refresh_token')
1078+
)
1079+
except JWTRefreshToken.DoesNotExist:
1080+
return Response("Invalid token", status=status.HTTP_403_FORBIDDEN)
1081+
if not db_token.is_active():
1082+
return Response("Inactive token", status=status.HTTP_403_FORBIDDEN)
1083+
token_data = db_token.data()
1084+
access_token = JWTRefreshToken.generate_access_token(token_data)
1085+
refresh_token = JWTRefreshToken.generate_refresh_token(token_data)
1086+
db_token.token = refresh_token
1087+
db_token.save()
1088+
response_data = {
1089+
'access_token': access_token,
1090+
'refresh_token': refresh_token,
1091+
}
1092+
return Response(response_data)
1093+
1094+
10671095
def get_or_create_token(request):
10681096
"""Gets an existing token or creates a new one. If the old token has
10691097
expired, create a new one.

0 commit comments

Comments
 (0)
Please sign in to comment.