X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fruntime%2FCmsAcrHttpHandler.java;h=7799a8c4eea29f9f1547721ecbd1c7d431cd847c;hb=b897c27d370ad4772b5ae4b2c22cc505ef5d1a3f;hp=d9fa9e751d64394f37f5651fc0349afdc4580b33;hpb=ea7d6818525ff88cc6b9ed0957c912545bd8eb81;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsAcrHttpHandler.java b/org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsAcrHttpHandler.java index d9fa9e751..7799a8c4e 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsAcrHttpHandler.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsAcrHttpHandler.java @@ -1,7 +1,43 @@ package org.argeo.cms.internal.runtime; +import java.io.IOException; +import java.io.InputStream; +import java.util.Optional; + +import org.argeo.api.acr.Content; +import org.argeo.api.acr.ContentSession; +import org.argeo.api.acr.CrName; +import org.argeo.api.acr.spi.ProvidedRepository; +import org.argeo.cms.acr.ContentUtils; +import org.argeo.cms.auth.RemoteAuthUtils; +import org.argeo.cms.internal.http.RemoteAuthHttpExchange; +import org.argeo.util.StreamUtils; import org.argeo.util.dav.DavServerHandler; +import org.argeo.util.http.HttpResponseStatus; +import org.argeo.util.http.HttpServerUtils; + +import com.sun.net.httpserver.HttpExchange; + +public class CmsAcrHttpHandler extends DavServerHandler { + private ProvidedRepository contentRepository; + + @Override + protected void handleGET(HttpExchange exchange) { + ContentSession session = RemoteAuthUtils.doAs(() -> contentRepository.get(), + new RemoteAuthHttpExchange(exchange)); + String relativePath = HttpServerUtils.relativize(exchange); + Content content = session.get(ContentUtils.ROOT_SLASH + relativePath); + Optional size = content.get(CrName.size, Long.class); + try (InputStream in = content.open(InputStream.class)) { + exchange.sendResponseHeaders(HttpResponseStatus.OK.getStatusCode(), size.orElse(0l)); + StreamUtils.copy(in, exchange.getResponseBody()); + } catch (IOException e) { + throw new RuntimeException("Cannot process " + relativePath, e); + } + } -public class CmsAcrHttpHandler extends DavServerHandler { + public void setContentRepository(ProvidedRepository contentRepository) { + this.contentRepository = contentRepository; + } }