You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
1.3 KiB
35 lines
1.3 KiB
2 years ago
|
from django.contrib.auth import authenticate
|
||
|
from rest_framework import serializers
|
||
|
from xenua.django.rest.views import UserScopedViewMixin
|
||
|
|
||
|
from xenua.django.rest.models import Token
|
||
|
|
||
|
|
||
|
class TokenSerializer(UserScopedViewMixin, serializers.ModelSerializer):
|
||
|
password = serializers.CharField(style={'input_type': 'password'},
|
||
|
trim_whitespace=False, write_only=True, required=False)
|
||
|
|
||
|
class Meta:
|
||
|
model = Token
|
||
|
fields = ('key', 'creation_date', 'password')
|
||
|
read_only_fields = ('key', 'creation_date')
|
||
|
|
||
|
def validate(self, attrs):
|
||
|
username = self.context.get('request').user.username
|
||
|
password = attrs.get('password')
|
||
|
|
||
|
if username and password:
|
||
|
user = authenticate(request=self.context['request'],
|
||
|
username=username, password=password)
|
||
|
|
||
|
if not user:
|
||
|
raise serializers.ValidationError('unable to log in', code='authorization')
|
||
|
|
||
|
else:
|
||
|
raise serializers.ValidationError('include username and password for write operations',
|
||
|
code='authorization')
|
||
|
return {'user': user}
|
||
|
|
||
|
def create(self, validated_data):
|
||
|
return self.Meta.model.objects.create(**validated_data)
|