From 97b8dfdc2107a2be6eb02204732dcbbf0a9cac99 Mon Sep 17 00:00:00 2001 From: Sayyid Hamid Mahdavi Date: Tue, 3 Feb 2026 14:18:57 +0330 Subject: [PATCH] i18n --- apps/gooyal_oauth2/urls.py | 6 ++- apps/gooyal_oauth2/views/introspect.py | 50 +++++++++++++++++++++++++ locale/ar/LC_MESSAGES/django.po | 10 ++++- locale/en/LC_MESSAGES/django.po | 10 ++++- locale/fa/LC_MESSAGES/django.mo | Bin 716 -> 922 bytes locale/fa/LC_MESSAGES/django.po | 10 ++++- locale/tr/LC_MESSAGES/django.po | 10 ++++- 7 files changed, 90 insertions(+), 6 deletions(-) diff --git a/apps/gooyal_oauth2/urls.py b/apps/gooyal_oauth2/urls.py index 7071dfd..62e9055 100644 --- a/apps/gooyal_oauth2/urls.py +++ b/apps/gooyal_oauth2/urls.py @@ -3,15 +3,17 @@ from django.urls import re_path, path from oauth2_provider import views from rest_framework import routers -from .views.introspect import IntrospectTokenView, IntrospectApplicationView +from .views.introspect import IntrospectTokenView, IntrospectApplicationView, TokenView from .views import apis as api_views from .views import pages app_name = "gooyal_oauth2" + + base_urlpatterns = [ re_path(r"^authorize/$", views.AuthorizationView.as_view(), name="authorize"), - re_path(r"^token/$", views.TokenView.as_view(), name="token"), + re_path(r"^token/$", TokenView.as_view(), name="token"), re_path(r"^revoke_token/$", views.RevokeTokenView.as_view(), name="revoke-token"), re_path(r"^introspect/$", IntrospectTokenView.as_view(), name="introspect"), re_path(r"^introspect_application/$", IntrospectApplicationView.as_view(), name="introspect-application"), diff --git a/apps/gooyal_oauth2/views/introspect.py b/apps/gooyal_oauth2/views/introspect.py index e2ce549..342cddc 100644 --- a/apps/gooyal_oauth2/views/introspect.py +++ b/apps/gooyal_oauth2/views/introspect.py @@ -1,12 +1,16 @@ import calendar +from allauth.account.internal.decorators import login_not_required from django.core.exceptions import ObjectDoesNotExist from django.http import JsonResponse from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt +from django.utils.translation import gettext_lazy as _ from oauth2_provider.models import get_access_token_model, get_application_model +from oauth2_provider.signals import app_authorized from oauth2_provider.views.generic import ClientProtectedScopedResourceView +from oauth2_provider.views.mixins import OAuthLibMixin @method_decorator(csrf_exempt, name="dispatch") @@ -117,3 +121,49 @@ class IntrospectApplicationView(ClientProtectedScopedResourceView): :return: """ return self.get_application_response(request.POST.get("client_id", None)) + + + +import hashlib +import json +from django.http import HttpResponse +from django.utils.decorators import method_decorator +from django.views.decorators.csrf import csrf_exempt +from django.views.decorators.debug import sensitive_post_parameters +from django.views.generic import FormView, View + + +@method_decorator(csrf_exempt, name="dispatch") +@method_decorator(login_not_required, name="dispatch") +class TokenView(OAuthLibMixin, View): + """ + Implements an endpoint to provide access tokens + + The endpoint is used in the following flows: + * Authorization code + * Password + * Client credentials + """ + + @method_decorator(sensitive_post_parameters("password", "client_secret")) + def post(self, request, *args, **kwargs): + url, headers, body, status = self.create_token_response(request) + content = json.loads(body) + for k,v in content.items(): + _('Invalid credentials given.') + _('invalid_grant') + + content[k] = _(v) + + if status == 200: + access_token = json.loads(body).get("access_token") + if access_token is not None: + token_checksum = hashlib.sha256(access_token.encode("utf-8")).hexdigest() + token = get_access_token_model().objects.get(token_checksum=token_checksum) + app_authorized.send(sender=self, request=request, token=token) + response = HttpResponse(content=body, status=status) + + for k, v in headers.items(): + response[k] = v + return response + diff --git a/locale/ar/LC_MESSAGES/django.po b/locale/ar/LC_MESSAGES/django.po index 68596f4..0f31711 100644 --- a/locale/ar/LC_MESSAGES/django.po +++ b/locale/ar/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 10:16+0000\n" +"POT-Creation-Date: 2026-02-03 10:43+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -35,6 +35,14 @@ msgstr "" msgid "Turkish" msgstr "" +#: apps/gooyal_oauth2/views/introspect.py:153 +msgid "Invalid credentials given." +msgstr "" + +#: apps/gooyal_oauth2/views/introspect.py:154 +msgid "invalid_grant" +msgstr "" + #: apps/users/constans.py:9 msgid "male" msgstr "" diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po index 6567b72..3c36f69 100644 --- a/locale/en/LC_MESSAGES/django.po +++ b/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 10:16+0000\n" +"POT-Creation-Date: 2026-02-03 10:43+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -34,6 +34,14 @@ msgstr "" msgid "Turkish" msgstr "" +#: apps/gooyal_oauth2/views/introspect.py:153 +msgid "Invalid credentials given." +msgstr "" + +#: apps/gooyal_oauth2/views/introspect.py:154 +msgid "invalid_grant" +msgstr "" + #: apps/users/constans.py:9 msgid "male" msgstr "" diff --git a/locale/fa/LC_MESSAGES/django.mo b/locale/fa/LC_MESSAGES/django.mo index f81a514ef08b72bd476d3566f7f425e06776cdf7..dc0ba6fb4f168aa36fe24c5eb9bc42a96c4b00cc 100644 GIT binary patch delta 351 zcmYk0ze@sf7>8d?bBG$+w7~Bk_%B3b(A3xxM;>yZhnP48E|m>#;u18Uig8>D($>)E z\n" "Language-Team: LANGUAGE \n" @@ -34,6 +34,14 @@ msgstr "" msgid "Turkish" msgstr "" +#: apps/gooyal_oauth2/views/introspect.py:153 +msgid "Invalid credentials given." +msgstr "اطلاعات وارد شده برای اعتبار سنجی نادرست است." + +#: apps/gooyal_oauth2/views/introspect.py:154 +msgid "invalid_grant" +msgstr "دسترسی اشتباه" + #: apps/users/constans.py:9 msgid "male" msgstr "" diff --git a/locale/tr/LC_MESSAGES/django.po b/locale/tr/LC_MESSAGES/django.po index d0c5c7e..d392ce3 100644 --- a/locale/tr/LC_MESSAGES/django.po +++ b/locale/tr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-02-03 10:16+0000\n" +"POT-Creation-Date: 2026-02-03 10:43+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -34,6 +34,14 @@ msgstr "" msgid "Turkish" msgstr "" +#: apps/gooyal_oauth2/views/introspect.py:153 +msgid "Invalid credentials given." +msgstr "" + +#: apps/gooyal_oauth2/views/introspect.py:154 +msgid "invalid_grant" +msgstr "" + #: apps/users/constans.py:9 msgid "male" msgstr ""