X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Flibrary%2FRemoteLibraryServer.java;h=dc9688c4de69c0348a1ee7dbac4665ec581d905a;hb=b6b657954954280c9ab0efcec67f3fe4a3ae0945;hp=f4075dd7bf5df4e9fb1d734bc8d47fdb95852b5e;hpb=fb25273cf02653ac343d5437083b1bc41af5ce23;p=nikiroo-utils.git diff --git a/src/be/nikiroo/fanfix/library/RemoteLibraryServer.java b/src/be/nikiroo/fanfix/library/RemoteLibraryServer.java index f4075dd..dc9688c 100644 --- a/src/be/nikiroo/fanfix/library/RemoteLibraryServer.java +++ b/src/be/nikiroo/fanfix/library/RemoteLibraryServer.java @@ -130,6 +130,7 @@ public class RemoteLibraryServer extends ServerObject { } if ((subkey + "|").contains("|wl|")) { wl = false; // |wl| = bypass whitelist + whitelist = new ArrayList(); } } } @@ -140,9 +141,15 @@ public class RemoteLibraryServer extends ServerObject { for (Object arg : args) { trace += arg + " "; } - System.out.println(trace); - - Object rep = doRequest(action, command, args, rw, whitelist); + long now = System.currentTimeMillis(); + System.out.println(StringUtils.fromTime(now) + ": " + trace); + + Object rep = null; + try { + rep = doRequest(action, command, args, rw, whitelist); + } catch (IOException e) { + rep = new RemoteLibraryException(e, true); + } commands.put(id, command); wls.put(id, wl); @@ -173,9 +180,12 @@ public class RemoteLibraryServer extends ServerObject { String rec = StringUtils.formatNumber(bytesReceived) + "b"; String sent = StringUtils.formatNumber(bytesSent) + "b"; - System.out.println(String.format("%s[>%s]: (%s sent, %s rec) in %d ms", - display(whitelist, rw), commands.get(id), sent, rec, - times.get(id))); + long now = System.currentTimeMillis(); + System.out.println(StringUtils.fromTime(now) + + ": " + + String.format("%s[>%s]: (%s sent, %s rec) in %d ms", + display(whitelist, rw), commands.get(id), sent, rec, + times.get(id))); commands.remove(id); times.remove(id); @@ -188,11 +198,11 @@ public class RemoteLibraryServer extends ServerObject { if ("PING".equals(command)) { return rw ? "r/w" : "r/o"; } else if ("GET_METADATA".equals(command)) { + List metas = new ArrayList(); + if ("*".equals(args[0])) { Progress pg = createPgForwarder(action); - List metas = new ArrayList(); - for (MetaData meta : Instance.getLibrary().getMetas(pg)) { MetaData light; if (meta.getCover() == null) { @@ -206,13 +216,41 @@ public class RemoteLibraryServer extends ServerObject { } forcePgDoneSent(pg); - return metas.toArray(new MetaData[] {}); + } else { + MetaData meta = Instance.getLibrary().getInfo((String) args[0]); + MetaData light; + if (meta.getCover() == null) { + light = meta; + } else { + light = meta.clone(); + light.setCover(null); + } + + metas.add(light); } - return new MetaData[] { Instance.getLibrary().getInfo( - (String) args[0]) }; + if (!whitelist.isEmpty()) { + for (int i = 0; i < metas.size(); i++) { + if (!whitelist.contains(metas.get(i).getSource())) { + metas.remove(i); + i--; + } + } + } + + return metas.toArray(new MetaData[0]); } else if ("GET_STORY".equals(command)) { MetaData meta = Instance.getLibrary().getInfo((String) args[0]); + if (meta == null) { + return null; + } + + if (!whitelist.isEmpty()) { + if (!whitelist.contains(meta.getSource())) { + return null; + } + } + meta = meta.clone(); meta.setCover(null); @@ -226,6 +264,11 @@ public class RemoteLibraryServer extends ServerObject { action.rec(); } } else if ("SAVE_STORY".equals(command)) { + if (!rw) { + throw new RemoteLibraryException("Read-Only remote library: " + + args[0], false); + } + List list = new ArrayList(); action.send(null); @@ -240,12 +283,22 @@ public class RemoteLibraryServer extends ServerObject { Instance.getLibrary().save(story, (String) args[0], null); return story.getMeta().getLuid(); } else if ("IMPORT".equals(command)) { + if (!rw) { + throw new RemoteLibraryException("Read-Only remote library: " + + args[0], false); + } + Progress pg = createPgForwarder(action); - Story story = Instance.getLibrary().imprt( + MetaData meta = Instance.getLibrary().imprt( new URL((String) args[0]), pg); forcePgDoneSent(pg); - return story.getMeta().getLuid(); + return meta.getLuid(); } else if ("DELETE_STORY".equals(command)) { + if (!rw) { + throw new RemoteLibraryException("Read-Only remote library: " + + args[0], false); + } + Instance.getLibrary().delete((String) args[0]); } else if ("GET_COVER".equals(command)) { return Instance.getLibrary().getCover((String) args[0]); @@ -260,6 +313,11 @@ public class RemoteLibraryServer extends ServerObject { return null; } } else if ("SET_COVER".equals(command)) { + if (!rw) { + throw new RemoteLibraryException("Read-Only remote library: " + + args[0] + ", " + args[1], false); + } + if ("SOURCE".equals(args[0])) { Instance.getLibrary().setSourceCover((String) args[1], (String) args[2]); @@ -268,11 +326,21 @@ public class RemoteLibraryServer extends ServerObject { (String) args[2]); } } else if ("CHANGE_STA".equals(command)) { + if (!rw) { + throw new RemoteLibraryException("Read-Only remote library: " + + args[0] + ", " + args[1], false); + } + Progress pg = createPgForwarder(action); Instance.getLibrary().changeSTA((String) args[0], (String) args[1], (String) args[2], (String) args[3], pg); forcePgDoneSent(pg); } else if ("EXIT".equals(command)) { + if (!rw) { + throw new RemoteLibraryException( + "Read-Only remote library: EXIT", false); + } + stop(0, false); } @@ -282,7 +350,9 @@ public class RemoteLibraryServer extends ServerObject { @Override protected void onError(Exception e) { if (e instanceof SSLException) { - System.out.println("[Client connection refused (bad key)]"); + long now = System.currentTimeMillis(); + System.out.println(StringUtils.fromTime(now) + ": " + + "[Client connection refused (bad key)]"); } else { getTraceHandler().error(e); }