diff --git a/build.gradle.kts b/build.gradle.kts index 287f6336..8ba75485 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -259,17 +259,17 @@ val generateReleaseStateLastCommit by tasks.registering(GenerateReleaseStateLast } val releaseStateData = generateReleaseStateLastCommit.map { it.releaseState.get() } -val addOnsHelpWebsite = file("src/main/addons-help-website.txt") +val addOnsHelpWebsite = file("src/main/addons-help-website.yaml") val downloadReleasedAddOns by tasks.registering(DownloadReleasedAddOns::class) { releaseState.set(releaseStateData) zapVersions.set(latestZapVersions) - allowedAddOns.set(addOnsHelpWebsite) + deniedAddOns.set(addOnsHelpWebsite) outputDir.set(layout.buildDirectory.dir("releasedAddOns")) } val generateWebsitePages by tasks.registering(GenerateWebsitePages::class) { - allowedAddOns.set(addOnsHelpWebsite) + deniedAddOns.set(addOnsHelpWebsite) addOns.from(downloadReleasedAddOns.map { fileTree(it.outputDir).matching { include("*.zap") } }) helpAddOnRegex.set("^help(?:_[a-zA-Z_]+)?") diff --git a/buildSrc/src/main/java/org/zaproxy/gradle/DownloadReleasedAddOns.java b/buildSrc/src/main/java/org/zaproxy/gradle/DownloadReleasedAddOns.java index 9099a390..273c1089 100644 --- a/buildSrc/src/main/java/org/zaproxy/gradle/DownloadReleasedAddOns.java +++ b/buildSrc/src/main/java/org/zaproxy/gradle/DownloadReleasedAddOns.java @@ -44,7 +44,7 @@ public abstract class DownloadReleasedAddOns extends DefaultTask { public abstract RegularFileProperty getZapVersions(); @InputFile - public abstract RegularFileProperty getAllowedAddOns(); + public abstract RegularFileProperty getDeniedAddOns(); @OutputDirectory public abstract DirectoryProperty getOutputDir(); @@ -57,13 +57,13 @@ void downloadAddOns() throws Exception { return; } - Set allowedAddOns = TaskUtils.readAllowedAddOns(getAllowedAddOns()); + Set deniedAddOns = TaskUtils.readDeniedAddOns(getDeniedAddOns()); Path outputDir = getOutputDir().getAsFile().get().toPath(); ZapXmlConfiguration zapVersions = new ZapXmlConfiguration(getZapVersions().getAsFile().get()); for (ReleaseState.AddOnChange addOn : addOns) { String addOnId = addOn.getId(); - if (!addOn.isNewVersion() || !allowedAddOns.contains(addOnId)) { + if (!addOn.isNewVersion() || deniedAddOns.contains(addOnId)) { continue; } diff --git a/buildSrc/src/main/java/org/zaproxy/gradle/GenerateWebsitePages.java b/buildSrc/src/main/java/org/zaproxy/gradle/GenerateWebsitePages.java index 565bb2b8..2096b23f 100644 --- a/buildSrc/src/main/java/org/zaproxy/gradle/GenerateWebsitePages.java +++ b/buildSrc/src/main/java/org/zaproxy/gradle/GenerateWebsitePages.java @@ -48,7 +48,7 @@ public abstract class GenerateWebsitePages extends DefaultTask { @InputFile - public abstract RegularFileProperty getAllowedAddOns(); + public abstract RegularFileProperty getDeniedAddOns(); @InputFiles public abstract ConfigurableFileCollection getAddOns(); @@ -88,7 +88,7 @@ public abstract class GenerateWebsitePages extends DefaultTask { @TaskAction public void generate() throws IOException { - Set allowedAddOns = TaskUtils.readAllowedAddOns(getAllowedAddOns()); + Set deniedAddOns = TaskUtils.readDeniedAddOns(getDeniedAddOns()); Path outputDir = getOutputDir().get().getAsFile().toPath(); @@ -107,7 +107,7 @@ public void generate() throws IOException { for (File addOnFile : getAddOns()) { AddOn addOn = createAddOn(addOnFile.toPath()); - if (addOn == null || !allowedAddOns.contains(addOn.getId())) { + if (addOn == null || deniedAddOns.contains(addOn.getId())) { continue; } diff --git a/buildSrc/src/main/java/org/zaproxy/gradle/TaskUtils.java b/buildSrc/src/main/java/org/zaproxy/gradle/TaskUtils.java index 1bc0ea33..13b83fcb 100644 --- a/buildSrc/src/main/java/org/zaproxy/gradle/TaskUtils.java +++ b/buildSrc/src/main/java/org/zaproxy/gradle/TaskUtils.java @@ -19,23 +19,25 @@ */ package org.zaproxy.gradle; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.net.URL; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; +import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; import org.apache.commons.codec.digest.DigestUtils; import org.gradle.api.Task; import org.gradle.api.file.RegularFileProperty; final class TaskUtils { - private static final String COMMENT_LINE = "#"; - private TaskUtils() {} private static final String HTTPS_SCHEME = "HTTPS"; @@ -99,11 +101,12 @@ static String calculateChecksum(Path file, String checksumAlgorithm, String expe file, expectedChecksum, checksum)); } - static Set readAllowedAddOns(RegularFileProperty fileProperty) throws IOException { + static Set readDeniedAddOns(RegularFileProperty fileProperty) throws IOException { Path file = fileProperty.getAsFile().get().toPath(); - return Files.readAllLines(file, StandardCharsets.UTF_8).stream() - .filter(s -> !s.startsWith(COMMENT_LINE) || !s.isEmpty()) - .collect(Collectors.toSet()); + Map> data = + new ObjectMapper(new YAMLFactory()) + .readValue(file.toFile(), new TypeReference<>() {}); + return new HashSet<>(data.get("denied")); } static boolean hasSecureScheme(URL url) { diff --git a/src/main/addons-help-website.txt b/src/main/addons-help-website.txt deleted file mode 100644 index c75a8d34..00000000 --- a/src/main/addons-help-website.txt +++ /dev/null @@ -1,111 +0,0 @@ -# The IDs of the add-ons that should have the help generated to the website. - -# Main help. -help - -# Remaining add-ons, in alphabetic order. -accessControl -alertFilters -alertReport -allinonenotes -ascanrulesAlpha -ascanrulesBeta -ascanrules -# 3rd-party, does not have help. -# attacksurfacedetector -authhelper -authstats -automation -beanshell -browserView -bruteforce -bugtracker -callgraph -callhome -client -commonlib -communityScripts -custompayloads -database -dev -diff -directorylistv1 -directorylistv2_3_lc -directorylistv2_3 -domxss -encoder -evalvillain -exim -formhandler -fuzz -fuzzai -fuzzdboffensive -fuzzdb -gettingStarted -graaljs -graphql -groovy -grpc -highlighter -httpsInfo -hud -imagelocationscanner -insights -invoke -jruby -jsonview -# 3rd-party, does not have help. -# jwt -jython -kotlin -mcp -neonmarker -network -oast -onlineMenu -openapi -packpentester -packscanrules -packscripts -paramdigger -plugnhack -postman -pscan -pscanrulesAlpha -pscanrulesBeta -pscanrules -ptk -quickstart -# 3rd-party, does not have help. -# reflect -regextester -replacer -reports -requester -retest -retire -reveal -revisit -saml -scanpolicies -scripts -selenium -sequence -soap -spider -spiderAjax -sqliplugin -srm -sse -svndigger -tips -tokengen -treetools -viewstate -wappalyzer -webdriverlinux -webdrivermacos -webdriverwindows -websocket -zest - diff --git a/src/main/addons-help-website.yaml b/src/main/addons-help-website.yaml new file mode 100644 index 00000000..f50acfb0 --- /dev/null +++ b/src/main/addons-help-website.yaml @@ -0,0 +1,24 @@ +# Add-ons excluded from help website generation. +denied: + # ZAP locale/language add-ons + - coreLang + - help_ar_SA + - help_bs_BA + - help_es_ES + - help_fil_PH + - help_fr_FR + - help_id_ID + - help_ja_JP + - help_ms_MY + - help_pt_BR + - help_ru_RU + - help_tr_TR + - help_zh_CN + + # 3rd-party add-ons with not known help + - attacksurfacedetector + - fileupload + - jwt + - levoai + - maplocal + - reflect