diff --git a/src/main/java/run/halo/app/core/extension/User.java b/src/main/java/run/halo/app/core/extension/User.java index b28a51025..fd5d661ac 100644 --- a/src/main/java/run/halo/app/core/extension/User.java +++ b/src/main/java/run/halo/app/core/extension/User.java @@ -34,6 +34,8 @@ public class User extends AbstractExtension { public static final String ROLE_NAMES_ANNO = "rbac.authorization.halo.run/role-names"; + public static final String HIDDEN_USER_LABEL = "halo.run/hidden-user"; + @Schema(required = true) private UserSpec spec; diff --git a/src/main/java/run/halo/app/core/extension/endpoint/StatsEndpoint.java b/src/main/java/run/halo/app/core/extension/endpoint/StatsEndpoint.java index 313b6a151..16507674c 100644 --- a/src/main/java/run/halo/app/core/extension/endpoint/StatsEndpoint.java +++ b/src/main/java/run/halo/app/core/extension/endpoint/StatsEndpoint.java @@ -1,5 +1,6 @@ package run.halo.app.core.extension.endpoint; +import static java.lang.Boolean.parseBoolean; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; import lombok.Data; @@ -12,6 +13,7 @@ import reactor.core.publisher.Mono; import run.halo.app.core.extension.Counter; import run.halo.app.core.extension.User; import run.halo.app.core.extension.content.Post; +import run.halo.app.extension.ExtensionUtil; import run.halo.app.extension.ReactiveExtensionClient; /** @@ -54,7 +56,11 @@ public class StatsEndpoint implements CustomEndpoint { return stats; }) .flatMap(stats -> client.list(User.class, - user -> user.getMetadata().getDeletionTimestamp() == null, + user -> { + var labels = ExtensionUtil.nullSafeLabels(user); + return user.getMetadata().getDeletionTimestamp() == null + && !parseBoolean(labels.getOrDefault(User.HIDDEN_USER_LABEL, "false")); + }, null) .count() .map(count -> { diff --git a/src/main/resources/extensions/user.yaml b/src/main/resources/extensions/user.yaml index 776b4aa07..8658a9906 100644 --- a/src/main/resources/extensions/user.yaml +++ b/src/main/resources/extensions/user.yaml @@ -2,6 +2,8 @@ apiVersion: v1alpha1 kind: User metadata: name: anonymousUser + labels: + halo.run/hidden-user: "true" finalizers: - system-protection spec: @@ -14,6 +16,8 @@ apiVersion: v1alpha1 kind: User metadata: name: ghost + labels: + halo.run/hidden-user: "true" finalizers: - system-protection spec: