Add route to get file content.

This commit is contained in:
Kavin 2023-02-02 15:12:31 +00:00
parent 0e04526217
commit 37b2a41903
No known key found for this signature in database
GPG key ID: 49451E4482CC5BCD
2 changed files with 28 additions and 2 deletions

View file

@ -480,8 +480,8 @@ public class ServerLauncher extends MultithreadedHttpServerLauncher {
}
})).map(GET, "/storage/stat", AsyncServlet.ofBlocking(executor, request -> {
try {
var json = mapper.readTree(request.loadBody().getResult().asArray());
return getJsonResponse(StorageHandlers.statFile(request.getHeader(AUTHORIZATION), json.get("file").textValue()), "private");
var file = request.getQueryParameter("file");
return getJsonResponse(StorageHandlers.statFile(request.getHeader(AUTHORIZATION), file), "private");
} catch (Exception e) {
return getErrorResponse(e, request.getPath());
}
@ -496,6 +496,13 @@ public class ServerLauncher extends MultithreadedHttpServerLauncher {
} catch (Exception e) {
return getErrorResponse(e, request.getPath());
}
})).map(GET, "/storage/get", AsyncServlet.ofBlocking(executor, request -> {
try {
var file = request.getQueryParameter("file");
return getRawResponse(StorageHandlers.getFile(request.getHeader(AUTHORIZATION), file), "application/octet-stream", "private");
} catch (Exception e) {
return getErrorResponse(e, request.getPath());
}
}))
.map(GET, "/", AsyncServlet.ofBlocking(executor, request -> HttpResponse.redirect302(Constants.FRONTEND_URL)));

View file

@ -1,5 +1,6 @@
package me.kavin.piped.server.handlers.auth;
import io.minio.GetObjectArgs;
import io.minio.PutObjectArgs;
import io.minio.StatObjectArgs;
import io.minio.errors.ErrorResponseException;
@ -8,6 +9,7 @@ import me.kavin.piped.utils.DatabaseHelper;
import me.kavin.piped.utils.ExceptionHandler;
import me.kavin.piped.utils.obj.db.User;
import me.kavin.piped.utils.resp.SimpleErrorMessage;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
@ -98,4 +100,21 @@ public class StorageHandlers {
.put("status", "ok")
);
}
public static byte[] getFile(String session, String name) throws Exception {
if (!StringUtils.isAlphanumeric(name) || name.length() > 32)
ExceptionHandler.throwErrorResponse(new SimpleErrorMessage("Invalid path provided!"));
User user = DatabaseHelper.getUserFromSession(session);
if (user == null)
ExceptionHandler.throwErrorResponse(new SimpleErrorMessage("Invalid session provided!"));
try (var stream = Constants.S3_CLIENT.getObject(GetObjectArgs.builder()
.bucket(Constants.S3_BUCKET)
.object(user.getId() + "/" + name)
.build())) {
return IOUtils.toByteArray(stream);
}
}
}