From ccd97117995d4551e931dddc807f3902ac56cd07 Mon Sep 17 00:00:00 2001 From: Vadim Shulkin Date: Thu, 8 May 2025 11:38:10 -0400 Subject: [PATCH] first commit --- .../.mvn/jvm.config | 10 + .../GETTING-STARTED.md | 8 + .../README.md | 56 + .../build.config.js | 6 + .../dependency-reduced-pom.xml | 1163 +++++++++++++++++ .../package.json | 28 + graylog-plugin-function-base64inflate/pom.xml | 255 ++++ .../src/deb/control/control | 8 + .../plugins/custom/Base64InflateFunction.java | 79 ++ .../custom/Base64InflateFunctionMetaData.java | 73 ++ .../custom/Base64InflateFunctionModule.java | 60 + .../custom/Base64InflateFunctionPlugin.java | 39 + .../services/org.graylog2.plugin.Plugin | 1 + .../graylog-plugin.properties | 12 + .../src/web/index.jsx | 26 + .../services/org.graylog2.plugin.Plugin | 1 + .../graylog-plugin.properties | 12 + .../custom/Base64InflateFunction.class | Bin 0 -> 4999 bytes .../Base64InflateFunctionMetaData.class | Bin 0 -> 2221 bytes .../custom/Base64InflateFunctionModule.class | Bin 0 -> 671 bytes .../custom/Base64InflateFunctionPlugin.class | Bin 0 -> 921 bytes ...-function-base64inflate-1.0.0-SNAPSHOT.jar | Bin 0 -> 12935 bytes .../target/maven-archiver/pom.properties | 5 + ...-function-base64inflate-1.0.0-SNAPSHOT.jar | Bin 0 -> 9875 bytes .../webpack.config.js | 8 + graylog-plugin-function-strlen | 1 + 26 files changed, 1851 insertions(+) create mode 100644 graylog-plugin-function-base64inflate/.mvn/jvm.config create mode 100644 graylog-plugin-function-base64inflate/GETTING-STARTED.md create mode 100644 graylog-plugin-function-base64inflate/README.md create mode 100644 graylog-plugin-function-base64inflate/build.config.js create mode 100644 graylog-plugin-function-base64inflate/dependency-reduced-pom.xml create mode 100644 graylog-plugin-function-base64inflate/package.json create mode 100644 graylog-plugin-function-base64inflate/pom.xml create mode 100644 graylog-plugin-function-base64inflate/src/deb/control/control create mode 100644 graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunction.java create mode 100644 graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunctionMetaData.java create mode 100644 graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunctionModule.java create mode 100644 graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunctionPlugin.java create mode 100644 graylog-plugin-function-base64inflate/src/main/resources/META-INF/services/org.graylog2.plugin.Plugin create mode 100644 graylog-plugin-function-base64inflate/src/main/resources/org.graylog.plugins.graylog-plugin-function-base64inflate/graylog-plugin.properties create mode 100644 graylog-plugin-function-base64inflate/src/web/index.jsx create mode 100644 graylog-plugin-function-base64inflate/target/classes/META-INF/services/org.graylog2.plugin.Plugin create mode 100644 graylog-plugin-function-base64inflate/target/classes/org.graylog.plugins.graylog-plugin-function-base64inflate/graylog-plugin.properties create mode 100644 graylog-plugin-function-base64inflate/target/classes/org/graylog/plugins/custom/Base64InflateFunction.class create mode 100644 graylog-plugin-function-base64inflate/target/classes/org/graylog/plugins/custom/Base64InflateFunctionMetaData.class create mode 100644 graylog-plugin-function-base64inflate/target/classes/org/graylog/plugins/custom/Base64InflateFunctionModule.class create mode 100644 graylog-plugin-function-base64inflate/target/classes/org/graylog/plugins/custom/Base64InflateFunctionPlugin.class create mode 100644 graylog-plugin-function-base64inflate/target/graylog-plugin-function-base64inflate-1.0.0-SNAPSHOT.jar create mode 100644 graylog-plugin-function-base64inflate/target/maven-archiver/pom.properties create mode 100644 graylog-plugin-function-base64inflate/target/original-graylog-plugin-function-base64inflate-1.0.0-SNAPSHOT.jar create mode 100644 graylog-plugin-function-base64inflate/webpack.config.js create mode 160000 graylog-plugin-function-strlen diff --git a/graylog-plugin-function-base64inflate/.mvn/jvm.config b/graylog-plugin-function-base64inflate/.mvn/jvm.config new file mode 100644 index 0000000..32599ce --- /dev/null +++ b/graylog-plugin-function-base64inflate/.mvn/jvm.config @@ -0,0 +1,10 @@ +--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED +--add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED +--add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED +--add-exports jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED +--add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED +--add-exports jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED +--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED +--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED +--add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED +--add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED diff --git a/graylog-plugin-function-base64inflate/GETTING-STARTED.md b/graylog-plugin-function-base64inflate/GETTING-STARTED.md new file mode 100644 index 0000000..23880c9 --- /dev/null +++ b/graylog-plugin-function-base64inflate/GETTING-STARTED.md @@ -0,0 +1,8 @@ +Getting started with your new Graylog plugin +============================================ + +Welcome to your new Graylog plugin! + +Please refer to https://docs.graylog.org/docs/plugins for documentation on how to write +plugins for Graylog. + diff --git a/graylog-plugin-function-base64inflate/README.md b/graylog-plugin-function-base64inflate/README.md new file mode 100644 index 0000000..bebbe45 --- /dev/null +++ b/graylog-plugin-function-base64inflate/README.md @@ -0,0 +1,56 @@ +# Base64InflateFunction Plugin for Graylog + +__Use this paragraph to enter a description of your plugin.__ + +**Required Graylog version:** 2.0 and later + +Installation +------------ + +[Download the plugin](https://github.com/vshulkin/graylog-plugin-function-base64inflate/releases) +and place the `.jar` file in your Graylog plugin directory. The plugin directory +is the `plugins/` folder relative from your `graylog-server` directory by default +and can be configured in your `graylog.conf` file. + +Restart `graylog-server` and you are done. + +Development +----------- + +You can improve your development experience for the web interface part of your plugin +dramatically by making use of hot reloading. To do this, do the following: + +* `git clone https://github.com/Graylog2/graylog2-server.git` +* `cd graylog2-server/graylog2-web-interface` +* `ln -s $YOURPLUGIN plugin/` +* `npm install && npm start` + +Usage +----- + +__Use this paragraph to document the usage of your plugin__ + + +Getting started +--------------- + +This project is using Maven 3 and requires Java 8 or higher. + +* Clone this repository. +* Run `mvn package` to build a JAR file. +* Optional: Run `mvn jdeb:jdeb` and `mvn rpm:rpm` to create a DEB and RPM package respectively. +* Copy generated JAR file in target directory to your Graylog plugin directory. +* Restart the Graylog. + +Plugin Release +-------------- + +We are using the maven release plugin: + +``` +$ mvn release:prepare +[...] +$ mvn release:perform +``` + +This sets the version numbers, creates a tag and pushes to GitHub. diff --git a/graylog-plugin-function-base64inflate/build.config.js b/graylog-plugin-function-base64inflate/build.config.js new file mode 100644 index 0000000..500cf49 --- /dev/null +++ b/graylog-plugin-function-base64inflate/build.config.js @@ -0,0 +1,6 @@ +const path = require('path'); + +module.exports = { + // Make sure that this is the correct path to the web interface part of the Graylog server repository. + web_src_path: path.resolve(__dirname, '../graylog2-server', 'graylog2-web-interface'), +}; diff --git a/graylog-plugin-function-base64inflate/dependency-reduced-pom.xml b/graylog-plugin-function-base64inflate/dependency-reduced-pom.xml new file mode 100644 index 0000000..cc366c0 --- /dev/null +++ b/graylog-plugin-function-base64inflate/dependency-reduced-pom.xml @@ -0,0 +1,1163 @@ + + + + graylog-plugin-parent + org.graylog.plugins + 5.1.5 + ../pom.xml/pom.xml + + 4.0.0 + com.example.plugins + graylog-plugin-function-base64inflate + ${project.artifactId} + 1.0.0-SNAPSHOT + Graylog ${project.artifactId} plugin. + https://www.graylog.org + + + Vadim Shulkin + vshulkin@gmail.com + + + + scm:git:git@github.com:vshulkin/graylog-plugin-function-base64inflate.git + scm:git:git@github.com:vshulkin/graylog-plugin-function-base64inflate.git + https://github.com/vshulkin/graylog-plugin-function-base64inflate + + + + + ${web.build-dir} + + + true + src/main/resources + + + + + maven-assembly-plugin + + true + + + + maven-jar-plugin + 2.6 + + + + ${project.groupId}.${project.artifactId} + + + + + + maven-shade-plugin + 2.4.1 + + + package + + shade + + + + + + + + + + false + + + + maven-release-plugin + 2.5.2 + + true + forked-path + @{project.version} + clean test + package + + + + org.vafer + jdeb + 1.4 + + ${project.build.directory}/${project.artifactId}-${project.version}.deb + + + ${project.build.directory}/${project.build.finalName}.jar + file + + perm + ${graylog.plugin-dir} + 644 + root + root + + + + + + + org.codehaus.mojo + rpm-maven-plugin + 2.1.4 + + Application/Internet + + /usr + + + _unpackaged_files_terminate_build 0 + _binaries_in_noarch_packages_terminate_build 0 + + 644 + 755 + root + root + + + ${graylog.plugin-dir} + + + ${project.build.directory}/ + + ${project.build.finalName}.jar + + + + + + + + + + + + + false + + + sonatype-nexus-snapshots + Sonatype Nexus Snapshots + https://oss.sonatype.org/content/repositories/snapshots + + + + + false + + sonatype-nexus-releases + Sonatype Nexus Releases + https://oss.sonatype.org/content/repositories/releases + + + + + org.graylog2 + graylog2-server + 5.1.5 + provided + + + opentelemetry-api + io.opentelemetry + + + opentelemetry-instrumentation-annotations + io.opentelemetry.instrumentation + + + opentelemetry-semconv + io.opentelemetry + + + airline + com.github.rvesse + + + guava + com.google.guava + + + caffeine + com.github.ben-manes.caffeine + + + guava-retrying + com.github.rholder + + + shiro-core + org.apache.shiro + + + api-all + org.apache.directory.api + + + guice + com.google.inject + + + guice-assistedinject + com.google.inject.extensions + + + javax.inject + javax.inject + + + jadconfig + org.graylog + + + mongodb-driver-sync + org.mongodb + + + mongodb-driver-legacy + org.mongodb + + + mongojack + org.graylog.repackaged.mongojack + + + okhttp + com.squareup.okhttp3 + + + jackson-core + com.fasterxml.jackson.core + + + jackson-databind + com.fasterxml.jackson.core + + + jackson-annotations + com.fasterxml.jackson.core + + + jackson-jaxrs-base + com.fasterxml.jackson.jaxrs + + + jackson-datatype-guava + com.fasterxml.jackson.datatype + + + jackson-datatype-jdk8 + com.fasterxml.jackson.datatype + + + jackson-datatype-jsr310 + com.fasterxml.jackson.datatype + + + jackson-datatype-joda + com.fasterxml.jackson.datatype + + + jackson-module-jsonSchema + com.fasterxml.jackson.module + + + jackson-jaxrs-json-provider + com.fasterxml.jackson.jaxrs + + + jackson-dataformat-yaml + com.fasterxml.jackson.dataformat + + + jackson-dataformat-csv + com.fasterxml.jackson.dataformat + + + metrics-annotation + io.dropwizard.metrics + + + metrics-core + io.dropwizard.metrics + + + metrics-log4j2 + io.dropwizard.metrics + + + metrics-jvm + io.dropwizard.metrics + + + metrics-jmx + io.dropwizard.metrics + + + metrics-json + io.dropwizard.metrics + + + simpleclient_dropwizard + io.prometheus + + + simpleclient_hotspot + io.prometheus + + + simpleclient_httpserver + io.prometheus + + + siv-mode + org.cryptomator + + + commons-email + org.apache.commons + + + commons-validator + commons-validator + + + jersey-hk2 + org.glassfish.jersey.inject + + + jersey-bean-validation + org.glassfish.jersey.ext + + + jersey-media-multipart + org.glassfish.jersey.media + + + jersey-container-grizzly2-http + org.glassfish.jersey.containers + + + guice-bridge + org.glassfish.hk2 + + + hk2-api + org.glassfish.hk2 + + + hk2-locator + org.glassfish.hk2 + + + javax.ws.rs-api + javax.ws.rs + + + jaxb-api + javax.xml.bind + + + reflections + org.reflections + + + opencsv + net.sf.opencsv + + + commons-io + commons-io + + + natty + com.joestelmach + + + jmte + com.floreysoft + + + disruptor + com.lmax + + + joda-time + joda-time + + + uuid + org.graylog2.repackaged + + + de.huxhorn.sulky.ulid + de.huxhorn.sulky + + + commons-codec + commons-codec + + + grok + org.graylog2.repackaged + + + gelfclient + org.graylog2 + + + swagger-annotations + io.swagger + + + hibernate-validator + org.hibernate.validator + + + bcpkix-jdk15on + org.bouncycastle + + + lucene-queryparser + org.apache.lucene + + + lucene-analysis-common + org.apache.lucene + + + classgraph + io.github.classgraph + + + s3 + software.amazon.awssdk + + + log4j-api + org.apache.logging.log4j + + + log4j-core + org.apache.logging.log4j + + + log4j-slf4j-impl + org.apache.logging.log4j + + + jcl-over-slf4j + org.slf4j + + + log4j-over-slf4j + org.slf4j + + + log4j-jul + org.apache.logging.log4j + + + jbcrypt + org.mindrot + + + unboundid-ldapsdk + com.unboundid + + + retrofit + com.squareup.retrofit2 + + + converter-jackson + com.squareup.retrofit2 + + + os-platform-finder + org.graylog.repackaged + + + javax.el-api + javax.el + + + netty-common + io.netty + + + netty-buffer + io.netty + + + netty-handler + io.netty + + + netty-codec + io.netty + + + netty-codec-dns + io.netty + + + netty-codec-http + io.netty + + + netty-resolver-dns + io.netty + + + netty-transport-native-epoll + io.netty + + + netty-transport-native-kqueue + io.netty + + + netty-tcnative-boringssl-static + io.netty + + + netty-tcnative-boringssl-static + io.netty + + + javax.annotation-api + javax.annotation + + + HdrHistogram + org.hdrhistogram + + + oshi-core + com.github.oshi + + + amqp-client + com.rabbitmq + + + kafka09_2.11 + org.graylog.shaded + + + kafka_2.13 + org.apache.kafka + + + syslog4j + org.graylog2 + + + json-path + com.jayway.jsonpath + + + java-semver + com.github.zafarkhaja + + + semver4j + org.graylog.repackaged + + + protobuf-java + com.google.protobuf + + + validation-api + javax.validation + + + geoip2 + com.maxmind.geoip2 + + + cef-parser + org.graylog.cef + + + antlr4-runtime + org.antlr + + + jool + org.jooq + + + freemarker + org.freemarker + + + asciitable + de.vandermeer + + + commons-net + commons-net + + + slf4j-api + org.slf4j + + + auto-value-annotations + com.google.auto.value + + + jdot + info.leadinglight + + + streamex + one.util + + + cron-utils + com.cronutils + + + rate-limited-logger + com.swrve + + + + + org.graylog.plugins + graylog-plugin-pipeline-processor + 2.5.2 + provided + + + javapoet + com.squareup + + + antlr4-runtime + org.antlr + + + jool + org.jooq + + + + + org.graylog2 + graylog2-server + 5.1.5 + test-jar + test + + + opentelemetry-api + io.opentelemetry + + + opentelemetry-instrumentation-annotations + io.opentelemetry.instrumentation + + + opentelemetry-semconv + io.opentelemetry + + + airline + com.github.rvesse + + + guava + com.google.guava + + + caffeine + com.github.ben-manes.caffeine + + + guava-retrying + com.github.rholder + + + shiro-core + org.apache.shiro + + + api-all + org.apache.directory.api + + + guice + com.google.inject + + + guice-assistedinject + com.google.inject.extensions + + + javax.inject + javax.inject + + + jadconfig + org.graylog + + + mongodb-driver-sync + org.mongodb + + + mongodb-driver-legacy + org.mongodb + + + mongojack + org.graylog.repackaged.mongojack + + + okhttp + com.squareup.okhttp3 + + + jackson-core + com.fasterxml.jackson.core + + + jackson-databind + com.fasterxml.jackson.core + + + jackson-annotations + com.fasterxml.jackson.core + + + jackson-jaxrs-base + com.fasterxml.jackson.jaxrs + + + jackson-datatype-guava + com.fasterxml.jackson.datatype + + + jackson-datatype-jdk8 + com.fasterxml.jackson.datatype + + + jackson-datatype-jsr310 + com.fasterxml.jackson.datatype + + + jackson-datatype-joda + com.fasterxml.jackson.datatype + + + jackson-module-jsonSchema + com.fasterxml.jackson.module + + + jackson-jaxrs-json-provider + com.fasterxml.jackson.jaxrs + + + jackson-dataformat-yaml + com.fasterxml.jackson.dataformat + + + jackson-dataformat-csv + com.fasterxml.jackson.dataformat + + + metrics-annotation + io.dropwizard.metrics + + + metrics-core + io.dropwizard.metrics + + + metrics-log4j2 + io.dropwizard.metrics + + + metrics-jvm + io.dropwizard.metrics + + + metrics-jmx + io.dropwizard.metrics + + + metrics-json + io.dropwizard.metrics + + + simpleclient_dropwizard + io.prometheus + + + simpleclient_hotspot + io.prometheus + + + simpleclient_httpserver + io.prometheus + + + siv-mode + org.cryptomator + + + commons-email + org.apache.commons + + + commons-validator + commons-validator + + + jersey-hk2 + org.glassfish.jersey.inject + + + jersey-bean-validation + org.glassfish.jersey.ext + + + jersey-media-multipart + org.glassfish.jersey.media + + + jersey-container-grizzly2-http + org.glassfish.jersey.containers + + + guice-bridge + org.glassfish.hk2 + + + hk2-api + org.glassfish.hk2 + + + hk2-locator + org.glassfish.hk2 + + + javax.ws.rs-api + javax.ws.rs + + + jaxb-api + javax.xml.bind + + + reflections + org.reflections + + + opencsv + net.sf.opencsv + + + commons-io + commons-io + + + natty + com.joestelmach + + + jmte + com.floreysoft + + + disruptor + com.lmax + + + joda-time + joda-time + + + uuid + org.graylog2.repackaged + + + de.huxhorn.sulky.ulid + de.huxhorn.sulky + + + commons-codec + commons-codec + + + grok + org.graylog2.repackaged + + + gelfclient + org.graylog2 + + + swagger-annotations + io.swagger + + + hibernate-validator + org.hibernate.validator + + + bcpkix-jdk15on + org.bouncycastle + + + lucene-queryparser + org.apache.lucene + + + lucene-analysis-common + org.apache.lucene + + + classgraph + io.github.classgraph + + + s3 + software.amazon.awssdk + + + log4j-api + org.apache.logging.log4j + + + log4j-core + org.apache.logging.log4j + + + log4j-slf4j-impl + org.apache.logging.log4j + + + jcl-over-slf4j + org.slf4j + + + log4j-over-slf4j + org.slf4j + + + log4j-jul + org.apache.logging.log4j + + + jbcrypt + org.mindrot + + + unboundid-ldapsdk + com.unboundid + + + retrofit + com.squareup.retrofit2 + + + converter-jackson + com.squareup.retrofit2 + + + os-platform-finder + org.graylog.repackaged + + + javax.el-api + javax.el + + + netty-common + io.netty + + + netty-buffer + io.netty + + + netty-handler + io.netty + + + netty-codec + io.netty + + + netty-codec-dns + io.netty + + + netty-codec-http + io.netty + + + netty-resolver-dns + io.netty + + + netty-transport-native-epoll + io.netty + + + netty-transport-native-kqueue + io.netty + + + netty-tcnative-boringssl-static + io.netty + + + netty-tcnative-boringssl-static + io.netty + + + javax.annotation-api + javax.annotation + + + HdrHistogram + org.hdrhistogram + + + oshi-core + com.github.oshi + + + amqp-client + com.rabbitmq + + + kafka09_2.11 + org.graylog.shaded + + + kafka_2.13 + org.apache.kafka + + + syslog4j + org.graylog2 + + + json-path + com.jayway.jsonpath + + + java-semver + com.github.zafarkhaja + + + semver4j + org.graylog.repackaged + + + protobuf-java + com.google.protobuf + + + validation-api + javax.validation + + + geoip2 + com.maxmind.geoip2 + + + cef-parser + org.graylog.cef + + + freemarker + org.freemarker + + + asciitable + de.vandermeer + + + commons-net + commons-net + + + slf4j-api + org.slf4j + + + auto-value-annotations + com.google.auto.value + + + jdot + info.leadinglight + + + streamex + one.util + + + cron-utils + com.cronutils + + + rate-limited-logger + com.swrve + + + antlr4-runtime + org.antlr + + + jool + org.jooq + + + + + com.google.auto.value + auto-value + 1.7.4 + provided + + + + + sonatype-nexus-staging + Nexus Release Repository + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + + + sonatype-nexus-snapshots + Sonatype Nexus Snapshots + https://oss.sonatype.org/content/repositories/snapshots + + + + /usr/share/graylog-server/plugin + 17 + ${project.parent.version} + 17 + UTF-8 + true + + + diff --git a/graylog-plugin-function-base64inflate/package.json b/graylog-plugin-function-base64inflate/package.json new file mode 100644 index 0000000..ec14916 --- /dev/null +++ b/graylog-plugin-function-base64inflate/package.json @@ -0,0 +1,28 @@ +{ + "name": "Base64InflateFunction", + "version": "1.0.0-SNAPSHOT", + "description": "", + "repository": { + "type": "git", + "url": "vshulkin/graylog-plugin-function-base64inflate" + }, + "scripts": { + "build": "webpack", + "lint": "eslint src", + "lint:path": "eslint", + "test": "jest" + }, + "keywords": [ + "graylog" + ], + "author": "John Doe ", + "license": "MIT", + "eslintConfig": { + "extends": "graylog" + }, + "dependencies": { + }, + "devDependencies": { + "graylog-web-plugin": "file:../graylog2-server/graylog2-web-interface/packages/graylog-web-plugin" + } +} diff --git a/graylog-plugin-function-base64inflate/pom.xml b/graylog-plugin-function-base64inflate/pom.xml new file mode 100644 index 0000000..c7c423b --- /dev/null +++ b/graylog-plugin-function-base64inflate/pom.xml @@ -0,0 +1,255 @@ + + + + 4.0.0 + + + org.graylog.plugins + graylog-plugin-parent + 5.1.5 + + + com.example.plugins + graylog-plugin-function-base64inflate + 1.0.0-SNAPSHOT + jar + + ${project.artifactId} + Graylog ${project.artifactId} plugin. + https://www.graylog.org + + + + Vadim Shulkin + vshulkin@gmail.com + + + + + scm:git:git@github.com:vshulkin/graylog-plugin-function-base64inflate.git + scm:git:git@github.com:vshulkin/graylog-plugin-function-base64inflate.git + https://github.com/vshulkin/graylog-plugin-function-base64inflate + HEAD + + + + UTF-8 + 17 + 17 + + + true + + ${project.parent.version} + /usr/share/graylog-server/plugin + + + + + sonatype-nexus-snapshots + Sonatype Nexus Snapshots + https://oss.sonatype.org/content/repositories/snapshots + + + sonatype-nexus-staging + Nexus Release Repository + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + + + + + + + sonatype-nexus-snapshots + Sonatype Nexus Snapshots + https://oss.sonatype.org/content/repositories/snapshots + + false + + + true + + + + sonatype-nexus-releases + Sonatype Nexus Releases + https://oss.sonatype.org/content/repositories/releases + + true + + + false + + + + + + + org.graylog2 + graylog2-server + ${graylog.version} + provided + + + org.graylog.plugins + graylog-plugin-pipeline-processor + 2.5.2 + provided + + + com.google.auto.service + auto-service-annotations + 1.1.1 + + + + + org.graylog2 + graylog2-server + ${graylog.version} + test-jar + test + + + + + + + ${web.build-dir} + + src/main/resources + true + + + + + maven-assembly-plugin + + true + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.6 + + + + ${project.groupId}.${project.artifactId} + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 2.4.1 + + false + + + + package + + shade + + + + + + + + + + + + org.apache.maven.plugins + maven-release-plugin + 2.5.2 + + true + forked-path + @{project.version} + clean test + package + + + + + jdeb + org.vafer + 1.4 + + ${project.build.directory}/${project.artifactId}-${project.version}.deb + + + ${project.build.directory}/${project.build.finalName}.jar + file + + perm + ${graylog.plugin-dir} + 644 + root + root + + + + + + + + org.codehaus.mojo + rpm-maven-plugin + 2.1.4 + + Application/Internet + + /usr + + + _unpackaged_files_terminate_build 0 + _binaries_in_noarch_packages_terminate_build 0 + + 644 + 755 + root + root + + + ${graylog.plugin-dir} + + + ${project.build.directory}/ + + ${project.build.finalName}.jar + + + + + + + + + + diff --git a/graylog-plugin-function-base64inflate/src/deb/control/control b/graylog-plugin-function-base64inflate/src/deb/control/control new file mode 100644 index 0000000..dd855d6 --- /dev/null +++ b/graylog-plugin-function-base64inflate/src/deb/control/control @@ -0,0 +1,8 @@ +Package: [[name]] +Version: [[version]] +Architecture: all +Maintainer: John Doe +Section: web +Priority: optional +Depends: graylog-server | graylog-radio +Description: [[description]] diff --git a/graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunction.java b/graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunction.java new file mode 100644 index 0000000..d2c2bbb --- /dev/null +++ b/graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunction.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2020 Graylog, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the Server Side Public License, version 1, + * as published by MongoDB, Inc. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * Server Side Public License for more details. + * + * You should have received a copy of the Server Side Public License + * along with this program. If not, see + * . + */ + + +package org.graylog.plugins.custom; + +import com.google.auto.service.AutoService; +import org.graylog.plugins.pipelineprocessor.EvaluationContext; +import org.graylog.plugins.pipelineprocessor.ast.expressions.Expression; +import org.graylog.plugins.pipelineprocessor.ast.functions.AbstractFunction; +import org.graylog.plugins.pipelineprocessor.ast.functions.FunctionArgs; +import org.graylog.plugins.pipelineprocessor.ast.functions.FunctionDescriptor; +import org.graylog.plugins.pipelineprocessor.ast.functions.ParameterDescriptor; + +import java.io.ByteArrayInputStream; +import java.io.InputStreamReader; +import java.io.BufferedReader; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.zip.GZIPInputStream; + +// @Function(name = "Base64Inflate", description = "Decodes a URL-safe Base64-encoded and GZIP-compressed string") +public class Base64InflateFunction extends AbstractFunction { + + public static final String NAME = "urlsafe_base64_decode"; + + private final ParameterDescriptor inputParam = ParameterDescriptor + .string("input") + .description("The URL-safe Base64-encoded string to decode") + .build(); + + + @Override + public FunctionDescriptor descriptor() { + return FunctionDescriptor.builder() + .name("Base64Inflate") + .description("Decodes a URL-safe Base64-encoded and GZIP-compressed string") + .params(inputParam) + .returnType(String.class) + .build(); + } + + @Override + public String evaluate(FunctionArgs args, EvaluationContext context) { + final String input = inputParam.required(args, context); + try { + byte[] decoded = Base64.getUrlDecoder().decode(input); + try (GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(decoded)); + InputStreamReader isr = new InputStreamReader(gis, StandardCharsets.UTF_8); + BufferedReader br = new BufferedReader(isr)) { + + StringBuilder out = new StringBuilder(); + String line; + while ((line = br.readLine()) != null) { + out.append(line); + } + return out.toString(); + } + } catch (Exception e) { + // You may choose to log this or return null + return null; + } + } +} + diff --git a/graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunctionMetaData.java b/graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunctionMetaData.java new file mode 100644 index 0000000..1cabdea --- /dev/null +++ b/graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunctionMetaData.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2020 Graylog, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the Server Side Public License, version 1, + * as published by MongoDB, Inc. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * Server Side Public License for more details. + * + * You should have received a copy of the Server Side Public License + * along with this program. If not, see + * . + */ +package org.graylog.plugins.custom; + +import org.graylog2.plugin.PluginMetaData; +import org.graylog2.plugin.ServerStatus; +import org.graylog2.plugin.Version; + +import java.net.URI; +import java.util.Collections; +import java.util.Set; + +/** + * Implement the PluginMetaData interface here. + */ +public class Base64InflateFunctionMetaData implements PluginMetaData { + private static final String PLUGIN_PROPERTIES = "org.graylog.plugins.graylog-plugin-function-base64inflate/graylog-plugin.properties"; + + @Override + public String getUniqueId() { + return "org.graylog.plugins.custom.Base64InflateFunctionPlugin"; + } + + @Override + public String getName() { + return "Base64InflateFunction"; + } + + @Override + public String getAuthor() { + return "John Doe "; + } + + @Override + public URI getURL() { + return URI.create("https://github.com/vshulkin/graylog-plugin-function-base64inflate"); + } + + @Override + public Version getVersion() { + return Version.fromPluginProperties(getClass(), PLUGIN_PROPERTIES, "version", Version.from(0, 0, 0, "unknown")); + } + + @Override + public String getDescription() { + // TODO Insert correct plugin description + return "Description of Base64InflateFunction plugin"; + } + + @Override + public Version getRequiredVersion() { + return Version.fromPluginProperties(getClass(), PLUGIN_PROPERTIES, "graylog.version", Version.from(0, 0, 0, "unknown")); + } + + @Override + public Set getRequiredCapabilities() { + return Collections.emptySet(); + } +} diff --git a/graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunctionModule.java b/graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunctionModule.java new file mode 100644 index 0000000..eee45e3 --- /dev/null +++ b/graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunctionModule.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2020 Graylog, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the Server Side Public License, version 1, + * as published by MongoDB, Inc. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * Server Side Public License for more details. + * + * You should have received a copy of the Server Side Public License + * along with this program. If not, see + * . + */ +package org.graylog.plugins.custom; + +import org.graylog2.plugin.PluginConfigBean; +import org.graylog2.plugin.PluginModule; + +import java.util.Collections; +import java.util.Set; + +/** + * Extend the PluginModule abstract class here to add you plugin to the system. + */ +public class Base64InflateFunctionModule extends PluginModule { + /** + * Returns all configuration beans required by this plugin. + * + * Implementing this method is optional. The default method returns an empty {@link Set}. + */ + @Override + public Set getConfigBeans() { + return Collections.emptySet(); + } + + @Override + protected void configure() { + /* + * Register your plugin types here. + * + * Examples: + * + * addMessageInput(Class); + * addMessageFilter(Class); + * addMessageOutput(Class); + * addPeriodical(Class); + * addAlarmCallback(Class); + * addInitializer(Class); + * addRestResource(Class); + * + * + * Add all configuration beans returned by getConfigBeans(): + * + * addConfigBeans(); + */ + } +} diff --git a/graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunctionPlugin.java b/graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunctionPlugin.java new file mode 100644 index 0000000..f2080ae --- /dev/null +++ b/graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunctionPlugin.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2020 Graylog, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the Server Side Public License, version 1, + * as published by MongoDB, Inc. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * Server Side Public License for more details. + * + * You should have received a copy of the Server Side Public License + * along with this program. If not, see + * . + */ +package org.graylog.plugins.custom; + +import org.graylog2.plugin.Plugin; +import org.graylog2.plugin.PluginMetaData; +import org.graylog2.plugin.PluginModule; + +import java.util.Collection; +import java.util.Collections; + +/** + * Implement the Plugin interface here. + */ +public class Base64InflateFunctionPlugin implements Plugin { + @Override + public PluginMetaData metadata() { + return new Base64InflateFunctionMetaData(); + } + + @Override + public Collection modules () { + return Collections.singletonList(new Base64InflateFunctionModule()); + } +} diff --git a/graylog-plugin-function-base64inflate/src/main/resources/META-INF/services/org.graylog2.plugin.Plugin b/graylog-plugin-function-base64inflate/src/main/resources/META-INF/services/org.graylog2.plugin.Plugin new file mode 100644 index 0000000..41cf435 --- /dev/null +++ b/graylog-plugin-function-base64inflate/src/main/resources/META-INF/services/org.graylog2.plugin.Plugin @@ -0,0 +1 @@ +org.graylog.plugins.custom.Base64InflateFunctionPlugin \ No newline at end of file diff --git a/graylog-plugin-function-base64inflate/src/main/resources/org.graylog.plugins.graylog-plugin-function-base64inflate/graylog-plugin.properties b/graylog-plugin-function-base64inflate/src/main/resources/org.graylog.plugins.graylog-plugin-function-base64inflate/graylog-plugin.properties new file mode 100644 index 0000000..63e3eb5 --- /dev/null +++ b/graylog-plugin-function-base64inflate/src/main/resources/org.graylog.plugins.graylog-plugin-function-base64inflate/graylog-plugin.properties @@ -0,0 +1,12 @@ +# The plugin version +version=${project.version} + +# The required Graylog server version +graylog.version=${graylog.version} + +# When set to true (the default) the plugin gets a separate class loader +# when loading the plugin. When set to false, the plugin shares a class loader +# with other plugins that have isolated=false. +# +# Do not disable this unless this plugin depends on another plugin! +isolated=true diff --git a/graylog-plugin-function-base64inflate/src/web/index.jsx b/graylog-plugin-function-base64inflate/src/web/index.jsx new file mode 100644 index 0000000..23fc2f6 --- /dev/null +++ b/graylog-plugin-function-base64inflate/src/web/index.jsx @@ -0,0 +1,26 @@ +import 'webpack-entry'; + +import { PluginManifest, PluginStore } from 'graylog-web-plugin/plugin'; + +import packageJson from '../../package.json'; + +const manifest = new PluginManifest(packageJson, { + /* This is the place where you define which entities you are providing to the web interface. + Right now you can add routes and navigation elements to it. + + Examples: */ + + // Adding a route to /sample, rendering YourReactComponent when called: + + // routes: [ + // { path: '/sample', component: YourReactComponent, permissions: 'inputs:create' }, + // ], + + // Adding an element to the top navigation pointing to /sample named "Sample": + + // navigation: [ + // { path: '/sample', description: 'Sample' }, + // ] +}); + +PluginStore.register(manifest); diff --git a/graylog-plugin-function-base64inflate/target/classes/META-INF/services/org.graylog2.plugin.Plugin b/graylog-plugin-function-base64inflate/target/classes/META-INF/services/org.graylog2.plugin.Plugin new file mode 100644 index 0000000..41cf435 --- /dev/null +++ b/graylog-plugin-function-base64inflate/target/classes/META-INF/services/org.graylog2.plugin.Plugin @@ -0,0 +1 @@ +org.graylog.plugins.custom.Base64InflateFunctionPlugin \ No newline at end of file diff --git a/graylog-plugin-function-base64inflate/target/classes/org.graylog.plugins.graylog-plugin-function-base64inflate/graylog-plugin.properties b/graylog-plugin-function-base64inflate/target/classes/org.graylog.plugins.graylog-plugin-function-base64inflate/graylog-plugin.properties new file mode 100644 index 0000000..364ac82 --- /dev/null +++ b/graylog-plugin-function-base64inflate/target/classes/org.graylog.plugins.graylog-plugin-function-base64inflate/graylog-plugin.properties @@ -0,0 +1,12 @@ +# The plugin version +version=1.0.0-SNAPSHOT + +# The required Graylog server version +graylog.version=5.1.5 + +# When set to true (the default) the plugin gets a separate class loader +# when loading the plugin. When set to false, the plugin shares a class loader +# with other plugins that have isolated=false. +# +# Do not disable this unless this plugin depends on another plugin! +isolated=true diff --git a/graylog-plugin-function-base64inflate/target/classes/org/graylog/plugins/custom/Base64InflateFunction.class b/graylog-plugin-function-base64inflate/target/classes/org/graylog/plugins/custom/Base64InflateFunction.class new file mode 100644 index 0000000000000000000000000000000000000000..467c8d58febbe3c7cd2fa2a4902ab26be26e597a GIT binary patch literal 4999 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 OG5~a|lzcgXSos2_6q!;0 literal 0 HcmV?d00001 diff --git a/graylog-plugin-function-base64inflate/target/classes/org/graylog/plugins/custom/Base64InflateFunctionPlugin.class b/graylog-plugin-function-base64inflate/target/classes/org/graylog/plugins/custom/Base64InflateFunctionPlugin.class new file mode 100644 index 0000000000000000000000000000000000000000..f8779f3d7d640f42e07c7031a32932eb0b3438ed GIT binary patch literal 921 zcmbVKT}vB56g^|28#l39`(^Eiv9%@Xg9D->B>GT`P}qJzMDTI4nQliWGi7&H=)ck@ zi-JF(KT5p2o5~VwY5OuCckVgo-ZS^-)%hiWZLIj1K*d9~fk{j;%pHki!L=|E|I|N{ zp<|fpDx=&EL#5R|@K9sevT?+tSbWzu;@@-{DU+j7MEu7p-P3V+0 zAEXoSgcClzOsvkZ`Og$~kZS3}N5#h-%zBt>;4bDF9^@sbPHDbtwWgX$F=3cVl!>%- z)&we{K2}=6cypb05z4_?R>#Br|0wQr?tzDg42z}4)<)*=;+>(oYX_2HHc&=>Oox3L z?~A^s$b4W!p$|l?vim4lbzc?ru@#gk|H|${uES6plJNsFp5b+?UFI1p?binp#vA5N zlkfsTZu6Fsrh6(f!lg0Q-u+El_fLAcMrVhp{GLtYQ0}SBhvu#0Q}nZ%)q-W*qlu+o zr}3@OPE$+kBf4?g8SRsA&cIITFo6YHvuEHL9@E+=60nFTbYpl*@dCV-lLEC1c!y`0 wKB4zAzFET8Zt%~sL|K{m#t2`(fKT|w56p~Hyed)DM-t<8 literal 0 HcmV?d00001 diff --git a/graylog-plugin-function-base64inflate/target/graylog-plugin-function-base64inflate-1.0.0-SNAPSHOT.jar b/graylog-plugin-function-base64inflate/target/graylog-plugin-function-base64inflate-1.0.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..9ec4c690381933a809a8f97a47dcb82ea88e1fdf GIT binary patch literal 12935 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 literal 0 HcmV?d00001 diff --git a/graylog-plugin-function-base64inflate/webpack.config.js b/graylog-plugin-function-base64inflate/webpack.config.js new file mode 100644 index 0000000..1a8d948 --- /dev/null +++ b/graylog-plugin-function-base64inflate/webpack.config.js @@ -0,0 +1,8 @@ +const path = require('path'); +const { PluginWebpackConfig } = require('graylog-web-plugin'); +const { loadBuildConfig } = require('graylog-web-plugin'); + +// Remember to use the same name here and in `getUniqueId()` in the java MetaData class +module.exports = new PluginWebpackConfig(__dirname, 'org.graylog.plugins.custom.Base64InflateFunctionPlugin', loadBuildConfig(path.resolve(__dirname, './build.config')), { + // Here goes your additional webpack configuration. +}); diff --git a/graylog-plugin-function-strlen b/graylog-plugin-function-strlen new file mode 160000 index 0000000..d0d8773 --- /dev/null +++ b/graylog-plugin-function-strlen @@ -0,0 +1 @@ +Subproject commit d0d877357a2c809777328d131758e1b1601fb78e