From c69bfa66204cb1439b5a2dc480a2d14f18b01688 Mon Sep 17 00:00:00 2001 From: yanghuanyu <991390114@qq.com> Date: Wed, 17 Nov 2021 12:59:20 +0800 Subject: [PATCH] add listYPKs & deleteFile --- .../bdware/server/nodecenter/FileActions.java | 99 ++++++++++++++++++- .../server/nodecenter/NodeCenterActions.java | 10 +- .../nodecenter/NodeCenterFrameHandler.java | 4 +- .../nodecenter/NodeCenterWSFrameHandler.java | 5 +- 4 files changed, 105 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/bdware/server/nodecenter/FileActions.java b/src/main/java/org/bdware/server/nodecenter/FileActions.java index 28c1536..d21abb1 100644 --- a/src/main/java/org/bdware/server/nodecenter/FileActions.java +++ b/src/main/java/org/bdware/server/nodecenter/FileActions.java @@ -15,6 +15,7 @@ import org.bdware.sc.conn.ResultCallback; import org.bdware.sc.db.CMTables; import org.bdware.sc.db.KeyValueDBUtil; import org.bdware.sc.db.TimeDBUtil; +import org.bdware.sc.util.FileUtil; import org.bdware.sc.util.JsonUtil; import org.bdware.server.action.Action; import org.bdware.server.http.HttpMethod; @@ -32,15 +33,15 @@ import static io.netty.handler.codec.http.HttpResponseStatus.OK; public class FileActions { private static final Logger LOGGER = LogManager.getLogger(FileActions.class); private static final Set TEXT_FILE_SUFFIXES = new HashSet<>(); - public NodeCenterFrameHandler controller; static Map fileMap = new HashMap<>(); static Map updateTime = new HashMap<>(); - public FileActions(NodeCenterFrameHandler nodeCenterFrameHandler) { - controller = nodeCenterFrameHandler; + static NodeCenterWSFrameHandler handler; + + public FileActions(NodeCenterWSFrameHandler nodeCenterWSFrameHandler) { + handler = nodeCenterWSFrameHandler; } - static NodeCenterWSFrameHandler handler; public static boolean isLocked(String pubKey) { String ret = KeyValueDBUtil.instance.getValue(CMTables.LockedUser.toString(), pubKey); @@ -102,7 +103,7 @@ public class FileActions { // logger.info("toVerify " + str); boolean verify = SM2Util.plainStrVerify(pubkey, str, sign); - LOGGER.info("[CMHttpHandler] upload http请求验签结果 : " + verify); + LOGGER.info("[CMHttpHandler] upload http请求验签结果 : " + verify); if (verify) { // 查permission @@ -392,4 +393,92 @@ public class FileActions { private static boolean isTextFile(String path) { return TEXT_FILE_SUFFIXES.contains(path.substring(path.lastIndexOf("."))); } + + @Action(userPermission = 0) + public void listYPKs(JsonObject args, ResultCallback resultCallback) { + Response response = new Response(); + response.action = "onListYPKs"; + response.data = "[]"; + response.responseID = args.get("requestID").getAsString(); + + ListYPKsResp resp = new ListYPKsResp(); + + String dbDir = "./NodeCenterDB"; + String project = "NC_YPKs"; + File f = new File(dbDir, project); + + if (!project.contains("..") && f.exists()) { + resp.isDir = f.isDirectory(); + if (resp.isDir) { + resp.subFiles = new ArrayList<>(); + for (File subFile : f.listFiles()) { + resp.subFiles.add(createFileItem(subFile)); + } + resp.subFiles.sort(Comparator.comparing(o -> o.name)); + } else { + if (isTextFile(f.getName())) { + resp.val = FileUtil.getFileContent(f.getAbsolutePath()); + } else { + resp.val = "unknown file type, length:" + f.length(); + } + } + response.data = JsonUtil.toJson(resp); + } + + resultCallback.onResult(JsonUtil.toJson(response)); + } + + @Action(userPermission = 0) + public void deleteFile(JsonObject args, ResultCallback resultCallback) { + Response response = new Response(); + response.action = "onDeleteFile"; + response.data = "failed"; + response.responseID = args.get("requestID").getAsString(); + boolean compiled = false, isPrivate = false; + + String parPath = "./NodeCenterDB/NC_YPKs"; + + try { + String oldFile = args.get("file").getAsString(); + + File f = new File(parPath + "/" + oldFile); + if (!oldFile.contains("..") && f.exists()) { + LOGGER.debug( + "[FileController] delete:" + + f.getAbsolutePath() + + " exists:" + + f.exists()); + f.delete(); + } + response.data = "success"; + } catch (Exception e) { + e.printStackTrace(); + } + + resultCallback.onResult(JsonUtil.toJson(response)); + } + + private FileItem createFileItem(File subFile) { + FileItem item = new FileItem(); + item.name = subFile.getName(); + if (subFile.isDirectory()) { + item.subFiles = new ArrayList<>(); + for (File f : subFile.listFiles()) { + item.subFiles.add(createFileItem(f)); + } + } + return item; + } + + static class ListYPKsResp { + public String path; + boolean isDir; + String val; + List subFiles; + } + + static class FileItem { + String name; + List subFiles; + } } diff --git a/src/main/java/org/bdware/server/nodecenter/NodeCenterActions.java b/src/main/java/org/bdware/server/nodecenter/NodeCenterActions.java index a31f75e..67af913 100644 --- a/src/main/java/org/bdware/server/nodecenter/NodeCenterActions.java +++ b/src/main/java/org/bdware/server/nodecenter/NodeCenterActions.java @@ -317,7 +317,7 @@ public class NodeCenterActions { return Role.Node.getValue(); */ // TODO fix permission bugs. - return Role.compoundValue(new String[] {"NodeManager"}); + return Role.compoundValue(new String[]{"NodeManager"}); } else { return (Role.compoundValue(ret.split(","))); @@ -477,7 +477,8 @@ public class NodeCenterActions { List contracts = JsonUtil.fromJson( json.get("contracts"), - new TypeToken>() {}.getType()); + new TypeToken>() { + }.getType()); MetaIndexAction.updateContractsIndex(contracts, rc); LOGGER.debug("update contracts: " + json.get("contracts")); int version = -1; @@ -730,7 +731,8 @@ public class NodeCenterActions { JsonUtil.fromJson( ret.result, new TypeToken< - List>>() {}.getType()); + List>>() { + }.getType()); converted.put("result", je); } catch (Exception e) { converted.put("result", ret.result); @@ -1126,7 +1128,7 @@ public class NodeCenterActions { File project = new File(filePath); String projectName = project.getName().split("_NC")[0]; - LOGGER.debug("[JJJJJJJ] " + projectName); + LOGGER.debug("[sendProject] " + projectName); Map req = new HashMap<>(); req.put("action", "receiveProject"); req.put("isPrivate", isPrivate); diff --git a/src/main/java/org/bdware/server/nodecenter/NodeCenterFrameHandler.java b/src/main/java/org/bdware/server/nodecenter/NodeCenterFrameHandler.java index 643b1e3..af9aae5 100644 --- a/src/main/java/org/bdware/server/nodecenter/NodeCenterFrameHandler.java +++ b/src/main/java/org/bdware/server/nodecenter/NodeCenterFrameHandler.java @@ -27,18 +27,16 @@ public class NodeCenterFrameHandler extends SimpleChannelInboundHandler public String pubKey; NodeCenterActions actions; MasterActions masterActions; - FileActions fileActions; ActionExecutor ae; ChannelHandlerContext ctx; public NodeCenterFrameHandler() { actions = new NodeCenterActions(this); - fileActions = new FileActions(this); MetaIndexAction.controller = this; // TODO 添加那个UnitAction. ae = new ActionExecutor( - executorService, actions, fileActions, new MetaIndexAction()) { + executorService, actions, new MetaIndexAction()) { @Override public boolean checkPermission( Action a, final JsonObject args, long permission) { diff --git a/src/main/java/org/bdware/server/nodecenter/NodeCenterWSFrameHandler.java b/src/main/java/org/bdware/server/nodecenter/NodeCenterWSFrameHandler.java index 3c3b74f..ea36ccf 100644 --- a/src/main/java/org/bdware/server/nodecenter/NodeCenterWSFrameHandler.java +++ b/src/main/java/org/bdware/server/nodecenter/NodeCenterWSFrameHandler.java @@ -29,14 +29,17 @@ public class NodeCenterWSFrameHandler extends SimpleChannelInboundHandler( - executorService, managerAction, logActions, unitActions, new MetaIndexAction(), new TracingAction()) { + executorService, managerAction, logActions, unitActions, fileActions, new MetaIndexAction(), new TracingAction()) { @Override public boolean checkPermission(Action a, JsonObject arg, long permission) { // Permission userPermission = a.userPermission();