From 8ce0913c0e65bec2b3b70a3b8b931b873f2070b9 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Mon, 27 Mar 2023 16:32:12 +0800 Subject: [PATCH] perf: hide disabled auth providers in user profile (#3561) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /kind improvement /area console #### What this PR does / why we need it: 隐藏个人资料中未启用的认证方式。 #### Which issue(s) this PR fixes: Fixes #3556 #### Special notes for your reviewer: 测试方式: 1. 安装 OAuth 2 插件:https://github.com/halo-sigs/plugin-oauth2/pull/3 2. 再不做任何配置的情况下,访问已登录用户的个人资料页面,检查是否列出了认证方式。 3. 配置某个认证方式并开启,再检查是否列出了已启用的认证方式。 #### Does this PR introduce a user-facing change? ```release-note None ``` --- .../main/java/run/halo/app/core/extension/AuthProvider.java | 2 ++ .../java/run/halo/app/security/AuthProviderServiceImpl.java | 6 ++++++ .../main/java/run/halo/app/security/ListedAuthProvider.java | 2 ++ .../src/main/resources/extensions/authproviders.yaml | 1 + .../run/halo/app/security/AuthProviderServiceImplTest.java | 3 +++ .../packages/api-client/src/models/listed-auth-provider.ts | 6 ++++++ console/src/modules/system/users/UserDetail.vue | 5 ++++- 7 files changed, 24 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/run/halo/app/core/extension/AuthProvider.java b/api/src/main/java/run/halo/app/core/extension/AuthProvider.java index e3360d475..729a100ec 100644 --- a/api/src/main/java/run/halo/app/core/extension/AuthProvider.java +++ b/api/src/main/java/run/halo/app/core/extension/AuthProvider.java @@ -23,6 +23,8 @@ import run.halo.app.extension.GVK; singular = "authprovider", plural = "authproviders") public class AuthProvider extends AbstractExtension { + public static final String AUTH_BINDING_LABEL = "auth.halo.run/auth-binding"; + public static final String PRIVILEGED_LABEL = "auth.halo.run/privileged"; @Schema(requiredMode = REQUIRED) diff --git a/application/src/main/java/run/halo/app/security/AuthProviderServiceImpl.java b/application/src/main/java/run/halo/app/security/AuthProviderServiceImpl.java index e4467eaf3..42cd14f48 100644 --- a/application/src/main/java/run/halo/app/security/AuthProviderServiceImpl.java +++ b/application/src/main/java/run/halo/app/security/AuthProviderServiceImpl.java @@ -139,12 +139,18 @@ public class AuthProviderServiceImpl implements AuthProviderService { .helpPage(authProvider.getSpec().getHelpPage()) .bindingUrl(authProvider.getSpec().getBindingUrl()) .unbindingUrl(authProvider.getSpec().getUnbindUrl()) + .supportsBinding(supportsBinding(authProvider)) .isBound(false) .enabled(false) .privileged(privileged(authProvider)) .build(); } + private static boolean supportsBinding(AuthProvider authProvider) { + return BooleanUtils.TRUE.equals(MetadataUtil.nullSafeLabels(authProvider) + .get(AuthProvider.AUTH_BINDING_LABEL)); + } + private boolean privileged(AuthProvider authProvider) { return BooleanUtils.TRUE.equals(MetadataUtil.nullSafeLabels(authProvider) .get(AuthProvider.PRIVILEGED_LABEL)); diff --git a/application/src/main/java/run/halo/app/security/ListedAuthProvider.java b/application/src/main/java/run/halo/app/security/ListedAuthProvider.java index 3c2edb568..e0484ff57 100644 --- a/application/src/main/java/run/halo/app/security/ListedAuthProvider.java +++ b/application/src/main/java/run/halo/app/security/ListedAuthProvider.java @@ -39,5 +39,7 @@ public class ListedAuthProvider { Boolean enabled; + Boolean supportsBinding; + Boolean privileged; } diff --git a/application/src/main/resources/extensions/authproviders.yaml b/application/src/main/resources/extensions/authproviders.yaml index ff49d88cb..b8b4178c9 100644 --- a/application/src/main/resources/extensions/authproviders.yaml +++ b/application/src/main/resources/extensions/authproviders.yaml @@ -3,6 +3,7 @@ kind: AuthProvider metadata: name: local labels: + auth.halo.run/auth-binding: "false" auth.halo.run/privileged: "true" finalizers: - system-protection diff --git a/application/src/test/java/run/halo/app/security/AuthProviderServiceImplTest.java b/application/src/test/java/run/halo/app/security/AuthProviderServiceImplTest.java index a93673062..fe16bc663 100644 --- a/application/src/test/java/run/halo/app/security/AuthProviderServiceImplTest.java +++ b/application/src/test/java/run/halo/app/security/AuthProviderServiceImplTest.java @@ -144,6 +144,7 @@ class AuthProviderServiceImplTest { "bindingUrl": "fake-binding-url", "enabled": true, "isBound": false, + "supportsBinding": false, "privileged": false }, { "name": "gitlab", @@ -151,6 +152,7 @@ class AuthProviderServiceImplTest { "bindingUrl": "fake-binding-url", "enabled": false, "isBound": false, + "supportsBinding": false, "privileged": false },{ @@ -158,6 +160,7 @@ class AuthProviderServiceImplTest { "displayName": "gitee", "enabled": false, "isBound": false, + "supportsBinding": false, "privileged": false }] """, diff --git a/console/packages/api-client/src/models/listed-auth-provider.ts b/console/packages/api-client/src/models/listed-auth-provider.ts index fb5b1b0a8..d1398d91e 100644 --- a/console/packages/api-client/src/models/listed-auth-provider.ts +++ b/console/packages/api-client/src/models/listed-auth-provider.ts @@ -72,6 +72,12 @@ export interface ListedAuthProvider { * @memberof ListedAuthProvider */ name: string; + /** + * + * @type {boolean} + * @memberof ListedAuthProvider + */ + supportsBinding?: boolean; /** * * @type {boolean} diff --git a/console/src/modules/system/users/UserDetail.vue b/console/src/modules/system/users/UserDetail.vue index 286d15b32..3e5dadec8 100644 --- a/console/src/modules/system/users/UserDetail.vue +++ b/console/src/modules/system/users/UserDetail.vue @@ -158,7 +158,10 @@ const handleBindAuth = (authProvider: ListedAuthProvider) => {