From c004ded0246b587c6eb3d18db9bcaf1683161f36 Mon Sep 17 00:00:00 2001 From: 07pepa <9963200+07pepa@users.noreply.github.com> Date: Sun, 29 Dec 2024 16:31:43 +0100 Subject: [PATCH 1/2] remove deprecated utcnow --- docs/settings.rst | 2 +- graphql_jwt/decorators.py | 6 +++--- graphql_jwt/utils.py | 8 ++++---- tests/context_managers.py | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/settings.rst b/docs/settings.rst index f1052fe7..877ec949 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -133,7 +133,7 @@ Token expiration JWT_EXPIRATION_DELTA ~~~~~~~~~~~~~~~~~~~~ - Timedelta added to *utcnow()* to set the expiration time + Timedelta added to *now(tz=timezone.utc)* to set the expiration time Default: ``timedelta(minutes=5)`` diff --git a/graphql_jwt/decorators.py b/graphql_jwt/decorators.py index bb9998b2..bb27c98a 100644 --- a/graphql_jwt/decorators.py +++ b/graphql_jwt/decorators.py @@ -1,5 +1,5 @@ from calendar import timegm -from datetime import datetime +from datetime import datetime,timezone from functools import wraps from django.contrib.auth import authenticate, get_user_model @@ -119,7 +119,7 @@ def refresh_expiration(f): def wrapper(cls, *args, **kwargs): def on_resolve(payload): payload.refresh_expires_in = ( - timegm(datetime.utcnow().utctimetuple()) + timegm(datetime.now(tz=timezone.utc).utctimetuple()) + jwt_settings.JWT_REFRESH_EXPIRATION_DELTA.total_seconds() ) return payload @@ -161,7 +161,7 @@ def wrapped_view(request, *args, **kwargs): response = view_func(request, *args, **kwargs) if hasattr(request, "jwt_token"): - expires = datetime.utcnow() + jwt_settings.JWT_EXPIRATION_DELTA + expires = datetime.now(tz=timezone.utc) + jwt_settings.JWT_EXPIRATION_DELTA set_cookie( response, diff --git a/graphql_jwt/utils.py b/graphql_jwt/utils.py index aff19515..157345e3 100644 --- a/graphql_jwt/utils.py +++ b/graphql_jwt/utils.py @@ -1,5 +1,5 @@ from calendar import timegm -from datetime import datetime +from datetime import datetime,timezone import django from django.contrib.auth import get_user_model @@ -17,7 +17,7 @@ def jwt_payload(user, context=None): if hasattr(username, "pk"): username = username.pk - exp = datetime.utcnow() + jwt_settings.JWT_EXPIRATION_DELTA + exp = datetime.now(tz=timezone.utc) + jwt_settings.JWT_EXPIRATION_DELTA payload = { user.USERNAME_FIELD: username, @@ -25,7 +25,7 @@ def jwt_payload(user, context=None): } if jwt_settings.JWT_ALLOW_REFRESH: - payload["origIat"] = timegm(datetime.utcnow().utctimetuple()) + payload["origIat"] = timegm(datetime.now(tz=timezone.utc).utctimetuple()) if jwt_settings.JWT_AUDIENCE is not None: payload["aud"] = jwt_settings.JWT_AUDIENCE @@ -119,7 +119,7 @@ def get_user_by_payload(payload): def refresh_has_expired(orig_iat, context=None): exp = orig_iat + jwt_settings.JWT_REFRESH_EXPIRATION_DELTA.total_seconds() - return timegm(datetime.utcnow().utctimetuple()) > exp + return timegm(datetime.now(tz=timezone.utc).utctimetuple()) > exp def set_cookie(response, key, value, expires): diff --git a/tests/context_managers.py b/tests/context_managers.py index b3d14514..d6e0a36c 100644 --- a/tests/context_managers.py +++ b/tests/context_managers.py @@ -1,5 +1,5 @@ from contextlib import contextmanager -from datetime import datetime, timedelta +from datetime import datetime, timedelta,timezone from unittest import mock from graphql_jwt.settings import jwt_settings @@ -16,7 +16,7 @@ def catch_signal(signal): @contextmanager def back_to_the_future(**kwargs): with mock.patch("graphql_jwt.utils.datetime") as datetime_mock: - datetime_mock.utcnow.return_value = datetime.utcnow() + timedelta(**kwargs) + datetime_mock.now.return_value = datetime.now(tz=timezone.utc) + timedelta(**kwargs) yield datetime_mock From 913810bd2b8794ac6be09bbeb35acc00b7fc6c84 Mon Sep 17 00:00:00 2001 From: 07pepa <9963200+07pepa@users.noreply.github.com> Date: Tue, 22 Apr 2025 08:09:13 +0200 Subject: [PATCH 2/2] add czech translation --- graphql_jwt/locale/cs/LC_MESSAGES/django.mo | Bin 0 -> 1179 bytes graphql_jwt/locale/cs/LC_MESSAGES/django.po | 59 ++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 graphql_jwt/locale/cs/LC_MESSAGES/django.mo create mode 100644 graphql_jwt/locale/cs/LC_MESSAGES/django.po diff --git a/graphql_jwt/locale/cs/LC_MESSAGES/django.mo b/graphql_jwt/locale/cs/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..dc3e6a35eade2ec7c2946d9da0264c0d45527cc0 GIT binary patch literal 1179 zcmZXT&usxQ!Iri`9chMQ3b(Ql}#+32BRP%TqJH0Cu>!gBPK|(oU zXqGrIB1SBEYFSro8)1huwG8dEyGm_Ryt;lH~ZEG_kH$)8|I4m=5WK!pjwxvkp1L7T{cf`O2^*FdMjMoUM zQ(ODBb~mE?QFpW6ZdJM>)5Zl&o5(o0Gfr&K(;-zl?Vu}i>1%>@?nForqFOg-wuAK= z-D`)<`lW~MR#a(l>w=!)%BI|D6VgV%(V$kX8PRIgtkoO0YwPRXXmj%>QdKhMi3oav zk3wqHT6gT9DqW*y$tg>@yK1tQZCgB4TjuU z;i~=KMsQ<4&yTe&Oc1HrfroTsOS(!Y9UGno8~7t_NGdBsTfM$Qv&ZVsimFvwriBGk z^b;NsEnTErv_v6c^JbN<&Nf%8bp7+R*U$GdGo6T3vrgG*zQAUeaz|ig`kv1QV*TlRnd973DmOAUcEvkP sGb$$Nsxwnea`n%1ue?i{K@)rq2wd?J*Oc!L#Qa`nIu$dOxx8lo16Vjtm;e9( literal 0 HcmV?d00001 diff --git a/graphql_jwt/locale/cs/LC_MESSAGES/django.po b/graphql_jwt/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000..059adbfa --- /dev/null +++ b/graphql_jwt/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,59 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Josef Havránek <9963200+07pepa@users.noreply.github.com, 2025. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-04-22 08:01+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " +"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" +#: graphql_jwt/decorators.py:104 +msgid "Please enter valid credentials" +msgstr "Prosím zadejte platné přihlašovací údaje" + +#: graphql_jwt/decorators.py:203 +msgid "Token is required" +msgstr "Token je vyžadován" + +#: graphql_jwt/exceptions.py:15 +msgid "You do not have permission to perform this action" +msgstr "Nemáte oprávnění k provedení této akce" + +#: graphql_jwt/exceptions.py:19 +msgid "Signature has expired" +msgstr "Podpis vypršel" + +#: graphql_jwt/mixins.py:78 +msgid "origIat field is required" +msgstr "origIat pole je vyžadováno" + +#: graphql_jwt/mixins.py:81 +msgid "Refresh has expired" +msgstr "Obnovení vypršelo" + +#: graphql_jwt/utils.py:93 +msgid "Error decoding signature" +msgstr "Chyba při dekódování podpisu" + +#: graphql_jwt/utils.py:95 +msgid "Invalid token" +msgstr "Neplatný token" + +#: graphql_jwt/utils.py:111 +msgid "Invalid payload" +msgstr "Neplatná data" + +#: graphql_jwt/utils.py:116 +msgid "User is disabled" +msgstr "Uživatel je vypnutý"