package com.hqyg.disjob.register.auth.node;
import java.util.ArrayList;
import java.util.List;
import org.apache.curator.framework.AuthInfo;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.utils.ZKPaths;
import com.hqyg.disjob.register.auth.AuthConstants;
import com.hqyg.disjob.register.auth.AuthUtil;
import com.hqyg.disjob.register.auth.EjobAuthInfo;
import com.hqyg.disjob.register.repository.ZnodeApi;
import com.hqyg.disjob.register.repository.ZnodeApiCuratorImpl;
public class UserAuthNode {
String username;
ZnodeApi znode = new ZnodeApiCuratorImpl();
private CuratorFramework client;
public UserAuthNode(String zkhost, String username) {
this.username = username;
client = AuthUtil.getClient(zkhost);
}
public UserAuthNode(CuratorFramework client, String username) {
this.username = username;
this.client = client;
}
public List<AuthInfo> getAuthInfos(){
List<AuthInfo> authInfolist = new ArrayList<>();
switch (username) {
case "admin":
authInfolist.add(new EjobAuthInfo(znode.getByteData(client, AuthConstants.adminRootPath)));
break;
case "visitor":
authInfolist.add(new EjobAuthInfo(znode.getByteData(client, AuthConstants.visitorRootPath)));
break;
default:
String userAuthPath = AuthConstants.userRootPath + "/" + username;
if(znode.checkExists(client, userAuthPath)){
List<String> groups = znode.getChildren(client, userAuthPath);
for(String group : groups){
String groupPath = userAuthPath + "/" + group;
List<String> authTypes = znode.getChildren(client, groupPath);
for(String authType : authTypes){
String authAccountPath = ZKPaths.makePath(AuthConstants.groupRootPath, group, authType);
authInfolist.add(new EjobAuthInfo(znode.getByteData(client, authAccountPath)));
}
}
}
break;
}
AuthUtil.closeClient(client);
return authInfolist ;
}
/**
* 取出用户 在 jobgroup 下的权限信息 [reader, owner]
* @param jobgroup
* @return
*/
public boolean[] getAuthInfo(String jobgroup){
boolean[] res = new boolean[]{false,false};
String readerPath = ZKPaths.makePath(AuthConstants.userRootPath, username, jobgroup, AuthConstants.READER);
String ownerPath = ZKPaths.makePath(AuthConstants.userRootPath, username, jobgroup, AuthConstants.OWNER);
res[0] = znode.checkExists(client, readerPath);
res[1] = znode.checkExists(client, ownerPath);
return res;
}
}