forked from uncloud/uncloud
72 lines
2.6 KiB
Python
72 lines
2.6 KiB
Python
from django.contrib.auth import get_user_model
|
|
from django.db import transaction
|
|
from ldap3.core.exceptions import LDAPEntryAlreadyExistsResult
|
|
from rest_framework import serializers
|
|
|
|
from uncloud import AMOUNT_DECIMALS, AMOUNT_MAX_DIGITS
|
|
from uncloud_pay.models import BillingAddress
|
|
|
|
from .ungleich_ldap import LdapManager
|
|
|
|
|
|
class UserSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = get_user_model()
|
|
read_only_fields = [ 'username', 'balance', 'maximum_credit' ]
|
|
fields = read_only_fields + [ 'email' ] # , 'primary_billing_address' ]
|
|
|
|
def validate(self, data):
|
|
"""
|
|
Ensure that the primary billing address belongs to the user
|
|
"""
|
|
# The following is raising exceptions probably, it is WIP somewhere
|
|
# if 'primary_billing_address' in data:
|
|
# if not data['primary_billing_address'].owner == self.instance:
|
|
# raise serializers.ValidationError('Invalid data')
|
|
|
|
return data
|
|
|
|
def update(self, instance, validated_data):
|
|
ldap_manager = LdapManager()
|
|
return_val, _ = ldap_manager.change_user_details(
|
|
instance.username, {'mail': validated_data.get('email')}
|
|
)
|
|
if not return_val:
|
|
raise serializers.ValidationError('Couldn\'t update email')
|
|
instance.email = validated_data.get('email')
|
|
instance.save()
|
|
return instance
|
|
|
|
|
|
class UserRegistrationSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = get_user_model()
|
|
fields = ['username', 'first_name', 'last_name', 'email', 'password']
|
|
extra_kwargs = {
|
|
'password': {'style': {'input_type': 'password'}},
|
|
'first_name': {'allow_blank': False, 'required': True},
|
|
'last_name': {'allow_blank': False, 'required': True},
|
|
'email': {'allow_blank': False, 'required': True},
|
|
}
|
|
|
|
def create(self, validated_data):
|
|
ldap_manager = LdapManager()
|
|
try:
|
|
data = {
|
|
'user': validated_data['username'],
|
|
'password': validated_data['password'],
|
|
'email': validated_data['email'],
|
|
'firstname': validated_data['first_name'],
|
|
'lastname': validated_data['last_name'],
|
|
}
|
|
ldap_manager.create_user(**data)
|
|
except LDAPEntryAlreadyExistsResult:
|
|
raise serializers.ValidationError(
|
|
{'username': ['A user with that username already exists.']}
|
|
)
|
|
else:
|
|
return get_user_model().objects.create_user(**validated_data)
|
|
|
|
|
|
class ImportUserSerializer(serializers.Serializer):
|
|
username = serializers.CharField()
|