mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-26 10:12:51 +00:00
feat: 应用公共访问链接添加访问限制
This commit is contained in:
parent
cc2cdff2bc
commit
a1e2d29cf4
|
|
@ -0,0 +1,29 @@
|
|||
# Generated by Django 4.1.10 on 2024-03-12 17:11
|
||||
|
||||
import django.contrib.postgres.fields
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('application', '0007_alter_application_desc'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='applicationaccesstoken',
|
||||
name='access_num',
|
||||
field=models.IntegerField(default=100, verbose_name='访问次数'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='applicationaccesstoken',
|
||||
name='white_active',
|
||||
field=models.BooleanField(default=False, verbose_name='是否开启白名单'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='applicationaccesstoken',
|
||||
name='white_list',
|
||||
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, max_length=128), default=list, size=None, verbose_name='白名单列表'),
|
||||
),
|
||||
]
|
||||
|
|
@ -8,6 +8,7 @@
|
|||
"""
|
||||
import uuid
|
||||
|
||||
from django.contrib.postgres.fields import ArrayField
|
||||
from django.db import models
|
||||
|
||||
from application.models import Application
|
||||
|
|
@ -21,6 +22,7 @@ class ApplicationApiKey(AppModelMixin):
|
|||
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户id")
|
||||
application = models.ForeignKey(Application, on_delete=models.CASCADE, verbose_name="应用id")
|
||||
is_active = models.BooleanField(default=True, verbose_name="是否开启")
|
||||
|
||||
class Meta:
|
||||
db_table = "application_api_key"
|
||||
|
||||
|
|
@ -32,6 +34,11 @@ class ApplicationAccessToken(AppModelMixin):
|
|||
application = models.OneToOneField(Application, primary_key=True, on_delete=models.CASCADE, verbose_name="应用id")
|
||||
access_token = models.CharField(max_length=128, verbose_name="用户公开访问 认证token", unique=True)
|
||||
is_active = models.BooleanField(default=True, verbose_name="是否开启公开访问")
|
||||
access_num = models.IntegerField(default=100, verbose_name="访问次数")
|
||||
white_active = models.BooleanField(default=False, verbose_name="是否开启白名单")
|
||||
white_list = ArrayField(verbose_name="白名单列表",
|
||||
base_field=models.CharField(max_length=128, blank=True)
|
||||
, default=list)
|
||||
|
||||
class Meta:
|
||||
db_table = "application_access_token"
|
||||
|
|
|
|||
|
|
@ -111,6 +111,12 @@ class ApplicationSerializer(serializers.Serializer):
|
|||
access_token_reset = serializers.BooleanField(required=False,
|
||||
error_messages=ErrMessage.boolean("重置Token"))
|
||||
is_active = serializers.BooleanField(required=False, error_messages=ErrMessage.boolean("是否开启"))
|
||||
access_num = serializers.IntegerField(required=False, error_messages=ErrMessage.integer("访问次数"))
|
||||
white_active = serializers.BooleanField(required=False, error_messages=ErrMessage.boolean("是否开启白名单"))
|
||||
white_list = serializers.ListSerializer(required=False, child=serializers.CharField(required=True,
|
||||
error_messages=ErrMessage.char(
|
||||
"白名单")),
|
||||
error_messages=ErrMessage.list("白名单列表"))
|
||||
|
||||
def edit(self, instance: Dict, with_valid=True):
|
||||
if with_valid:
|
||||
|
|
@ -124,6 +130,12 @@ class ApplicationSerializer(serializers.Serializer):
|
|||
application_access_token.is_active = instance.get("is_active")
|
||||
if 'access_token_reset' in instance and instance.get('access_token_reset'):
|
||||
application_access_token.access_token = hashlib.md5(str(uuid.uuid1()).encode()).hexdigest()[8:24]
|
||||
if 'access_num' in instance and instance.get('access_num') is not None:
|
||||
application_access_token.access_num = instance.get("access_num")
|
||||
if 'white_active' in instance and instance.get('white_active') is not None:
|
||||
application_access_token.white_active = instance.get("white_active")
|
||||
if 'white_list' in instance and instance.get('white_list') is not None:
|
||||
application_access_token.white_list = instance.get('white_list')
|
||||
application_access_token.save()
|
||||
return self.one(with_valid=False)
|
||||
|
||||
|
|
@ -141,7 +153,11 @@ class ApplicationSerializer(serializers.Serializer):
|
|||
application_access_token.save()
|
||||
return {'application_id': application_access_token.application_id,
|
||||
'access_token': application_access_token.access_token,
|
||||
"is_active": application_access_token.is_active}
|
||||
"is_active": application_access_token.is_active,
|
||||
'access_num': application_access_token.access_num,
|
||||
'white_active': application_access_token.white_active,
|
||||
'white_list': application_access_token.white_list
|
||||
}
|
||||
|
||||
class Authentication(serializers.Serializer):
|
||||
access_token = serializers.CharField(required=True, error_messages=ErrMessage.char("access_token"))
|
||||
|
|
|
|||
|
|
@ -125,7 +125,12 @@ class ApplicationApi(ApiMixin):
|
|||
description="重置Token"),
|
||||
|
||||
'is_active': openapi.Schema(type=openapi.TYPE_BOOLEAN, title="是否激活", description="是否激活"),
|
||||
|
||||
'access_num': openapi.Schema(type=openapi.TYPE_NUMBER, title="访问次数", description="访问次数"),
|
||||
'white_active': openapi.Schema(type=openapi.TYPE_BOOLEAN, title="是否开启白名单",
|
||||
description="是否开启白名单"),
|
||||
'white_list': openapi.Schema(type=openapi.TYPE_ARRAY,
|
||||
items=openapi.Schema(type=openapi.TYPE_STRING), title="白名单列表",
|
||||
description="白名单列表"),
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue