49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
from rest_framework import serializers
|
|
|
|
from userausfall.models import TrustBridge, User
|
|
from userausfall.views import get_authenticated_user
|
|
|
|
|
|
class UserSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
model = User
|
|
fields = ["id", "trust_bridge", "url"]
|
|
|
|
|
|
class ActivateUserSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
model = User
|
|
fields = ["id", "password", "url"]
|
|
|
|
def validate(self, data):
|
|
if not hasattr(self.instance, "trust_bridge") or not self.instance.trust_bridge.is_trusted:
|
|
raise serializers.ValidationError("User has no trusted trust bridge")
|
|
return data
|
|
|
|
def validate_password(self, value):
|
|
if not self.instance.check_password(value):
|
|
raise serializers.ValidationError("Password does not match the user's password")
|
|
return value
|
|
|
|
|
|
class TrustBridgeUserSerializer(serializers.HyperlinkedModelSerializer):
|
|
class Meta:
|
|
model = User
|
|
fields = ["id", "url", "username"]
|
|
# the UniqueValidator for username prevents successful validation for existing users
|
|
extra_kwargs = {"username": {"validators": []}}
|
|
|
|
|
|
class TrustBridgeSerializer(serializers.HyperlinkedModelSerializer):
|
|
trust_giver = TrustBridgeUserSerializer()
|
|
|
|
class Meta:
|
|
model = TrustBridge
|
|
fields = ["id", "is_trusted", "trust_giver", "url"]
|
|
read_only_fields = ["is_trusted"]
|
|
|
|
def create(self, validated_data):
|
|
user = get_authenticated_user(self.context["request"])
|
|
trust_giver, _ = User.objects.get_or_create(username=validated_data["trust_giver"]["username"])
|
|
return TrustBridge.objects.create(trust_taker=user, trust_giver=trust_giver)
|