From 5db9ce45c3dfaeb84d7dd25a9f313738586908d6 Mon Sep 17 00:00:00 2001 From: shaohuzhang1 Date: Wed, 6 Dec 2023 14:43:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=BA=94=E7=94=A8=20Api-key=20?= =?UTF-8?q?=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ..._active_alter_application_desc_and_more.py | 28 +++++++++++++++++++ apps/application/models/application.py | 1 + .../serializers/application_serializers.py | 4 ++- .../swagger_api/application_api.py | 4 ++- apps/common/auth/authenticate.py | 2 ++ 5 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 apps/application/migrations/0007_application_api_key_is_active_alter_application_desc_and_more.py diff --git a/apps/application/migrations/0007_application_api_key_is_active_alter_application_desc_and_more.py b/apps/application/migrations/0007_application_api_key_is_active_alter_application_desc_and_more.py new file mode 100644 index 000000000..b39d5cbcc --- /dev/null +++ b/apps/application/migrations/0007_application_api_key_is_active_alter_application_desc_and_more.py @@ -0,0 +1,28 @@ +# Generated by Django 4.1.10 on 2023-12-06 06:30 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('application', '0006_applicationaccesstoken_applicationapikey'), + ] + + operations = [ + migrations.AddField( + model_name='application', + name='api_key_is_active', + field=models.BooleanField(default=True, verbose_name='api_key是否可用'), + ), + migrations.AlterField( + model_name='application', + name='desc', + field=models.CharField(default='', max_length=128, verbose_name='引用描述'), + ), + migrations.AlterField( + model_name='application', + name='prologue', + field=models.CharField(default='', max_length=1024, verbose_name='开场白'), + ), + ] diff --git a/apps/application/models/application.py b/apps/application/models/application.py index 7dc728e3d..4e9c1c1d0 100644 --- a/apps/application/models/application.py +++ b/apps/application/models/application.py @@ -28,6 +28,7 @@ class Application(AppModelMixin): status = models.BooleanField(default=True, verbose_name="是否发布") user = models.ForeignKey(User, on_delete=models.DO_NOTHING) model = models.ForeignKey(Model, on_delete=models.DO_NOTHING, db_constraint=False) + api_key_is_active = models.BooleanField(verbose_name="api_key是否可用", default=True) class Meta: db_table = "application" diff --git a/apps/application/serializers/application_serializers.py b/apps/application/serializers/application_serializers.py index 96f1319b5..92a528d10 100644 --- a/apps/application/serializers/application_serializers.py +++ b/apps/application/serializers/application_serializers.py @@ -134,6 +134,7 @@ class ApplicationSerializer(serializers.Serializer): example = serializers.ListSerializer(required=False, child=serializers.CharField(required=True)) dataset_id_list = serializers.ListSerializer(required=False, child=serializers.UUIDField(required=True)) status = serializers.BooleanField(required=False) + api_key_is_active = serializers.BooleanField(required=False) def is_valid(self, *, user_id=None, raise_exception=False): super().is_valid(raise_exception=True) @@ -286,7 +287,8 @@ class ApplicationSerializer(serializers.Serializer): model = QuerySet(Model).get(id=instance.get('model_id') if 'model_id' in instance else application.model_id) - update_keys = ['name', 'desc', 'model_id', 'multiple_rounds_dialogue', 'prologue', 'example', 'status'] + update_keys = ['name', 'desc', 'model_id', 'multiple_rounds_dialogue', 'prologue', 'example', 'status', + 'api_key_is_active'] for update_key in update_keys: if update_key in instance and instance.get(update_key) is not None: if update_key == 'multiple_rounds_dialogue': diff --git a/apps/application/swagger_api/application_api.py b/apps/application/swagger_api/application_api.py index 3107f4125..13249e1cc 100644 --- a/apps/application/swagger_api/application_api.py +++ b/apps/application/swagger_api/application_api.py @@ -134,7 +134,9 @@ class ApplicationApi(ApiMixin): 'dataset_id_list': openapi.Schema(type=openapi.TYPE_ARRAY, items=openapi.Schema(type=openapi.TYPE_STRING), title="关联数据集Id列表", description="关联数据集Id列表"), - 'status': openapi.Schema(type=openapi.TYPE_BOOLEAN, title='状态', description="状态") + 'status': openapi.Schema(type=openapi.TYPE_BOOLEAN, title='状态', description="状态"), + 'api_key_is_active': openapi.Schema(type=openapi.TYPE_BOOLEAN, title='api_key是否可用', + default=True) } ) diff --git a/apps/common/auth/authenticate.py b/apps/common/auth/authenticate.py index dffc37137..74171f7dd 100644 --- a/apps/common/auth/authenticate.py +++ b/apps/common/auth/authenticate.py @@ -41,6 +41,8 @@ class TokenAuth(TokenAuthentication): application_api_key = QuerySet(ApplicationApiKey).filter(secret_key=auth).first() if application_api_key is None: raise AppAuthenticationFailed(500, "secret_key 无效") + if not application_api_key.application.api_key_is_active: + raise AppAuthenticationFailed(500, "secret_key 无效") permission_list = [Permission(group=Group.APPLICATION, operate=Operate.USE, dynamic_tag=str(