import be.nikiroo.utils.NanoHTTPD.Response;
import be.nikiroo.utils.NanoHTTPD.Response.Status;
import be.nikiroo.utils.Progress;
+import be.nikiroo.utils.Progress.ProgressListener;
public class WebLibraryServer extends WebLibraryServerHtml {
class WLoginResult extends LoginResult {
- private boolean rw;
- private boolean wl;
- private boolean bl;
-
public WLoginResult(boolean badLogin, boolean badCookie) {
super(badLogin, badCookie);
}
boolean wl, boolean bl) {
super(who, key, subkey, (rw ? "|rw" : "") + (wl ? "|wl" : "")
+ (bl ? "|bl" : "") + "|");
- this.rw = rw;
- this.wl = wl;
- this.bl = bl;
}
public WLoginResult(String cookie, String who, String key,
NanoHTTPD.MIME_PLAINTEXT, "Invalid story part request");
}
+ if (!login.isRw()) {
+ return NanoHTTPD.newFixedLengthResponse(Status.FORBIDDEN,
+ NanoHTTPD.MIME_PLAINTEXT, "SET story part not allowed");
+ }
+
String luid = uriParts[off + 0];
String type = uriParts[off + 1];
NanoHTTPD.MIME_PLAINTEXT, "Invalid cover request");
}
+ if (!login.isRw()) {
+ return NanoHTTPD.newFixedLengthResponse(Status.FORBIDDEN,
+ NanoHTTPD.MIME_PLAINTEXT, "Cover request not allowed");
+ }
+
String type = uriParts[off + 0];
String id = uriParts[off + 1];
throws IOException {
final BasicLibrary lib = Instance.getInstance().getLibrary();
+ if (!login.isRw()) {
+ return NanoHTTPD.newFixedLengthResponse(Status.FORBIDDEN,
+ NanoHTTPD.MIME_PLAINTEXT, "Import not allowed");
+ }
+
final URL url = new URL(urlStr);
final Progress pg = new Progress();
final String luid = lib.getNextId();
+ // Keep the latest name
+ pg.addProgressListener(new ProgressListener() {
+ @Override
+ public void progress(Progress progress, String name) {
+ pg.setName(name);
+ }
+ });
+
synchronized (imprts) {
imprts.put(luid, pg);
}
@Override
public void run() {
try {
- lib.imprt(url, pg);
+ lib.imprt(url, luid, pg);
} catch (IOException e) {
Instance.getInstance().getTraceHandler().error(e);
} finally {
}
}, "Import story: " + urlStr).start();
- lib.imprt(url, pg);
-
return NanoHTTPD.newFixedLengthResponse(Status.OK,
NanoHTTPD.MIME_PLAINTEXT, luid);
}
return newInputStreamResponse(NanoHTTPD.MIME_PLAINTEXT, null);
}
+ @Override
+ protected Response delete(String uri, WLoginResult login)
+ throws IOException {
+ String[] uriParts = uri.split("/");
+ int off = 2; // "" and "delete"
+
+ if (uriParts.length < off + 1) {
+ return NanoHTTPD.newFixedLengthResponse(Status.BAD_REQUEST,
+ NanoHTTPD.MIME_PLAINTEXT, "Invalid delete request");
+ }
+
+ if (!login.isRw()) {
+ return NanoHTTPD.newFixedLengthResponse(Status.FORBIDDEN,
+ NanoHTTPD.MIME_PLAINTEXT, "Delete not allowed");
+ }
+
+ String luid = uriParts[off + 0];
+
+ BasicLibrary lib = Instance.getInstance().getLibrary();
+ lib.delete(luid);
+
+ return newInputStreamResponse(NanoHTTPD.MIME_PLAINTEXT, null);
+ }
+
@Override
protected List<MetaData> metas(WLoginResult login) throws IOException {
BasicLibrary lib = Instance.getInstance().getLibrary();