Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/#18 #32

Open
wants to merge 17 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,4 @@ requests==2.25.1
requests-oauthlib==1.3.0
six==1.15.0
sqlparse==0.4.1
urllib3==1.26.2
urllib3==1.26.2
Binary file added wadium/requirements.txt
Binary file not shown.
2 changes: 1 addition & 1 deletion wadium/story/models.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from django.db import models
from django.contrib.auth.models import User

from django.utils import timezone

class Story(models.Model):
writer = models.ForeignKey(User, related_name='stories', on_delete=models.CASCADE)
Expand Down
6 changes: 4 additions & 2 deletions wadium/story/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from user.serializers import UserSerializer



class StorySerializer(serializers.ModelSerializer):
writer = UserSerializer(read_only=True)
title = serializers.CharField(max_length=100, allow_blank=True)
Expand Down Expand Up @@ -48,7 +49,7 @@ def update(self, instance, validated_data):

story = super(StorySerializer, self).update(instance, validated_data)
return story


class SimpleStorySerializer(serializers.ModelSerializer):
writer = UserSerializer(read_only=True)
Expand Down Expand Up @@ -86,4 +87,5 @@ def create(self, validated_data):
validated_data['writer'] = self.context['user']
validated_data['story'] = self.context['story']
story = super(CommentSerializer, self).create(validated_data)
return story
return story

3 changes: 2 additions & 1 deletion wadium/story/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,4 +197,5 @@ def comment_list(self, request, pk=None):
assert page is not None
serializer = CommentSerializer(page, many=True)

return self.get_paginated_response(serializer.data)
return self.get_paginated_response(serializer.data)

2 changes: 1 addition & 1 deletion wadium/user/providers/facebook/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,4 @@ def complete_login(self, request, app, access_token, **kwargs):


oauth2_callback = TokenOAuth2CallbackView.adapter_view(FacebookOAuth2NoRedirectAdapter)
oauth2_login = TokenOAuth2LoginView.adapter_view(FacebookOAuth2NoRedirectAdapter)
oauth2_login = TokenOAuth2LoginView.adapter_view(FacebookOAuth2NoRedirectAdapter)
28 changes: 23 additions & 5 deletions wadium/user/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@ class Meta:
)
extra_kwargs = {'username': {'required': False}}

def validate_auth_type(self, value):
if value in (self.OAUTH,):
raise serializers.ValidationError(f'{value} is not yet implemented.')
else:
return value
#def validate_auth_type(self, value):
# if value in (self.OAUTH,):
# raise serializers.ValidationError(f'{value} is not yet implemented.')
# else:
# return value

def validate(self, data):
if data['auth_type'] == self.TEST:
Expand All @@ -73,6 +73,11 @@ def validate(self, data):
missing = required - set(data.get('userprofile', {}))
if missing:
raise serializers.ValidationError(f'{missing} is required')
elif data['auth_type'] == self.OAUTH:
required = {'name', 'email'}
missing = required - set(data.get('userprofile', {}))
if missing:
raise serializers.ValidationError(f'{missing} is required')
return data

def create(self, validated_data):
Expand All @@ -86,6 +91,9 @@ def create(self, validated_data):
if userprofile['email'] != email_auth.email_address.email:
raise serializers.ValidationError({'email': 'Email does not match.'})
user = UserProfile.create_user(validated_data['username'], userprofile, test_user=False)
elif auth_type == self.OAUTH:
user = UserProfile.create_user(**validated_data, test_user=False)

else:
raise ValueError()
Token.objects.create(user=user)
Expand Down Expand Up @@ -140,6 +148,9 @@ def validate(self, data):
raise serializers.ValidationError('email is required')
elif data['req_type'] == self.LOGIN and 'access_token' not in data:
raise serializers.ValidationError('access_token is required')
elif data['auth_type'] == self.OATUH:
if 'username' not in data:
raise serializers.ValidationError('username is required')
return data

def get_user(self, validated_data):
Expand Down Expand Up @@ -169,6 +180,10 @@ def get_user(self, validated_data):
email_auth = get_object_or_404(EmailAuth, token=validated_data['access_token'])
email_auth.is_valid(must_be_email=True)
return email_auth.email_address.user
elif auth_type == self.OAUTH:
oauth = get_object_or_404(EmailAuth, token=validated_data['access_token'])
oauth.is_valid(must_be_email=True)
return oauth.email_address.user
else:
raise NotImplementedError()

Expand Down Expand Up @@ -198,6 +213,7 @@ class UserSocialSerializer(serializers.ModelSerializer):
google = serializers.CharField(source='user.usergoogle.google_sub', required=False)
facebook = serializers.CharField(source='user.userfacebook.facebook_sub', required=False)


class Meta:
model = User
fields = (
Expand All @@ -206,6 +222,7 @@ class Meta:
)



class MyStorySerializer(serializers.ModelSerializer):
class Meta:
model = Story
Expand All @@ -232,3 +249,4 @@ class Meta:
'published_at',
)
read_only_fields = fields

14 changes: 10 additions & 4 deletions wadium/user/views.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
from django.contrib.auth import login, logout
from django.contrib.auth import login, logout, authenticate
from django.contrib.auth.models import User
from django.db import transaction
from django.utils import timezone
from django.shortcuts import get_object_or_404

from .serializers import UserSerializer, UserLoginSerializer, UserSelfSerializer, UserSocialSerializer, \
MyStorySerializer, UserStorySerializer
from .serializers import UserSerializer, UserLoginSerializer, UserSelfSerializer, UserSocialSerializer, MyStorySerializer, UserStorySerializer
from .models import EmailAddress, EmailAuth, UserProfile
from .permissions import UserAccessPermission
from story.paginators import StoryPagination
Expand All @@ -15,7 +13,10 @@
from rest_framework.decorators import action
from rest_framework.permissions import IsAuthenticated, AllowAny
from rest_framework.authtoken.models import Token
import requests

from django.conf import settings
#from rest_framework.decorators import permission_classes

class UserViewSet(viewsets.GenericViewSet):
queryset = User.objects.all()
Expand Down Expand Up @@ -76,6 +77,8 @@ def create(self, request):
})
elif data['req_type'] == UserSerializer.CREATE:
user = serializer.save()
elif data['auth_type'] == UserSerializer.OAUTH:
pass
else:
return Response(status=status.HTTP_501_NOT_IMPLEMENTED)

Expand All @@ -84,6 +87,7 @@ def create(self, request):
data['token'] = user.auth_token.key
return Response(data=data, status=status.HTTP_201_CREATED)


@action(detail=False, methods=['POST'])
def login(self, request):
login_serializer = UserLoginSerializer(data=request.data)
Expand All @@ -107,6 +111,8 @@ def login(self, request):
return Response(status=status.HTTP_503_SERVICE_UNAVAILABLE)
elif data['req_type'] == UserLoginSerializer.LOGIN:
user = login_serializer.get_user(data)
elif data['auth_type'] == UserLoginSerializer.OAUTH:
pass
else:
return Response(status=status.HTTP_501_NOT_IMPLEMENTED)

Expand Down
3 changes: 0 additions & 3 deletions wadium/wadium/settings.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
"""
Django settings for wadium project.

Generated by 'django-admin startproject' using Django 3.1.3.

For more information on this file, see
https://docs.djangoproject.com/en/3.1/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.1/ref/settings/
"""
Expand Down