Ejemplo n.º 1
0
class UserAccountConfirmationSerializer(serializers.Serializer):
    user = serializers.PrimaryKeyRelatedField(
        queryset=models.User.objects.all(),
        pk_field=rest.HashidSerializerCharField(),
        write_only=True,
    )
    token = serializers.CharField(write_only=True)

    def validate(self, attrs):
        token = attrs["token"]
        user = attrs["user"]

        if not tokens.account_activation_token.check_token(user, token):
            raise exceptions.ValidationError(
                _("Malformed user account confirmation token"))

        return attrs

    def update(self, instance, validated_data):
        pass

    def create(self, validated_data):
        user = validated_data.pop("user")
        user.is_confirmed = True
        user.save()
        return user
Ejemplo n.º 2
0
class BuildWriteSerializer(serializers.Serializer):
    """Consume Builds submitted through the API."""

    target = serializers.PrimaryKeyRelatedField(
        queryset=projects.Target.objects.all(),
        pk_field=hashid_field.HashidSerializerCharField(
            source_field="projects.Target.id"),
    )
    number = serializers.CharField()
    version = project_common_serializers.VersionWriteSerializer()
    builder = serializers.HiddenField(
        default=accounts_serializers.CurrentBuilderAccount())
    results = TestOutcomeWriteSerializer(many=True, write_only=True)

    class Meta:  # noqa: D106
        model = builds.Build

    def create(self, validated_data: dict) -> builds.Build:
        """Create a new Build from API request."""
        try:
            validated_data[
                "version"], _ = projects.Version.objects.get_or_create(
                    **validated_data.pop("version"))
            return builds.Build.objects.create_build(**validated_data)
        except builds.RegressionDetected as e:
            raise Regression(str(e))
        except builds.Duplicate:
            raise Duplicate()

    def update(self, instance, validated_data):
        """Invalid operation."""
        raise MethodNotAllowed("update")
Ejemplo n.º 3
0
class UserSignupSerializer(serializers.ModelSerializer):
    id = rest.HashidSerializerCharField(source_field="restauth.User.id", read_only=True)
    email = serializers.EmailField(
        validators=[validators.UniqueValidator(queryset=dj_auth.get_user_model().objects.all())],
    )
    profile = UserProfileSerializer(required=False)

    class Meta:
        model = dj_auth.get_user_model()
        fields = ("id", "email", "password", "jwt_token", "profile")
        read_only_fields = ("jwt_token",)
        extra_kwargs = {"password": {"write_only": True}}

    def validate_password(self, password):
        password_validation.validate_password(password)
        return password

    def create(self, validated_data):
        user = dj_auth.get_user_model().objects.create_user(validated_data["email"], validated_data["password"],)
        models.UserProfile.objects.create(user=user, **validated_data.pop("profile", {}))

        activation_token = tokens.account_activation_token.make_token(user)
        utils.user_notification_impl("account_activation", user=user, token=activation_token)

        return user
Ejemplo n.º 4
0
class PasswordResetConfirmationSerializer(serializers.Serializer):
    user = serializers.PrimaryKeyRelatedField(
        queryset=models.User.objects.all(), pk_field=rest.HashidSerializerCharField(), write_only=True,
    )

    new_password = serializers.CharField(write_only=True, help_text=_("New password"))
    token = serializers.CharField(write_only=True, help_text=_("Token"))
    jwt_token = serializers.CharField(read_only=True, help_text=_("JWT token"))

    def validate_new_password(self, new_password):
        password_validation.validate_password(new_password)
        return new_password

    def validate(self, attrs):
        token = attrs["token"]
        user = attrs["user"]

        if not tokens.password_reset_token.check_token(user, token):
            raise exceptions.ValidationError(_("Malformed password reset token"))

        return attrs

    def update(self, instance, validated_data):
        pass

    def create(self, validated_data):
        user = validated_data.pop("user")
        new_password = validated_data.pop("new_password")
        user.set_password(new_password)
        user.save()

        return user
Ejemplo n.º 5
0
class BuilderAccountSummarySerializer(serializers.ModelSerializer):
    """Summary API representation of a CI/build service."""

    id = hashid_field.HashidSerializerCharField(
        source_field="accounts.BuilderAccount.id", read_only=True)
    statistics = BuilderStatisticsSerializer(read_only=True)

    class Meta:  # noqa: D106
        model = accounts.BuilderAccount
        fields = ("id", "name", "statistics")
Ejemplo n.º 6
0
class ProjectSummarySerializer(serializers.ModelSerializer):
    """Summary API representation for projects."""

    id = hashid_field.HashidSerializerCharField(
        source_field="projects.Target.id", read_only=True)
    url = serializers.HyperlinkedIdentityField(view_name="api:project_detail",
                                               lookup_url_kwarg="project_id")
    statistics = ProjectStatisticsSerializer(read_only=True)

    class Meta:  # noqa: D106
        model = projects.Project
        fields = ("id", "name", "url", "repo_url", "statistics")
Ejemplo n.º 7
0
class UserAccountSerializer(serializers.ModelSerializer):
    """API representation of a user account."""

    id = hashid_field.HashidSerializerCharField(
        source_field="accounts.UserAccount.id", read_only=True)
    is_administrator = serializers.BooleanField(source="is_superuser",
                                                read_only=True)

    class Meta:  # noqa: D106
        model = get_user_model()
        fields = ("id", "email", "name", "is_administrator", "build_count")
        read_only_fields = ("build_count", )
        ref_name = "UserAccount"
Ejemplo n.º 8
0
class BuildSummarySerializer(ReadOnlySerializer, serializers.ModelSerializer):
    """Summary API representation for CI builds."""

    id = hashid_field.HashidSerializerCharField(source_field="builds.Build.id")
    url = serializers.HyperlinkedIdentityField(view_name="api:build_detail", lookup_url_kwarg="build_id")
    number = serializers.CharField()
    builder = account_serializers.BuilderAccountSummarySerializer()
    version = project_common_serializers.VersionReadSerializer()
    outcome_summary = OutcomeSummarySerializer()

    class Meta:  # noqa: D106
        model = builds.Build
        fields = ("id", "url", "number", "version", "builder", "outcome_summary")
Ejemplo n.º 9
0
class TargetSummarySerializer(serializers.ModelSerializer):
    """Summary API representation for configuration targets."""

    id = hashid_field.HashidSerializerCharField(
        source_field="projects.Target.id", read_only=True)
    url = serializers.HyperlinkedIdentityField(view_name="api:target_detail",
                                               lookup_url_kwarg="target_id")

    class Meta:  # noqa: D106
        model = projects.Target
        fields = (
            "id",
            "url",
            "name",
            "python_major_version",
            "python_minor_version",
            "python_patch_version",
            "additional_details",
            "full_version",
            "python_version",
        )
        read_only_fields = ("id", )