skillbox/server/users/serializers.py

70 lines
2.3 KiB
Python

# -*- coding: utf-8 -*-
#
# ITerativ GmbH
# http://www.iterativ.ch/
#
# Copyright (c) 2019 ITerativ GmbH. All rights reserved.
#
# Created on 2019-04-02
# @author: chrigu <christian.cueni@iterativ.ch>
import re
from django.contrib.auth import get_user_model
from rest_framework import serializers
from rest_framework.fields import CharField, URLField
from django.utils.translation import ugettext_lazy as _
MIN_PASSWORD_LENGTH = 8
# For future versions https://docs.djangoproject.com/en/2.1/topics/auth/passwords/#integrating-validation
def validate_old_password(old_password, username):
user = get_user_model().objects.get(username=username)
if user.check_password(old_password):
return old_password
else:
raise serializers.ValidationError(_(u'Das eingegebene Passwort ist falsch'))
def validate_old_new_password(value):
if value.get('old_password') == '' and value.get('new_password') == '':
return value
elif value.get('old_password') == '' and value.get('new_password') != '':
raise serializers.ValidationError(_(u'Das neue Passwort muss gesetzt werden'))
elif value.get('old_password') != '' and value.get('new_password') == '':
raise serializers.ValidationError(_(u'Das alte Passwort muss angegeben werden'))
return value
def validate_strong_email(password):
has_number = re.search('\d', password)
has_upper = re.search('[A-Z]', password)
has_lower = re.search('[a-z]', password)
has_special = re.search('[!@#$%^&*(),.?":{}|<>\+]', password)
if has_number and has_upper and has_lower and has_special:
return password
else:
raise serializers.ValidationError(_(u'Das Passwort muss Grossbuchstaben, Zahlen und Sonderzeichen beinhalten'))
class PasswordSerialzer(serializers.Serializer):
old_password = CharField(allow_blank=True)
new_password = CharField(allow_blank=True, min_length=MIN_PASSWORD_LENGTH)
def validate_new_password(self, value):
return validate_strong_email(value)
def validate_old_password(self, value):
return validate_old_password(value, self.context.username)
def validate(self, obj):
return validate_old_new_password(obj)
class AvatarUrlSerializer(serializers.Serializer):
avatar_url = URLField(allow_blank=True)