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) => {