diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 48f171f2..0bb4ddcf 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -15,5 +15,4 @@ updates: - dependency-name: "org.eclipse.jetty:jetty-bom" versions: "[12.1,)" - dependency-name: "org.eclipse.jetty.ee10:jetty-ee10-bom" - versions: "[12.1,)" - - dependency-name: "org.webjars.npm:codemirror" \ No newline at end of file + versions: "[12.1,)" \ No newline at end of file diff --git a/engine/pom.xml b/engine/pom.xml index 264c3aea..b74503dd 100644 --- a/engine/pom.xml +++ b/engine/pom.xml @@ -101,11 +101,6 @@ webjars-locator-lite 1.1.2 - - org.webjars.npm - codemirror - 6.0.1 - org.webjars.npm codemirror__autocomplete diff --git a/engine/src/main/java/org/archive/crawler/restlet/BeanDocResource.java b/engine/src/main/java/org/archive/crawler/restlet/BeanDocResource.java new file mode 100644 index 00000000..e23df952 --- /dev/null +++ b/engine/src/main/java/org/archive/crawler/restlet/BeanDocResource.java @@ -0,0 +1,68 @@ +/* + * This file is part of the Heritrix web crawler (crawler.archive.org). + * + * Licensed to the Internet Archive (IA) by one or more individual + * contributors. + * + * The IA licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.archive.crawler.restlet; + +import org.apache.commons.codec.digest.DigestUtils; +import org.restlet.data.MediaType; +import org.restlet.data.Status; +import org.restlet.data.Tag; +import org.restlet.representation.Representation; +import org.restlet.representation.StringRepresentation; +import org.restlet.resource.Get; +import org.restlet.resource.ServerResource; + +import java.io.IOException; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.Enumeration; + +public class BeanDocResource extends ServerResource { + private static Tag etag = null; + + @Get("json") + public Representation getBeans() throws IOException { + if (etag != null && getRequest().getConditions().getNoneMatch().contains(etag)) { + getResponse().setStatus(Status.REDIRECTION_NOT_MODIFIED); + return null; + } + var resources = getClass().getClassLoader().getResources("META-INF/heritrix-beans.json"); + var json = concatenateJsonObjects(resources); + var representation = new StringRepresentation(json, MediaType.APPLICATION_JSON); + if (etag == null) etag = new Tag(DigestUtils.md5Hex(json)); + representation.setTag(etag); + return representation; + } + + private static String concatenateJsonObjects(Enumeration resources) throws IOException { + var builder = new StringBuilder("{"); + for (var url : Collections.list(resources)) { + try (var stream = url.openStream()) { + var json = new String(stream.readAllBytes(), StandardCharsets.UTF_8); + if (json.isEmpty()) continue; + if (builder.length() > 1) builder.append(","); + + // strip leading '{' and trailing '}' (we just assume no whitespace) + builder.append(json, 1, json.length() - 1); + } + } + builder.append("}"); + return builder.toString(); + } +} diff --git a/engine/src/main/java/org/archive/crawler/restlet/EngineApplication.java b/engine/src/main/java/org/archive/crawler/restlet/EngineApplication.java index 1d7b474b..84198133 100644 --- a/engine/src/main/java/org/archive/crawler/restlet/EngineApplication.java +++ b/engine/src/main/java/org/archive/crawler/restlet/EngineApplication.java @@ -74,6 +74,7 @@ public class EngineApplication extends Application { .setMatchingMode(Template.MODE_EQUALS); router.attach("/engine/",EngineResource.class) .setMatchingMode(Template.MODE_EQUALS); + router.attach("/engine/beandoc", BeanDocResource.class); Directory alljobsdir = new Directory( getContext(), diff --git a/engine/src/main/resources/org/archive/crawler/restlet/Edit.ftl b/engine/src/main/resources/org/archive/crawler/restlet/Edit.ftl index 864ec714..e17a164f 100644 --- a/engine/src/main/resources/org/archive/crawler/restlet/Edit.ftl +++ b/engine/src/main/resources/org/archive/crawler/restlet/Edit.ftl @@ -28,7 +28,6 @@