예제 #1
0
class TicketSerializer(serializers.ModelSerializer):
    serial_no = serializers.CharField(max_length=32)
    remark = serializers.CharField(required=False, allow_blank=True, allow_null=True, max_length=1024)
    author_id = serializers.IntegerField(default=serializers.CreateOnlyDefault(CurrentUserDefault()))
    author = serializers.StringRelatedField(read_only=True)
    
    itinerary = ItinerarySerializer(read_only=True, many=False)
    itinerary_id = serializers.IntegerField(required=True)
    
    # messages = MessageSerializer(read_only=True, many=True)
    messages = serializers.SerializerMethodField()
    comments = CommentSerializer(read_only=True, many=True)
    uploads = UpLoadSerializer(read_only=True, many=True) 
    
    parent_id = serializers.IntegerField(required=False, allow_null=True)

    class Meta:
        model = models.Ticket
        fields = '__all__'

    def get_fields(self):
        fields = super(TicketSerializer, self).get_fields()
        fields['children'] = TicketSerializer(many=True, read_only=True)
        return fields 

    def get_messages(self, obj):
        query = obj.messages.filter(user_id=self.context['request'].user.id)
        serializer = MessageSerializer(instance=query, many=True)
        return serializer.data
예제 #2
0
class FormSerializer(serializers.Serializer):
    slug = serializers.CharField(max_length=20)
    name = serializers.CharField(max_length=5000)
    description = serializers.CharField(max_length=5000)
    time = serializers.CharField(max_length=5000)
    question_amount = serializers.IntegerField()
    answer_amount = serializers.IntegerField()
    subject = serializers.CharField(max_length=5000)
    date = serializers.CharField(max_length=50)
    answers = serializers.CharField(max_length=5000000)
예제 #3
0
class BookingSerializer(serializers.ModelSerializer):

    title = serializers.CharField(max_length=64)
    remark = serializers.CharField(required=False, allow_blank=True, allow_null=True, max_length=1024)
    author = serializers.StringRelatedField(read_only=True)
    author_id = serializers.IntegerField(default=serializers.CreateOnlyDefault(CurrentUserDefault()))

    # messages = MessageSerializer(read_only=True, many=True)
    messages = serializers.SerializerMethodField()
    comments = CommentSerializer(read_only=True, many=True)
    uploads = UpLoadSerializer(read_only=True, many=True)
    itineraries = serializers.SerializerMethodField()
    
    class Meta:
        model = models.Booking
        fields = '__all__'

    def get_itineraries(self, obj):
        query = None
        if self.context['request'].user.has_perm('ticket.view_itinerary'):
            query = obj.itineraries.all()
        else:
            query = obj.itineraries.filter(user_id=self.context['request'].user.id)

        serializer = ItinerarySerializer(instance=query, many=True)

        return serializer.data

    def get_messages(self, obj):
        query = obj.messages.filter(user_id=self.context['request'].user.id)
        serializer = MessageSerializer(instance=query, many=True)
        return serializer.data
예제 #4
0
class UserModel(models.Model):
    username = serializers.CharField(required=False, allow_blank=True)
    email = serializers.EmailField(required=False, allow_blank=True)
    first_name = serializers.CharField(required=True, write_only=True)
    last_name = serializers.CharField(required=True, write_only=True)
    phone = serializers.IntegerField()
    jobIds = serializers.CharField(max_length=10000, allow_blank=True)
예제 #5
0
class MessageSerializer(serializers.ModelSerializer):

    content_type = ContentTypeField()

    user = UserListSerializer(read_only=True, many=False)

    user_id = serializers.IntegerField(default=serializers.CreateOnlyDefault(CurrentUserDefault()))

    class Meta:
        model = models.Message
        fields = '__all__'
예제 #6
0
class JSONWebTokenBasicAuthSerializer(BaseJSONWebTokenAuthSerializer):
    """
    Validate a username and password. Returns a JSON web token that can be
    used to authenticate later calls.
    """

    payload = serializers.JSONField(read_only=True)
    refresh_expires_in = serializers.IntegerField(read_only=True)

    @property
    def username_field(self) -> str:
        return User.USERNAME_FIELD

    def __init__(self, *args, **kwargs):
        """
        Dynamically add the username field to self.fields.
        """
        super().__init__(self, *args, **kwargs)

        self.fields[self.username_field] = serializers.CharField(
            write_only=True)
        self.fields["password"] = serializers.CharField(
            write_only=True, style={"input_type": "password"})

    def validate(self, attrs):
        credentials = {
            self.username_field: attrs[self.username_field],
            "password": attrs["password"],
        }

        if attrs[self.username_field] and attrs["password"]:
            user = authenticate(**credentials)

            if user:
                if not user.is_active:
                    raise serializers.ValidationError(
                        _("User account is disabled."))

                payload = jwt_payload_handler(user)
                refresh_expires_in = (
                    payload["origIat"] +
                    jwt_settings.JWT_REFRESH_EXPIRATION_DELTA.total_seconds())

                return {
                    "token": jwt_encode_handler(payload),
                    "payload": payload,
                    "refresh_expires_in": refresh_expires_in,
                }
            raise serializers.ValidationError(
                _("Please enter valid credentials"))
        else:
            raise serializers.ValidationError(
                _(f'Must include "{self.username_field}" and "password".'))
예제 #7
0
class ItinerarySerializer(serializers.ModelSerializer):
    serial_no = serializers.CharField(max_length=32)
    remark = serializers.CharField(required=False, allow_blank=True, allow_null=True, max_length=1024)
    author_id = serializers.IntegerField(default=serializers.CreateOnlyDefault(CurrentUserDefault()))
    booking_id = serializers.IntegerField(required=True)
    ticket = serializers.StringRelatedField(read_only=True)
    
    author = serializers.StringRelatedField(read_only=True)

    class Meta:
        model = models.Itinerary
        fields = '__all__'

    def validate(self, validate_data):
        email = validate_data.get('email', None)

        if email:
            try:
                user = UserModel.objects.get(email=email)
                validate_data['user_id'] = user.id
            except UserModel.DoesNotExist:
                raise serializers.ValidationError({'email': 'No user for such email'})

        return validate_data

    def create(self, validated_data):
        if not self.context['request'].user.has_perm('ticket.lock_itinerary'):
            validated_data['is_lock'] = True
        
        return super().create(validated_data)

    def update(self, instance, validated_data):
        if not self.context['request'].user.has_perm('ticket.lock_itinerary'):
            validated_data.pop('is_lock', None)

        return super().update(instance, validated_data)
예제 #8
0
class CommentSerializer(serializers.ModelSerializer):

    content_type = ContentTypeField()

    user = UserListSerializer(read_only=True, many=False)

    user_id = serializers.IntegerField(default=serializers.CreateOnlyDefault(CurrentUserDefault()))

    children = serializers.SerializerMethodField()

    class Meta:
        model = models.Comment
        fields = '__all__'

    def get_children(self, obj):
        queryset = models.Comment.objects.filter(object_id=obj.id, content_type__model='comment')
        serializers = CommentSerializer(queryset, many=True, context=self.context)
        return serializers.data
예제 #9
0
class UpLoadSerializer(serializers.ModelSerializer):

    content_type = ContentTypeField()

    author_id = serializers.IntegerField(default=serializers.CreateOnlyDefault(CurrentUserDefault()))

    name = serializers.SerializerMethodField()

    url = serializers.SerializerMethodField()

    class Meta:
        model = models.UpLoad
        fields = '__all__'

    def get_name(self, obj):
        if obj.file is not None and obj.file != '':
            return str(obj.file).split("/")[-1]

    def get_url(self, obj):
        if obj.file is not None and obj.file != '':
            return self.context['request'].build_absolute_uri(obj.file.url)
예제 #10
0
class RefreshJSONWebTokenSerializer(serializers.Serializer):
    token = serializers.CharField()
    payload = serializers.JSONField(read_only=True)
    refresh_expires_in = serializers.IntegerField(read_only=True)

    def validate(self, attrs):
        # Get and check payload
        try:
            payload = get_payload(attrs["token"])
        except (JSONWebTokenExpired, JSONWebTokenError) as e:
            raise serializers.ValidationError(str(e))

        # Get and check user by payload
        try:
            user = get_user_by_payload(payload)
        except JSONWebTokenError as e:
            raise serializers.ValidationError(str(e))
        # Get and check "origIat"
        orig_iat = payload.get("origIat")

        if not orig_iat:
            raise serializers.ValidationError(_("origIat field is required"))

        if jwt_refresh_expired_handler(orig_iat):
            raise serializers.ValidationError(_("Refresh has expired"))

        new_payload = jwt_payload_handler(user)
        new_payload["origIat"] = orig_iat
        refresh_expires_in = (
            orig_iat +
            jwt_settings.JWT_REFRESH_EXPIRATION_DELTA.total_seconds())
        token = jwt_encode_handler(new_payload)

        return {
            "token": token,
            "payload": new_payload,
            "refresh_expires_in": refresh_expires_in,
        }