修复某些情况下泄露template的问题

This commit is contained in:
virusdefender 2017-12-19 22:15:38 +08:00
parent f70d3cac41
commit 9a3f21461a

View File

@ -90,6 +90,12 @@ class BaseProblemSerializer(serializers.ModelSerializer):
tags = serializers.SlugRelatedField(many=True, slug_field="name", read_only=True) tags = serializers.SlugRelatedField(many=True, slug_field="name", read_only=True)
created_by = UsernameSerializer() created_by = UsernameSerializer()
def get_public_template(self, obj):
ret = {}
for lang, code in obj.template.items():
ret[lang] = parse_problem_template(code)["template"]
return ret
class ProblemAdminSerializer(BaseProblemSerializer): class ProblemAdminSerializer(BaseProblemSerializer):
class Meta: class Meta:
@ -98,13 +104,7 @@ class ProblemAdminSerializer(BaseProblemSerializer):
class ProblemSerializer(BaseProblemSerializer): class ProblemSerializer(BaseProblemSerializer):
template = serializers.SerializerMethodField() template = serializers.SerializerMethodField("get_public_template")
def get_template(self, obj):
ret = {}
for lang, code in obj.template.items():
ret[lang] = parse_problem_template(code)["template"]
return ret
class Meta: class Meta:
model = Problem model = Problem
@ -113,6 +113,8 @@ class ProblemSerializer(BaseProblemSerializer):
class ProblemSafeSerializer(BaseProblemSerializer): class ProblemSafeSerializer(BaseProblemSerializer):
template = serializers.SerializerMethodField("get_public_template")
class Meta: class Meta:
model = Problem model = Problem
exclude = ("test_case_score", "test_case_id", "visible", "is_public", exclude = ("test_case_score", "test_case_id", "visible", "is_public",