diff --git a/.gitignore b/.gitignore index 85446ba..7d8d699 100644 --- a/.gitignore +++ b/.gitignore @@ -35,9 +35,6 @@ nosetests.xml coverage.xml coverage_html -# Translations -*.mo - # Mr Developer .mr.developer.cfg .project diff --git a/docs/configuration.rst b/docs/configuration.rst index 0728e11..dd285f1 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -37,6 +37,7 @@ Configuration Possible key values: - REGISTER_SERIALIZER - serializer class in ``rest_auth.register.views.RegisterView``, default value ``rest_auth.register.serializers.RegisterSerializer`` + - SOCIAL_LOGIN_SERIALIZER - serializer class in ``rest_auth.register.views.SocialLoginView``, default value ``rest_auth.register.serializers.SocialLoginSerializer`` - **REST_AUTH_TOKEN_MODEL** - model class for tokens, default value ``rest_framework.authtoken.models`` diff --git a/rest_auth/locale/de/LC_MESSAGES/django.mo b/rest_auth/locale/de/LC_MESSAGES/django.mo new file mode 100644 index 0000000..07861ff Binary files /dev/null and b/rest_auth/locale/de/LC_MESSAGES/django.mo differ diff --git a/rest_auth/registration/app_settings.py b/rest_auth/registration/app_settings.py index 227b45b..2b7e64e 100644 --- a/rest_auth/registration/app_settings.py +++ b/rest_auth/registration/app_settings.py @@ -1,7 +1,8 @@ from django.conf import settings from rest_auth.registration.serializers import ( - RegisterSerializer as DefaultRegisterSerializer) + RegisterSerializer as DefaultRegisterSerializer, + SocialLoginSerializer as DefaultSocialLoginSerializer) from ..utils import import_callable @@ -9,3 +10,6 @@ serializers = getattr(settings, 'REST_AUTH_REGISTER_SERIALIZERS', {}) RegisterSerializer = import_callable( serializers.get('REGISTER_SERIALIZER', DefaultRegisterSerializer)) + +SocialLoginSerializer = import_callable( + serializers.get('SOCIAL_LOGIN_SERIALIZER', DefaultSocialLoginSerializer)) diff --git a/rest_auth/registration/views.py b/rest_auth/registration/views.py index d1d8d37..4c2c6c1 100644 --- a/rest_auth/registration/views.py +++ b/rest_auth/registration/views.py @@ -15,14 +15,15 @@ from allauth.account import app_settings as allauth_settings from rest_auth.app_settings import (TokenSerializer, JWTSerializer, create_token) -from rest_auth.registration.serializers import (SocialLoginSerializer, - VerifyEmailSerializer) +from rest_auth.registration.serializers import VerifyEmailSerializer from rest_auth.views import LoginView from rest_auth.models import TokenModel -from .app_settings import RegisterSerializer +from .app_settings import (RegisterSerializer, + SocialLoginSerializer) from rest_auth.utils import jwt_encode + class RegisterView(CreateAPIView): serializer_class = RegisterSerializer permission_classes = (AllowAny, ) diff --git a/rest_auth/serializers.py b/rest_auth/serializers.py index 7daf17c..3d4faae 100644 --- a/rest_auth/serializers.py +++ b/rest_auth/serializers.py @@ -118,6 +118,7 @@ class TokenSerializer(serializers.ModelSerializer): model = TokenModel fields = ('key',) + class UserDetailsSerializer(serializers.ModelSerializer): """ @@ -128,6 +129,7 @@ class UserDetailsSerializer(serializers.ModelSerializer): fields = ('username', 'email', 'first_name', 'last_name') read_only_fields = ('email', ) + class JWTSerializer(serializers.Serializer): """ Serializer for JWT authentication. @@ -135,6 +137,7 @@ class JWTSerializer(serializers.Serializer): token = serializers.CharField() user = UserDetailsSerializer() + class PasswordResetSerializer(serializers.Serializer): """ diff --git a/rest_auth/tests/test_api.py b/rest_auth/tests/test_api.py index f75322c..a74e409 100644 --- a/rest_auth/tests/test_api.py +++ b/rest_auth/tests/test_api.py @@ -97,13 +97,12 @@ class APITestCase1(TestCase, BaseAPITestCase): "username": self.USERNAME, "password": self.PASS } - user = get_user_model().objects.create_user(self.USERNAME, '', self.PASS) + get_user_model().objects.create_user(self.USERNAME, '', self.PASS) self.post(self.login_url, data=payload, status_code=200) self.assertEqual('token' in self.response.json.keys(), True) self.token = self.response.json['token'] - def test_login_by_email(self): # starting test without allauth app settings.INSTALLED_APPS.remove('allauth') @@ -335,7 +334,6 @@ class APITestCase1(TestCase, BaseAPITestCase): user = get_user_model().objects.get(pk=user.pk) self.assertEqual(user.email, self.response.json['email']) - def test_registration(self): user_count = get_user_model().objects.all().count() @@ -365,7 +363,6 @@ class APITestCase1(TestCase, BaseAPITestCase): self._login() self._logout() - def test_registration_with_invalid_password(self): data = self.REGISTRATION_DATA.copy() data['password2'] = 'foobar' @@ -430,7 +427,7 @@ class APITestCase1(TestCase, BaseAPITestCase): } # create user - user = get_user_model().objects.create_user(self.USERNAME, '', self.PASS) + get_user_model().objects.create_user(self.USERNAME, '', self.PASS) self.post(self.login_url, data=payload, status_code=200) self.get(self.logout_url, status=status.HTTP_200_OK) @@ -443,7 +440,7 @@ class APITestCase1(TestCase, BaseAPITestCase): } # create user - user = get_user_model().objects.create_user(self.USERNAME, '', self.PASS) + get_user_model().objects.create_user(self.USERNAME, '', self.PASS) self.post(self.login_url, data=payload, status_code=status.HTTP_200_OK) self.get(self.logout_url, status_code=status.HTTP_405_METHOD_NOT_ALLOWED) diff --git a/rest_auth/tests/test_social.py b/rest_auth/tests/test_social.py index 34c912e..a06e365 100644 --- a/rest_auth/tests/test_social.py +++ b/rest_auth/tests/test_social.py @@ -148,6 +148,5 @@ class TestSocialAuth(TestCase, BaseAPITestCase): self.post(self.fb_login_url, data=payload, status_code=200) self.assertIn('token', self.response.json.keys()) self.assertIn('user', self.response.json.keys()) - - self.assertEqual(get_user_model().objects.all().count(), users_count + 1) + self.assertEqual(get_user_model().objects.all().count(), users_count + 1) diff --git a/rest_auth/utils.py b/rest_auth/utils.py index 5cb94d7..99d80b8 100644 --- a/rest_auth/utils.py +++ b/rest_auth/utils.py @@ -15,8 +15,9 @@ def default_create_token(token_model, user, serializer): token, _ = token_model.objects.get_or_create(user=user) return token + def jwt_encode(user): - try: + try: from rest_framework_jwt.settings import api_settings except ImportError: raise ImportError('rest_framework_jwt needs to be installed') diff --git a/rest_auth/views.py b/rest_auth/views.py index 25f47f2..5e168cd 100644 --- a/rest_auth/views.py +++ b/rest_auth/views.py @@ -46,7 +46,7 @@ class LoginView(GenericAPIView): def login(self): self.user = self.serializer.validated_data['user'] - + if getattr(settings, 'REST_USE_JWT', False): self.token = jwt_encode(self.user) else: @@ -55,7 +55,6 @@ class LoginView(GenericAPIView): if getattr(settings, 'REST_SESSION_LOGIN', True): login(self.request, self.user) - def get_response(self): serializer_class = self.get_response_serializer()