X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Flibrary%2FRemoteLibraryServer.java;h=f88b25ae5a3d335938fba59b0c3a24fea6afb8f9;hb=c1bb921e4435bdc48fce18be3ca808226d4930e9;hp=f4075dd7bf5df4e9fb1d734bc8d47fdb95852b5e;hpb=fb25273cf02653ac343d5437083b1bc41af5ce23;p=fanfix.git diff --git a/src/be/nikiroo/fanfix/library/RemoteLibraryServer.java b/src/be/nikiroo/fanfix/library/RemoteLibraryServer.java index f4075dd..f88b25a 100644 --- a/src/be/nikiroo/fanfix/library/RemoteLibraryServer.java +++ b/src/be/nikiroo/fanfix/library/RemoteLibraryServer.java @@ -2,6 +2,7 @@ package be.nikiroo.fanfix.library; import java.io.IOException; import java.net.URL; +import java.nio.file.AccessDeniedException; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -130,6 +131,7 @@ public class RemoteLibraryServer extends ServerObject { } if ((subkey + "|").contains("|wl|")) { wl = false; // |wl| = bypass whitelist + whitelist = new ArrayList(); } } } @@ -140,9 +142,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); + } commands.put(id, command); wls.put(id, wl); @@ -173,9 +181,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 +199,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 +217,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 +265,11 @@ public class RemoteLibraryServer extends ServerObject { action.rec(); } } else if ("SAVE_STORY".equals(command)) { + if (!rw) { + throw new AccessDeniedException("" + args[0], null, + "Read-Only remote library"); + } + List list = new ArrayList(); action.send(null); @@ -240,12 +284,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 AccessDeniedException("" + args[0], null, + "Read-Only remote library"); + } + Progress pg = createPgForwarder(action); Story story = Instance.getLibrary().imprt( new URL((String) args[0]), pg); forcePgDoneSent(pg); return story.getMeta().getLuid(); } else if ("DELETE_STORY".equals(command)) { + if (!rw) { + throw new AccessDeniedException("" + args[0], null, + "Read-Only remote library"); + } + Instance.getLibrary().delete((String) args[0]); } else if ("GET_COVER".equals(command)) { return Instance.getLibrary().getCover((String) args[0]); @@ -260,6 +314,11 @@ public class RemoteLibraryServer extends ServerObject { return null; } } else if ("SET_COVER".equals(command)) { + if (!rw) { + throw new AccessDeniedException("" + args[0], "" + args[1], + "Read-Only remote library"); + } + if ("SOURCE".equals(args[0])) { Instance.getLibrary().setSourceCover((String) args[1], (String) args[2]); @@ -268,11 +327,21 @@ public class RemoteLibraryServer extends ServerObject { (String) args[2]); } } else if ("CHANGE_STA".equals(command)) { + if (!rw) { + throw new AccessDeniedException("" + args[0], "" + args[1], + "Read-Only remote library"); + } + 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 AccessDeniedException("EXIT", "", + "Read-Only remote library, cannot close it"); + } + stop(0, false); } @@ -282,7 +351,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); }