You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
# Copyright (C) 2020 Intel Corporation
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
|
|
from rest_framework import serializers
|
|
from django.conf import settings
|
|
|
|
from cvat.apps.authentication.serializers import RegisterSerializerEx
|
|
|
|
class UserAgreementSerializer(serializers.Serializer):
|
|
name = serializers.CharField(max_length=256)
|
|
display_text = serializers.CharField(max_length=2048, default='')
|
|
url = serializers.CharField(max_length=2048, default='')
|
|
required = serializers.BooleanField(default=False)
|
|
value = serializers.BooleanField(default=False)
|
|
|
|
# pylint: disable=no-self-use
|
|
def to_representation(self, instance):
|
|
instance_ = instance.copy()
|
|
instance_['displayText'] = instance_.pop('display_text')
|
|
return instance_
|
|
|
|
class RestrictedRegisterSerializer(RegisterSerializerEx):
|
|
confirmations = UserAgreementSerializer(many=True, required=False)
|
|
|
|
def validate(self, data):
|
|
validated_data = super().validate(data)
|
|
server_user_agreements = settings.RESTRICTIONS['user_agreements']
|
|
for server_agreement in server_user_agreements:
|
|
if server_agreement['required']:
|
|
is_confirmed = False
|
|
for confirmation in validated_data['confirmations']:
|
|
if confirmation['name'] == server_agreement['name'] \
|
|
and confirmation['value']:
|
|
is_confirmed = True
|
|
|
|
if not is_confirmed:
|
|
raise serializers.ValidationError(
|
|
'Agreement {} must be accepted'.format(server_agreement['name'])
|
|
)
|
|
|
|
return validated_data
|