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 }} |
-
  |
{{ 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 = ()