mirror of https://github.com/halo-dev/halo
refactor: do not disable when auth provider deleted (#3644)
#### What type of PR is this? /kind improvement /area core /milestone 2.4.0 #### What this PR does / why we need it: 移除 AuthProviderReconciler 中关于 authProvier 数据被删除时禁用它提供的登录方式的逻辑 当第三方登录插件如 plugin-oauth2 被停止时不应该从已启用的登录配置中移除 auth provider name,这会导致插件被停用在启用后需要重新启用登录方式。 之前之所以如此是想着去掉 system configmap 中的配置残余,虽然现在去掉了 Reconciler 但为了确保数据干净或许还得想其他办法来解决它,但目前不是重点也没有一个很好的办法,或许可以在插件中去做,比如当插件被卸载的生命周期方法中去更新 ConfigMap 中关于此项的配置。 #### Does this PR introduce a user-facing change? ```release-note None ```pull/3648/head
parent
2d56aaeb93
commit
a2d2d5443f
|
@ -1,7 +1,5 @@
|
|||
package run.halo.app.core.extension.reconciler;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
@ -22,21 +20,13 @@ import run.halo.app.security.AuthProviderService;
|
|||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class AuthProviderReconciler implements Reconciler<Reconciler.Request> {
|
||||
private static final String FINALIZER_NAME = "auth-provider-protection";
|
||||
private final ExtensionClient client;
|
||||
private final AuthProviderService authProviderService;
|
||||
|
||||
@Override
|
||||
public Result reconcile(Request request) {
|
||||
client.fetch(AuthProvider.class, request.name())
|
||||
.ifPresent(authProvider -> {
|
||||
if (authProvider.getMetadata().getDeletionTimestamp() != null) {
|
||||
removeFinalizer(request.name());
|
||||
return;
|
||||
}
|
||||
addFinalizerIfNecessary(authProvider);
|
||||
handlePrivileged(authProvider);
|
||||
});
|
||||
.ifPresent(this::handlePrivileged);
|
||||
return Result.doNotRetry();
|
||||
}
|
||||
|
||||
|
@ -53,36 +43,6 @@ public class AuthProviderReconciler implements Reconciler<Reconciler.Request> {
|
|||
}
|
||||
}
|
||||
|
||||
private void addFinalizerIfNecessary(AuthProvider oldAuthProvider) {
|
||||
Set<String> finalizers = oldAuthProvider.getMetadata().getFinalizers();
|
||||
if (finalizers != null && finalizers.contains(FINALIZER_NAME)) {
|
||||
return;
|
||||
}
|
||||
client.fetch(AuthProvider.class, oldAuthProvider.getMetadata().getName())
|
||||
.ifPresent(authProvider -> {
|
||||
Set<String> newFinalizers = authProvider.getMetadata().getFinalizers();
|
||||
if (newFinalizers == null) {
|
||||
newFinalizers = new HashSet<>();
|
||||
authProvider.getMetadata().setFinalizers(newFinalizers);
|
||||
}
|
||||
newFinalizers.add(FINALIZER_NAME);
|
||||
client.update(authProvider);
|
||||
});
|
||||
}
|
||||
|
||||
private void removeFinalizer(String authProviderName) {
|
||||
client.fetch(AuthProvider.class, authProviderName)
|
||||
.ifPresent(authProvider -> {
|
||||
// Disable auth provider
|
||||
authProviderService.disable(authProviderName).block();
|
||||
|
||||
if (authProvider.getMetadata().getFinalizers() != null) {
|
||||
authProvider.getMetadata().getFinalizers().remove(FINALIZER_NAME);
|
||||
}
|
||||
client.update(authProvider);
|
||||
});
|
||||
}
|
||||
|
||||
private boolean privileged(AuthProvider authProvider) {
|
||||
return BooleanUtils.TRUE.equals(MetadataUtil.nullSafeLabels(authProvider)
|
||||
.get(AuthProvider.PRIVILEGED_LABEL));
|
||||
|
|
Loading…
Reference in New Issue