feat: 应用 Api-key 开关
This commit is contained in:
parent
82ffcc6c94
commit
5db9ce45c3
@ -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='开场白'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -28,6 +28,7 @@ class Application(AppModelMixin):
|
|||||||
status = models.BooleanField(default=True, verbose_name="是否发布")
|
status = models.BooleanField(default=True, verbose_name="是否发布")
|
||||||
user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
|
user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
|
||||||
model = models.ForeignKey(Model, on_delete=models.DO_NOTHING, db_constraint=False)
|
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:
|
class Meta:
|
||||||
db_table = "application"
|
db_table = "application"
|
||||||
|
|||||||
@ -134,6 +134,7 @@ class ApplicationSerializer(serializers.Serializer):
|
|||||||
example = serializers.ListSerializer(required=False, child=serializers.CharField(required=True))
|
example = serializers.ListSerializer(required=False, child=serializers.CharField(required=True))
|
||||||
dataset_id_list = serializers.ListSerializer(required=False, child=serializers.UUIDField(required=True))
|
dataset_id_list = serializers.ListSerializer(required=False, child=serializers.UUIDField(required=True))
|
||||||
status = serializers.BooleanField(required=False)
|
status = serializers.BooleanField(required=False)
|
||||||
|
api_key_is_active = serializers.BooleanField(required=False)
|
||||||
|
|
||||||
def is_valid(self, *, user_id=None, raise_exception=False):
|
def is_valid(self, *, user_id=None, raise_exception=False):
|
||||||
super().is_valid(raise_exception=True)
|
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)
|
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:
|
for update_key in update_keys:
|
||||||
if update_key in instance and instance.get(update_key) is not None:
|
if update_key in instance and instance.get(update_key) is not None:
|
||||||
if update_key == 'multiple_rounds_dialogue':
|
if update_key == 'multiple_rounds_dialogue':
|
||||||
|
|||||||
@ -134,7 +134,9 @@ class ApplicationApi(ApiMixin):
|
|||||||
'dataset_id_list': openapi.Schema(type=openapi.TYPE_ARRAY,
|
'dataset_id_list': openapi.Schema(type=openapi.TYPE_ARRAY,
|
||||||
items=openapi.Schema(type=openapi.TYPE_STRING),
|
items=openapi.Schema(type=openapi.TYPE_STRING),
|
||||||
title="关联数据集Id列表", description="关联数据集Id列表"),
|
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)
|
||||||
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@ -41,6 +41,8 @@ class TokenAuth(TokenAuthentication):
|
|||||||
application_api_key = QuerySet(ApplicationApiKey).filter(secret_key=auth).first()
|
application_api_key = QuerySet(ApplicationApiKey).filter(secret_key=auth).first()
|
||||||
if application_api_key is None:
|
if application_api_key is None:
|
||||||
raise AppAuthenticationFailed(500, "secret_key 无效")
|
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,
|
permission_list = [Permission(group=Group.APPLICATION,
|
||||||
operate=Operate.USE,
|
operate=Operate.USE,
|
||||||
dynamic_tag=str(
|
dynamic_tag=str(
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user