From 74c661247a2b8717a2fea8a9b97381f493a808d3 Mon Sep 17 00:00:00 2001 From: nannan00 <17491932+nannan00@users.noreply.github.com> Date: Tue, 21 Nov 2023 09:41:25 +0800 Subject: [PATCH 1/4] feat: minor --- src/bk-user/bkuser/apis/login/views.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/bk-user/bkuser/apis/login/views.py b/src/bk-user/bkuser/apis/login/views.py index f98cf3540..c0b01385e 100644 --- a/src/bk-user/bkuser/apis/login/views.py +++ b/src/bk-user/bkuser/apis/login/views.py @@ -99,7 +99,11 @@ class IdpListApi(LoginApiAccessControlMixin, generics.ListAPIView): serializer_class = IdpListOutputSLZ def get_queryset(self): - return Idp.objects.filter(owner_tenant_id=self.kwargs["tenant_id"]).select_related("plugin") + return ( + Idp.objects.filter(owner_tenant_id=self.kwargs["tenant_id"]) + .select_related("plugin") + .order_by("created_at") + ) class IdpRetrieveApi(LoginApiAccessControlMixin, generics.RetrieveAPIView): From 997b7e73fcf80572981ee8e4a12675a246bafb8b Mon Sep 17 00:00:00 2001 From: nannan00 <17491932+nannan00@users.noreply.github.com> Date: Tue, 21 Nov 2023 10:02:46 +0800 Subject: [PATCH 2/4] feat: add idp source field name validate --- src/bk-user/bkuser/apis/web/idp/serializers.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/bk-user/bkuser/apis/web/idp/serializers.py b/src/bk-user/bkuser/apis/web/idp/serializers.py index 0086f90a4..7edceb6da 100644 --- a/src/bk-user/bkuser/apis/web/idp/serializers.py +++ b/src/bk-user/bkuser/apis/web/idp/serializers.py @@ -8,6 +8,7 @@ an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ +import re from typing import Any, Dict, List from django.utils.translation import gettext_lazy as _ @@ -75,8 +76,21 @@ def _validate_duplicate_idp_name(name: str, tenant_id: str, idp_id: str = "") -> return name +SOURCE_FIELD_REGEX = re.compile(r"^[a-zA-Z][a-zA-Z0-9_-]{1,30}[a-zA-Z0-9]$") + + +def _validate_source_field(value): + """校验认证源字段命名规则""" + if not re.fullmatch(SOURCE_FIELD_REGEX, value): + raise ValidationError( + _( + "{} 不符合认证源字段的命名规范: 由3-32位字母、数字、下划线(_)、连接符(-)字符组成,以字母开头并以字母或数字结尾" # noqa: E501 + ).format(value), + ) + + class FieldCompareRuleSLZ(serializers.Serializer): - source_field = serializers.CharField(help_text="认证源原始字段") + source_field = serializers.CharField(help_text="认证源原始字段", validators=[_validate_source_field]) target_field = serializers.CharField(help_text="匹配的数据源字段") From 82a5d6d9885edbb0097e34daaa36ddd277d89a07 Mon Sep 17 00:00:00 2001 From: nannan00 <17491932+nannan00@users.noreply.github.com> Date: Tue, 21 Nov 2023 10:16:23 +0800 Subject: [PATCH 3/4] feat: update idp / idp plugin / data_source plugin order by created_at meta --- src/bk-user/bkuser/apis/login/views.py | 6 +----- src/bk-user/bkuser/apps/data_source/models.py | 3 +++ src/bk-user/bkuser/apps/idp/models.py | 4 ++++ 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/bk-user/bkuser/apis/login/views.py b/src/bk-user/bkuser/apis/login/views.py index c0b01385e..f98cf3540 100644 --- a/src/bk-user/bkuser/apis/login/views.py +++ b/src/bk-user/bkuser/apis/login/views.py @@ -99,11 +99,7 @@ class IdpListApi(LoginApiAccessControlMixin, generics.ListAPIView): serializer_class = IdpListOutputSLZ def get_queryset(self): - return ( - Idp.objects.filter(owner_tenant_id=self.kwargs["tenant_id"]) - .select_related("plugin") - .order_by("created_at") - ) + return Idp.objects.filter(owner_tenant_id=self.kwargs["tenant_id"]).select_related("plugin") class IdpRetrieveApi(LoginApiAccessControlMixin, generics.RetrieveAPIView): diff --git a/src/bk-user/bkuser/apps/data_source/models.py b/src/bk-user/bkuser/apps/data_source/models.py index 926e9bde6..c48bf9dda 100644 --- a/src/bk-user/bkuser/apps/data_source/models.py +++ b/src/bk-user/bkuser/apps/data_source/models.py @@ -35,6 +35,9 @@ class DataSourcePlugin(models.Model): description = models.TextField("描述", default="", blank=True) logo = models.TextField("Logo", null=True, blank=True, default="") + class Meta: + ordering = ["created_at"] + class DataSourceManager(models.Manager): """数据源管理器类""" diff --git a/src/bk-user/bkuser/apps/idp/models.py b/src/bk-user/bkuser/apps/idp/models.py index 9d3472e7c..cbe9fd173 100644 --- a/src/bk-user/bkuser/apps/idp/models.py +++ b/src/bk-user/bkuser/apps/idp/models.py @@ -31,6 +31,9 @@ class IdpPlugin(models.Model): description = models.TextField("描述", default="", blank=True) logo = models.TextField("Logo", null=True, blank=True, default="") + class Meta: + ordering = ["created_at"] + class Idp(AuditedModel): """认证源""" @@ -49,6 +52,7 @@ class Idp(AuditedModel): allow_bind_scopes = models.JSONField("允许范围", default=list) class Meta: + ordering = ["created_at"] unique_together = [ ("name", "owner_tenant_id"), ] From a1631fd31dccf56cf5c2ab6ac98dfea936ffc4ff Mon Sep 17 00:00:00 2001 From: nannan00 <17491932+nannan00@users.noreply.github.com> Date: Tue, 21 Nov 2023 10:26:30 +0800 Subject: [PATCH 4/4] fix: minor --- src/bk-user/bkuser/apps/data_source/models.py | 3 --- src/bk-user/bkuser/apps/idp/models.py | 3 --- 2 files changed, 6 deletions(-) diff --git a/src/bk-user/bkuser/apps/data_source/models.py b/src/bk-user/bkuser/apps/data_source/models.py index c48bf9dda..926e9bde6 100644 --- a/src/bk-user/bkuser/apps/data_source/models.py +++ b/src/bk-user/bkuser/apps/data_source/models.py @@ -35,9 +35,6 @@ class DataSourcePlugin(models.Model): description = models.TextField("描述", default="", blank=True) logo = models.TextField("Logo", null=True, blank=True, default="") - class Meta: - ordering = ["created_at"] - class DataSourceManager(models.Manager): """数据源管理器类""" diff --git a/src/bk-user/bkuser/apps/idp/models.py b/src/bk-user/bkuser/apps/idp/models.py index cbe9fd173..0ac673449 100644 --- a/src/bk-user/bkuser/apps/idp/models.py +++ b/src/bk-user/bkuser/apps/idp/models.py @@ -31,9 +31,6 @@ class IdpPlugin(models.Model): description = models.TextField("描述", default="", blank=True) logo = models.TextField("Logo", null=True, blank=True, default="") - class Meta: - ordering = ["created_at"] - class Idp(AuditedModel): """认证源"""