All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m13s
- IP138 在线 API + ip2region 离线库双通道归属地解析,60 秒熔断降级 - 5 条异常检测规则:地区不对/不可能旅行/频繁登录/团队遍地开花/海外IP太杂 - 飞书 interactive 卡片告警(红色严重/橙色警告),含辅助指标 - R2 自动封禁用户、R4 自动封禁团队,封禁即踢下线 - 系统设置页全局配置 + 团队详情页独立阈值覆盖 - 安全日志页面 + 管理员修改密码入口 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
111 lines
6.1 KiB
Python
111 lines
6.1 KiB
Python
from rest_framework import serializers
|
|
|
|
|
|
class VideoGenerateSerializer(serializers.Serializer):
|
|
prompt = serializers.CharField(required=False, allow_blank=True, default='')
|
|
mode = serializers.ChoiceField(choices=['universal', 'keyframe'])
|
|
model = serializers.ChoiceField(choices=['seedance_2.0', 'seedance_2.0_fast'])
|
|
aspect_ratio = serializers.CharField(max_length=10)
|
|
duration = serializers.IntegerField()
|
|
references = serializers.ListField(child=serializers.DictField(), required=False, default=list)
|
|
|
|
|
|
class QuotaUpdateSerializer(serializers.Serializer):
|
|
daily_seconds_limit = serializers.IntegerField(min_value=-1)
|
|
monthly_seconds_limit = serializers.IntegerField(min_value=-1)
|
|
|
|
|
|
class UserStatusSerializer(serializers.Serializer):
|
|
is_active = serializers.BooleanField()
|
|
|
|
|
|
class AdminCreateUserSerializer(serializers.Serializer):
|
|
username = serializers.CharField(max_length=150)
|
|
email = serializers.EmailField()
|
|
password = serializers.CharField(min_length=6)
|
|
daily_seconds_limit = serializers.IntegerField(min_value=-1, required=False, default=600)
|
|
monthly_seconds_limit = serializers.IntegerField(min_value=-1, required=False, default=6000)
|
|
is_staff = serializers.BooleanField(required=False, default=False)
|
|
|
|
|
|
class SystemSettingsSerializer(serializers.Serializer):
|
|
default_daily_seconds_limit = serializers.IntegerField(min_value=0)
|
|
default_monthly_seconds_limit = serializers.IntegerField(min_value=0)
|
|
announcement = serializers.CharField(required=False, allow_blank=True, default='')
|
|
announcement_enabled = serializers.BooleanField(required=False, default=False)
|
|
max_desktop_sessions = serializers.IntegerField(min_value=1, required=False, default=1)
|
|
max_mobile_sessions = serializers.IntegerField(min_value=0, required=False, default=0)
|
|
# 异常检测配置
|
|
anomaly_detection_enabled = serializers.BooleanField(required=False, default=False)
|
|
r1_enabled_default = serializers.BooleanField(required=False, default=True)
|
|
r2_enabled_default = serializers.BooleanField(required=False, default=True)
|
|
r2_window_seconds = serializers.IntegerField(min_value=60, required=False, default=3600)
|
|
r3_enabled_default = serializers.BooleanField(required=False, default=True)
|
|
r3_window_seconds = serializers.IntegerField(min_value=60, required=False, default=3600)
|
|
r3_max_count = serializers.IntegerField(min_value=1, required=False, default=10)
|
|
r4_enabled_default = serializers.BooleanField(required=False, default=True)
|
|
r4_window_seconds = serializers.IntegerField(min_value=60, required=False, default=3600)
|
|
r4_city_count = serializers.IntegerField(min_value=1, required=False, default=5)
|
|
r5_enabled_default = serializers.BooleanField(required=False, default=True)
|
|
r5_days = serializers.IntegerField(min_value=1, required=False, default=7)
|
|
r5_country_count = serializers.IntegerField(min_value=1, required=False, default=10)
|
|
feishu_alert_mobiles = serializers.CharField(required=False, allow_blank=True, default='')
|
|
sms_alert_mobiles = serializers.CharField(required=False, allow_blank=True, default='')
|
|
alert_cooldown_seconds = serializers.IntegerField(min_value=0, required=False, default=1800)
|
|
|
|
|
|
# ── Team serializers ──
|
|
|
|
class TeamCreateSerializer(serializers.Serializer):
|
|
name = serializers.CharField(max_length=100)
|
|
monthly_seconds_limit = serializers.IntegerField(min_value=0, required=False, default=6000)
|
|
daily_member_limit_default = serializers.IntegerField(min_value=0, required=False, default=600)
|
|
expected_regions = serializers.CharField(max_length=500, required=True)
|
|
|
|
|
|
class TeamUpdateSerializer(serializers.Serializer):
|
|
name = serializers.CharField(max_length=100, required=False)
|
|
monthly_seconds_limit = serializers.IntegerField(min_value=0, required=False)
|
|
daily_member_limit_default = serializers.IntegerField(min_value=0, required=False)
|
|
is_active = serializers.BooleanField(required=False)
|
|
expected_regions = serializers.CharField(max_length=500, required=False, allow_blank=True)
|
|
|
|
|
|
class TeamAnomalyConfigSerializer(serializers.Serializer):
|
|
r1_enabled = serializers.BooleanField(required=False, allow_null=True, default=None)
|
|
r2_enabled = serializers.BooleanField(required=False, allow_null=True, default=None)
|
|
r2_window_seconds = serializers.IntegerField(min_value=60, required=False, allow_null=True, default=None)
|
|
r3_enabled = serializers.BooleanField(required=False, allow_null=True, default=None)
|
|
r3_window_seconds = serializers.IntegerField(min_value=60, required=False, allow_null=True, default=None)
|
|
r3_max_count = serializers.IntegerField(min_value=1, required=False, allow_null=True, default=None)
|
|
r4_enabled = serializers.BooleanField(required=False, allow_null=True, default=None)
|
|
r4_window_seconds = serializers.IntegerField(min_value=60, required=False, allow_null=True, default=None)
|
|
r4_city_count = serializers.IntegerField(min_value=1, required=False, allow_null=True, default=None)
|
|
r5_enabled = serializers.BooleanField(required=False, allow_null=True, default=None)
|
|
r5_days = serializers.IntegerField(min_value=1, required=False, allow_null=True, default=None)
|
|
r5_country_count = serializers.IntegerField(min_value=1, required=False, allow_null=True, default=None)
|
|
|
|
|
|
class TeamTopUpSerializer(serializers.Serializer):
|
|
seconds = serializers.IntegerField(min_value=1)
|
|
|
|
|
|
class TeamAdminCreateSerializer(serializers.Serializer):
|
|
"""Create a team admin account for a specific team."""
|
|
username = serializers.CharField(max_length=150)
|
|
email = serializers.EmailField()
|
|
password = serializers.CharField(min_length=6)
|
|
|
|
|
|
class TeamMemberCreateSerializer(serializers.Serializer):
|
|
"""Team admin creates a member."""
|
|
username = serializers.CharField(max_length=150)
|
|
password = serializers.CharField(min_length=6)
|
|
daily_seconds_limit = serializers.IntegerField(min_value=-1, required=False)
|
|
monthly_seconds_limit = serializers.IntegerField(min_value=-1, required=False)
|
|
|
|
|
|
class MemberQuotaSerializer(serializers.Serializer):
|
|
daily_seconds_limit = serializers.IntegerField(min_value=-1)
|
|
monthly_seconds_limit = serializers.IntegerField(min_value=-1)
|