api/serializers/privaterelay.py (92 lines of code) (raw):

"""API serializers for api/views/privaterelay.py""" from django.contrib.auth.models import User from rest_framework import serializers from waffle import get_waffle_flag_model from privaterelay.models import Profile from . import StrictReadOnlyFieldsMixin class ProfileSerializer(StrictReadOnlyFieldsMixin, serializers.ModelSerializer): class Meta: model = Profile fields = [ "id", "server_storage", "store_phone_log", "subdomain", "has_premium", "has_phone", "has_vpn", "onboarding_state", "onboarding_free_state", "date_phone_registered", "date_subscribed", "avatar", "next_email_try", "bounce_status", "api_token", "emails_blocked", "emails_forwarded", "emails_replied", "level_one_trackers_blocked", "remove_level_one_email_trackers", "total_masks", "at_mask_limit", "metrics_enabled", ] read_only_fields = [ "id", "subdomain", "has_premium", "has_phone", "has_vpn", "date_phone_registered", "date_subscribed", "avatar", "next_email_try", "bounce_status", "api_token", "emails_blocked", "emails_forwarded", "emails_replied", "level_one_trackers_blocked", "total_masks", "at_mask_limit", "metrics_enabled", ] class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ["email"] read_only_fields = ["email"] class FlagSerializer(serializers.ModelSerializer): class Meta: model = get_waffle_flag_model() fields = [ "id", "name", "everyone", "note", ] read_only_fields = [ "id", ] def validate_everyone(self, value): """ Turn False into None. This disables the flag for most, but allows users and groups to still have the flag. Setting the flag to False would also disable the flag for those users. """ if value: return True return None def validate(self, data): if (data.get("name", "").lower() == "manage_flags") or ( hasattr(self, "instance") and getattr(self.instance, "name", "").lower() == "manage_flags" ): raise serializers.ValidationError( "Changing the `manage_flags` flag is not allowed." ) return super().validate(data) class WebcompatIssueSerializer(serializers.Serializer): issue_on_domain = serializers.URLField( max_length=200, min_length=None, allow_blank=False ) user_agent = serializers.CharField(required=False, default="", allow_blank=True) email_mask_not_accepted = serializers.BooleanField(required=False, default=False) add_on_visual_issue = serializers.BooleanField(required=False, default=False) email_not_received = serializers.BooleanField(required=False, default=False) other_issue = serializers.CharField(required=False, default="", allow_blank=True)