Initial commit
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
from rest_framework import serializers
|
||||
from django.contrib.auth import get_user_model
|
||||
from .models import RegistrationDomainRule, RegistrationRestrictionSetting
|
||||
from apps.events.models import Skill
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
class SkillSimpleSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Skill
|
||||
fields = ['id', 'name', 'description', 'color']
|
||||
|
||||
class UserSerializer(serializers.ModelSerializer):
|
||||
skills = SkillSimpleSerializer(many=True, read_only=True)
|
||||
skill_ids = serializers.PrimaryKeyRelatedField(
|
||||
queryset=Skill.objects.all(), many=True, write_only=True, required=False, source='skills'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ['id', 'username', 'email', 'display_name', 'is_admin_user', 'is_staff', 'is_superuser', 'is_approved', 'is_active', 'skills', 'skill_ids']
|
||||
read_only_fields = ['id', 'is_staff', 'is_superuser', 'is_approved']
|
||||
|
||||
class AdminUserSerializer(serializers.ModelSerializer):
|
||||
skills = SkillSimpleSerializer(many=True, read_only=True)
|
||||
skill_ids = serializers.PrimaryKeyRelatedField(
|
||||
queryset=Skill.objects.all(), many=True, write_only=True, required=False, source='skills'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ['id', 'username', 'email', 'display_name', 'is_admin_user', 'is_staff', 'is_superuser', 'is_approved', 'is_active', 'skills', 'skill_ids', 'date_joined']
|
||||
read_only_fields = ['id', 'date_joined']
|
||||
|
||||
class RegisterSerializer(serializers.ModelSerializer):
|
||||
password = serializers.CharField(write_only=True, min_length=6)
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ['username', 'email', 'password', 'display_name']
|
||||
|
||||
def validate_email(self, value):
|
||||
email = value.strip().lower()
|
||||
setting = RegistrationRestrictionSetting.get_solo()
|
||||
if setting.is_restriction_enabled:
|
||||
allowed_rules = RegistrationDomainRule.objects.filter(is_active=True)
|
||||
if allowed_rules.exists():
|
||||
email_domain = email.split('@')[-1] if '@' in email else ''
|
||||
matched = False
|
||||
for rule in allowed_rules:
|
||||
clean_rule = rule.domain.lstrip('@').lower()
|
||||
if email_domain == clean_rule or email_domain.endswith('.' + clean_rule):
|
||||
matched = True
|
||||
break
|
||||
if not matched:
|
||||
domains_list = ", ".join([r.domain for r in allowed_rules])
|
||||
raise serializers.ValidationError(
|
||||
f"Registrierungen sind derzeit nur für folgende E-Mail-Domains erlaubt: {domains_list}"
|
||||
)
|
||||
return email
|
||||
|
||||
def create(self, validated_data):
|
||||
display_name = validated_data.get('display_name', '') or validated_data['username']
|
||||
user = User.objects.create_user(
|
||||
username=validated_data['username'],
|
||||
email=validated_data['email'],
|
||||
password=validated_data['password'],
|
||||
display_name=display_name
|
||||
)
|
||||
return user
|
||||
|
||||
class RegistrationDomainRuleSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = RegistrationDomainRule
|
||||
fields = ['id', 'domain', 'is_active', 'created_at']
|
||||
|
||||
class RegistrationRestrictionSettingSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = RegistrationRestrictionSetting
|
||||
fields = ['is_restriction_enabled', 'require_admin_approval']
|
||||
Reference in New Issue
Block a user