Skip to content
This repository was archived by the owner on Jan 9, 2024. It is now read-only.

Commit a55022e

Browse files
committed
support digest ACL
1 parent fe382e9 commit a55022e

File tree

7 files changed

+72
-8
lines changed

7 files changed

+72
-8
lines changed

src/main/java/cc/cc1234/main/cache/CuratorCache.java

+2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public static Optional<TreeCache> getTreeCache(String host) {
3838
public static void close(String host) {
3939
getTreeCache(host).ifPresent(TreeCache::close);
4040
getClientOption(host).ifPresent(CuratorFramework::close);
41+
curatorClientCache.remove(host);
42+
curatorTreeCache.remove(host);
4143
}
4244

4345
public static void closeAll() {

src/main/java/cc/cc1234/main/cache/TreeItemCache.java

+3
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,7 @@ public void remove(String server, String path) {
4343
treeItemCache.get(server).remove(path);
4444
}
4545

46+
public void remove(String server) {
47+
treeItemCache.remove(server);
48+
}
4649
}

src/main/java/cc/cc1234/main/context/ApplicationContext.java

+10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package cc.cc1234.main.context;
22

3+
import cc.cc1234.main.cache.CuratorCache;
4+
import cc.cc1234.main.cache.TreeItemCache;
35
import javafx.stage.Stage;
46

57
import java.util.Map;
@@ -35,4 +37,12 @@ public Stage getPrimaryStage() {
3537
public void setPrimaryStage(Stage primaryStage) {
3638
this.primaryStage = primaryStage;
3739
}
40+
41+
public static void close(String host) {
42+
CuratorCache.close(host);
43+
if (host.equals(ActiveServerContext.get())) {
44+
ActiveServerContext.invalidate();
45+
}
46+
TreeItemCache.getInstance().remove(host);
47+
}
3848
}

src/main/java/cc/cc1234/main/service/ZkNodeService.java

+28-3
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,26 @@
44
import cc.cc1234.main.context.ActiveServerContext;
55
import cc.cc1234.main.listener.TreeNodeListener;
66
import cc.cc1234.main.model.ZkServerConfig;
7+
import cc.cc1234.main.util.ACLs;
8+
import org.apache.curator.framework.AuthInfo;
79
import org.apache.curator.framework.CuratorFramework;
810
import org.apache.curator.framework.CuratorFrameworkFactory;
11+
import org.apache.curator.framework.api.ACLProvider;
912
import org.apache.curator.framework.api.CreateBuilder;
1013
import org.apache.curator.framework.api.DeleteBuilder;
1114
import org.apache.curator.framework.recipes.cache.TreeCache;
1215
import org.apache.curator.retry.RetryOneTime;
1316
import org.apache.zookeeper.CreateMode;
17+
import org.apache.zookeeper.ZooDefs;
18+
import org.apache.zookeeper.data.ACL;
1419
import org.slf4j.Logger;
1520
import org.slf4j.LoggerFactory;
1621

22+
import java.util.List;
1723
import java.util.Optional;
1824
import java.util.concurrent.TimeUnit;
1925
import java.util.function.Consumer;
26+
import java.util.stream.Collectors;
2027

2128
public class ZkNodeService {
2229

@@ -29,11 +36,29 @@ public Optional<CuratorFramework> connectIfNecessary(ZkServerConfig config) thro
2936
return result;
3037
} else {
3138
final RetryOneTime retryPolicy = new RetryOneTime(3000);
32-
final CuratorFramework client = CuratorFrameworkFactory.builder()
39+
final CuratorFrameworkFactory.Builder builder = CuratorFrameworkFactory.builder()
3340
.connectString(config.getHost())
34-
.retryPolicy(retryPolicy)
35-
.build();
41+
.retryPolicy(retryPolicy);
42+
43+
if (!config.getAclList().isEmpty()) {
44+
final List<AuthInfo> acls = config.getAclList().stream().map(ACLs::parseDigest).collect(Collectors.toList());
45+
builder.authorization(acls)
46+
.aclProvider(new ACLProvider() {
47+
@Override
48+
public List<ACL> getDefaultAcl() {
49+
return ZooDefs.Ids.CREATOR_ALL_ACL;
50+
}
51+
52+
@Override
53+
public List<ACL> getAclForPath(String path) {
54+
return ZooDefs.Ids.CREATOR_ALL_ACL;
55+
}
56+
});
57+
}
58+
59+
final CuratorFramework client = builder.build();
3660
client.start();
61+
3762
// TODO use async
3863
if (!client.blockUntilConnected(5, TimeUnit.SECONDS)) {
3964
return Optional.empty();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package cc.cc1234.main.util;
2+
3+
import org.apache.curator.framework.AuthInfo;
4+
5+
import java.util.regex.Matcher;
6+
import java.util.regex.Pattern;
7+
8+
public class ACLs {
9+
10+
private static final Pattern DIGEST_PATTERN = Pattern.compile("(?<schema>digest)(\\:)(?<auth>.*)");
11+
12+
public static AuthInfo parseDigest(String acl) {
13+
final Matcher matcher = DIGEST_PATTERN.matcher(acl);
14+
if (!matcher.matches()) {
15+
throw new IllegalArgumentException("illegal acl String: " + acl);
16+
}
17+
return new AuthInfo(matcher.group("schema"), matcher.group("auth").getBytes());
18+
}
19+
20+
}

src/main/java/cc/cc1234/main/vo/AddServerVO.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import javafx.beans.property.StringProperty;
99

1010
import java.util.Arrays;
11+
import java.util.List;
12+
import java.util.stream.Collectors;
1113

1214
public class AddServerVO {
1315

@@ -20,7 +22,12 @@ public class AddServerVO {
2022
public void onConfirm() {
2123
final ZkServerConfig zkServerConfig = new ZkServerConfig();
2224
zkServerConfig.setHost(getHost());
23-
zkServerConfig.getAclList().addAll(Arrays.asList(Strings.nullToEmpty(acl.get()).split("\n")));
25+
if (!Strings.isNullOrEmpty(acl.get())) {
26+
final List<String> acls = Arrays.stream(acl.get().split("\n"))
27+
.filter(acl -> !Strings.isNullOrEmpty(acl))
28+
.collect(Collectors.toList());
29+
zkServerConfig.getAclList().addAll(acls);
30+
}
2431
prettyZooConfigService.add(zkServerConfig);
2532
}
2633

src/main/java/cc/cc1234/main/vo/PrettyZooConfigVO.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package cc.cc1234.main.vo;
22

3-
import cc.cc1234.main.cache.CuratorCache;
4-
import cc.cc1234.main.context.ActiveServerContext;
53
import cc.cc1234.main.context.ApplicationContext;
64
import cc.cc1234.main.model.PrettyZooConfig;
75
import cc.cc1234.main.model.ZkServerConfig;
@@ -41,8 +39,7 @@ public void remove(String host) {
4139
.collect(Collectors.toList());
4240
servers.removeAll(removeServers);
4341
prettyZooConfigService.save(toModel());
44-
ActiveServerContext.invalidate();
45-
CuratorCache.close(host);
42+
ApplicationContext.close(host);
4643
}
4744

4845
private PrettyZooConfig toModel() {

0 commit comments

Comments
 (0)