diff --git a/README.md b/README.md index bf9817f..4157eec 100644 --- a/README.md +++ b/README.md @@ -162,9 +162,9 @@ Reverse for 'socialaccount_signup' not found. 'socialaccount_signup' is not a va 答:相应用户需要被勾选“工作人员状态”,这个选项和权限无关,仅影响界面显示。 -问:“不计分”和“已封禁”两个组别有什么区别? +问:“不计分”、“嫌疑组”和“已封禁”这三个组别有什么区别? -答:后者不能看到题目,不能做题,不能打开首页。 +答:已封禁组不能看到题目,不能做题,不能打开首页。嫌疑组可做题,分数不计入排行榜。 问:加群验证码是什么? diff --git a/frontend/management/commands/fake_data.py b/frontend/management/commands/fake_data.py index ccdeb04..16f3d66 100644 --- a/frontend/management/commands/fake_data.py +++ b/frontend/management/commands/fake_data.py @@ -156,7 +156,7 @@ def a(): can_update_profile=True, ) - groups = list(set(User.groups.keys()) - {'noscore', 'banned'}) + groups = list(set(User.groups.keys()) - {'noscore', 'banned', 'suspicious'}) for i in range(fake_users): print('user', i, end='\r') u = User.create( diff --git a/frontend/templates/admin_user.html b/frontend/templates/admin_user.html index 2872e85..e7a27a5 100644 --- a/frontend/templates/admin_user.html +++ b/frontend/templates/admin_user.html @@ -87,21 +87,9 @@

正在创建

- - -
-
- +
-
- - - -
@@ -155,9 +143,7 @@

正在创建

{{ obj.major }} {{ obj.campus }} {{ obj.aff }} - TrueFalse {{ obj.suspicious_reason }} - {{ obj.suspicious_ddl }} @@ -180,7 +166,6 @@

正在创建

}, account_pks: {}, accountlog: {}, - suspicious_ddl_input: '', }, created() { this.refresh(); @@ -207,7 +192,6 @@

正在创建

}, open(obj) { this.opened = {...obj}; - this.suspicious_ddl_input = obj.suspicious_ddl || ''; axios.post('/account/', {method: 'account_pk', user: obj.pk}) .then(({data: {value}}) => { this.$set(this.account_pks, obj.pk, value) @@ -219,17 +203,6 @@

正在创建

}, opened_save() { this.opened_disabled = true; - if (this.suspicious_ddl_input) { - let suspicious_ddl = new Date(this.suspicious_ddl_input); - if (isNaN(suspicious_ddl.valueOf())) { - alert('时间格式错误'); - this.opened_disabled = false; - return; - } - this.opened.suspicious_ddl = suspicious_ddl.toJSON(); - } else { - this.opened.suspicious_ddl = null; - } axios.post('.', {method: 'save', args: this.opened}) .then(({data: {value}}) => { this.opened = undefined; diff --git a/frontend/templates/hub.html b/frontend/templates/hub.html index 8f3cec1..17d9e1b 100644 --- a/frontend/templates/hub.html +++ b/frontend/templates/hub.html @@ -48,11 +48,10 @@ {{ new Date(announcement.time).toLocaleString() }} 查看所有公告
-
- 经裁判组检查,你的账号有以下疑似违规行为:{{ user.suspicious_reason }}。 - 你的账号将会在 {{ new Date(user.suspicious_ddl).toLocaleString() }} 之后被封禁。 +
+ 经裁判组检查,你的账号有以下疑似违规行为:{{ user.suspicious_reason }},因此取消排名资格。你仍可继续完成题目。 如果你有异议,请尽快联系 hackergame@ustclug.org, - 提供你的 Token 以及申诉理由。在封禁之前,你仍可正常参加比赛。 + 提供你的 Token 以及申诉理由。
diff --git a/frontend/templates/score.html b/frontend/templates/score.html index 335a5dc..6b8a46a 100644 --- a/frontend/templates/score.html +++ b/frontend/templates/score.html @@ -29,7 +29,7 @@

分数查询

diff --git a/server/user/interface.py b/server/user/interface.py index 39b09f0..8070a07 100644 --- a/server/user/interface.py +++ b/server/user/interface.py @@ -38,10 +38,10 @@ class User: 'display_name', 'nickname', 'name', 'sno', 'tel', 'email', 'gender', 'qq', 'website', 'school', 'grade', 'major', 'campus', 'aff', 'token', 'token_short', 'code', - 'suspicious', 'suspicious_reason', 'suspicious_ddl') + 'suspicious_reason') update_fields = ('group', 'nickname', 'name', 'sno', 'tel', 'email', 'gender', 'qq', 'website', 'school', 'grade', 'major', 'campus', - 'aff', 'suspicious', 'suspicious_reason', 'suspicious_ddl') + 'aff', 'suspicious_reason') groups = { 'noscore': '不计分', 'ustc': '中国科学技术大学', @@ -61,6 +61,7 @@ class User: 'nyist': '南阳理工学院', 'sjtu': '上海交通大学', 'other': '其他选手', + 'suspicious': '嫌疑组', 'banned': '已封禁', } # XXX: @@ -89,11 +90,12 @@ class User: 'nyist': ['nickname', 'name', 'sno', 'school', 'major', 'qq'], 'sjtu': ['nickname', 'name', 'sno'], 'other': ['nickname'], + 'suspicious': ['nickname'], 'banned': ['nickname'], } - no_board_groups = ['noscore', 'other', 'banned'] - no_code_groups = ['noscore', 'other', 'banned'] - no_score_groups = ['noscore', 'banned'] + no_board_groups = ['noscore', 'other', 'suspicious', 'banned'] + no_code_groups = ['noscore', 'other', 'suspicious', 'banned'] + no_score_groups = ['noscore', 'suspicious', 'banned'] subscribers = [] _validators = { 'group': group_validator, @@ -112,9 +114,7 @@ class User: 'major': RegexValidator(r'^.{1,15}$', '专业格式错误'), 'campus': RegexValidator(r'^.{1,15}$', '校区格式错误'), 'aff': RegexValidator(r'^.{1,100}$', '了解比赛的渠道格式错误'), - 'suspicious': lambda x: isinstance(x, bool), 'suspicious_reason': None, - 'suspicious_ddl': None, } _private_key = OpenSSL.crypto.load_privatekey( OpenSSL.crypto.FILETYPE_PEM, settings.PRIVATE_KEY) @@ -210,9 +210,7 @@ def update(self, **kwargs): except server.trigger.interface.TriggerIsOff: User.test_permission(self._context, 'user.full') if ('group' in kwargs and kwargs['group'] != self.group) or \ - ('suspicious' in kwargs and kwargs['suspicious'] != self.suspicious) or \ - ('suspicious_reason' in kwargs and kwargs['suspicious_reason'] != self.suspicious_reason) or \ - ('suspicious_ddl' in kwargs and kwargs['suspicious_ddl'] != self.suspicious_ddl): + ('suspicious_reason' in kwargs and kwargs['suspicious_reason'] != self.suspicious_reason): User.test_permission(self._context, 'user.full') if self._context.user.pk != self.pk: User.test_permission(self._context, 'user.full') @@ -226,22 +224,13 @@ def _update(self, **kwargs): for k, v in kwargs.items(): if k in {'group', 'nickname', 'name', 'sno', 'tel', 'email', 'gender', 'qq', 'website', 'school', 'grade', 'major', 'campus', - 'aff', 'suspicious_reason', 'suspicious_ddl'}: + 'aff', 'suspicious_reason'}: v = v or None try: v is None or (self._validators[k] and self._validators[k](v)) except ValidationError as e: raise WrongFormat(e.message) setattr(self._obj, k, v) - elif k in {'suspicious'}: - # non-nullable values should not be set to None like above - if v is None: - raise WrongFormat() - try: - self._validators[k] and self._validators[k](v) - except ValidationError as e: - raise WrongFormat(e.message) - setattr(self._obj, k, v) else: raise WrongArguments() self._obj.save() @@ -253,7 +242,7 @@ def _update(self, **kwargs): **{k: getattr(self._obj, k) for k in { 'user', 'group', 'nickname', 'name', 'sno', 'tel', 'email', 'gender', 'qq', 'website', 'school', 'grade', 'major', 'campus', - 'aff', 'token', 'suspicious', 'suspicious_reason', 'suspicious_ddl' + 'aff', 'token', 'suspicious_reason' }}, ) @@ -448,20 +437,8 @@ def code(self): token = self._obj.token return f'{self.pk}-{int(sha256(token.encode()).hexdigest(), 16)%10000:04}' - @property - def suspicious(self): - if self._context.user.pk != self.pk: - User.test_permission(self._context, 'user.full', 'user.view') - return self._obj.suspicious - @property def suspicious_reason(self): if self._context.user.pk != self.pk: User.test_permission(self._context, 'user.full', 'user.view') return self._obj.suspicious_reason - - @property - def suspicious_ddl(self): - if self._context.user.pk != self.pk: - User.test_permission(self._context, 'user.full', 'user.view') - return self._obj.suspicious_ddl diff --git a/server/user/migrations/0018_remove_user_suspicious_remove_user_suspicious_ddl_and_more.py b/server/user/migrations/0018_remove_user_suspicious_remove_user_suspicious_ddl_and_more.py new file mode 100644 index 0000000..7e12fe9 --- /dev/null +++ b/server/user/migrations/0018_remove_user_suspicious_remove_user_suspicious_ddl_and_more.py @@ -0,0 +1,29 @@ +# Generated by Django 4.2.16 on 2024-10-31 06:05 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("user", "0017_update_groups_2024"), + ] + + operations = [ + migrations.RemoveField( + model_name="user", + name="suspicious", + ), + migrations.RemoveField( + model_name="user", + name="suspicious_ddl", + ), + migrations.RemoveField( + model_name="userlog", + name="suspicious", + ), + migrations.RemoveField( + model_name="userlog", + name="suspicious_ddl", + ), + ] diff --git a/server/user/models.py b/server/user/models.py index e8a1054..c89f282 100644 --- a/server/user/models.py +++ b/server/user/models.py @@ -18,9 +18,7 @@ class User(models.Model): campus = models.TextField(null=True) aff = models.TextField(null=True) token = models.TextField() - suspicious = models.BooleanField(default=False) suspicious_reason = models.TextField(null=True) - suspicious_ddl = models.DateTimeField(null=True) class Meta: default_permissions = () @@ -66,9 +64,7 @@ class UserLog(models.Model): campus = models.TextField(null=True) aff = models.TextField(null=True) token = models.TextField() - suspicious = models.BooleanField(default=False) suspicious_reason = models.TextField(null=True) - suspicious_ddl = models.DateTimeField(null=True) class Meta: default_permissions = ()