Skip to content

Commit

Permalink
Merge pull request #676 from GDATASoftwareAG/java/http_api
Browse files Browse the repository at this point in the history
Java/http api
  • Loading branch information
lennartdohmann authored Jan 31, 2025
2 parents c2e4b5a + 4ec870f commit 4e2e065
Show file tree
Hide file tree
Showing 61 changed files with 2,989 additions and 2,085 deletions.
48 changes: 40 additions & 8 deletions .github/workflows/ci-java.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ on:
env:
CLIENT_ID: ${{ secrets.CLIENT_ID }}
CLIENT_SECRET: ${{secrets.CLIENT_SECRET}}
VAAS_URL: "wss://gateway.production.vaas.gdatasecurity.de"
VAAS_URL: "https://gateway.production.vaas.gdatasecurity.de"
TOKEN_URL: "https://account.gdata.de/realms/vaas-production/protocol/openid-connect/token"
VAAS_CLIENT_ID: ${{ secrets.VAAS_CLIENT_ID }}
VAAS_USER_NAME: ${{ secrets.VAAS_USER_NAME }}
Expand All @@ -54,7 +54,7 @@ jobs:
run: |
echo "CLIENT_ID=${{ secrets.STAGING_CLIENT_ID }}" >> $GITHUB_ENV
echo "CLIENT_SECRET=${{ secrets.STAGING_CLIENT_SECRET }}" >> $GITHUB_ENV
echo "VAAS_URL=wss://gateway.staging.vaas.gdatasecurity.de" >> $GITHUB_ENV
echo "VAAS_URL=https://gateway.staging.vaas.gdatasecurity.de" >> $GITHUB_ENV
echo "TOKEN_URL=https://account-staging.gdata.de/realms/vaas-staging/protocol/openid-connect/token" >> $GITHUB_ENV
echo "VAAS_CLIENT_ID=${{ secrets.STAGING_VAAS_CLIENT_ID }}" >> $GITHUB_ENV
echo "VAAS_USER_NAME=${{ secrets.STAGING_VAAS_USER_NAME }}" >> $GITHUB_ENV
Expand All @@ -65,7 +65,7 @@ jobs:
run: |
echo "CLIENT_ID=${{ secrets.DEVELOP_CLIENT_ID }}" >> $GITHUB_ENV
echo "CLIENT_SECRET=${{ secrets.DEVELOP_CLIENT_SECRET }}" >> $GITHUB_ENV
echo "VAAS_URL=wss://gateway.develop.vaas.gdatasecurity.de" >> $GITHUB_ENV
echo "VAAS_URL=https://gateway.develop.vaas.gdatasecurity.de" >> $GITHUB_ENV
echo "TOKEN_URL=https://account-staging.gdata.de/realms/vaas-develop/protocol/openid-connect/token" >> $GITHUB_ENV
echo "VAAS_CLIENT_ID=${{ secrets.DEVELOP_VAAS_CLIENT_ID }}" >> $GITHUB_ENV
echo "VAAS_USER_NAME=${{ secrets.DEVELOP_VAAS_USER_NAME }}" >> $GITHUB_ENV
Expand All @@ -89,27 +89,59 @@ jobs:
gradle-version: "8.6"
build-root-directory: java

- name: run examples for file
- name: publish local Maven package for examples
uses: gradle/gradle-build-action@v3
with:
arguments: publishToLocalMaven
gradle-version: "8.6"
build-root-directory: java

- name: run forSha256 example
uses: gradle/gradle-build-action@v3
with:
arguments: sha256Scan
gradle-version: "8.6"
build-root-directory: java/examples/VaasExample

- name: run forFile example
env:
SCAN_PATH: "src/main/java/de/gdata/vaasexample/Main.java"
SCAN_PATH: "build.gradle"
uses: gradle/gradle-build-action@v3
with:
arguments: fileScan
gradle-version: "8.6"
build-root-directory: java/examples/VaasExample

- name: run examples for url
- name: run forStream example
env:
SCAN_PATH: "build.gradle"
uses: gradle/gradle-build-action@v3
with:
arguments: streamScan
gradle-version: "8.6"
build-root-directory: java/examples/VaasExample

- name: run forUrl example
uses: gradle/gradle-build-action@v3
with:
arguments: urlScan
gradle-version: "8.6"
build-root-directory: java/examples/VaasExample
build-root-directory: java/examples/VaasExample

- name: run authentication examples
- name: run authentication example
uses: gradle/gradle-build-action@v3
with:
arguments: authentication
gradle-version: "8.6"
build-root-directory: java/examples/VaasExample

- name: run config example
env:
SCAN_PATH: "build.gradle"
uses: gradle/gradle-build-action@v3
with:
arguments: config
gradle-version: "8.6"
build-root-directory: java/examples/VaasExample

- name: extract version
Expand Down
63 changes: 47 additions & 16 deletions java/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,18 @@ java {
dependencies {
implementation 'org.projectlombok:lombok:1.18.36'
implementation 'com.google.code.gson:gson:2.11.0'
implementation 'org.java-websocket:Java-WebSocket:1.6.0'
implementation 'org.jetbrains:annotations:26.0.1'
implementation 'io.github.cdimascio:dotenv-java:3.1.0'
implementation 'com.ibm.async:asyncutil:0.1.0'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.18.2'
testImplementation 'org.testng:testng:7.10.2'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.4'
testImplementation 'org.slf4j:slf4j-simple:2.0.16'

testImplementation 'org.mockito:mockito-core:5.14.2'
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.11.3'
testImplementation 'com.amazonaws:aws-java-sdk-s3:1.12.780'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.4'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.11.4'


compileOnly 'org.projectlombok:lombok:1.18.36'
annotationProcessor 'org.projectlombok:lombok:1.18.36'

Expand All @@ -41,13 +42,13 @@ dependencies {
test {
useJUnitPlatform()
testLogging {
events "passed", "skipped", "failed"
events "passed", "skipped", "failed"

showExceptions true
exceptionFormat "full"
showCauses true
showStackTraces true
showStandardStreams true
showExceptions true
exceptionFormat "full"
showCauses true
showStackTraces true
showStandardStreams true
}
}

Expand All @@ -69,6 +70,8 @@ tasks.register('testWithoutErrorLogProducer', Test) {
publishing {
publications {
mavenJava(MavenPublication) {
from components.java

pom {
name = 'G DATA VaaS'
description = 'Verdict-as-a-Service (VaaS) is a service that provides a platform for scanning files for malware and other threats. It allows easy integration in your application. With a few lines of code, you can start scanning files for malware.'
Expand All @@ -90,22 +93,50 @@ publishing {
connection = 'scm:git:[email protected]:GDATASoftwareAG/vaas.git'
url = 'https://github.com/GDATASoftwareAG/vaas'
}

from components.java
}
}
}

signing {
def signingKey = findProperty("signingKey")
def signingPassword = findProperty("signingPassword")
useInMemoryPgpKeys(signingKey, signingPassword)
sign publishing.publications.mavenJava
def isReleaseBuild = project.gradle.taskGraph.hasTask("publishToMavenCentral")

if (isReleaseBuild && findProperty("signingKey") && findProperty("signingPassword")) {
useInMemoryPgpKeys(findProperty("signingKey"), findProperty("signingPassword"))
sign publishing.publications.mavenJava
} else {
logger.lifecycle("Skipping signing as this is not a release build or no signing credentials are provided.")
}
}


repositories {
// Veröffentlichung in ein internes lokales Verzeichnis (nur optional)
maven {
url = layout.buildDirectory.dir('repos/releases')
}

// Maven Central
maven {
name = "mavenCentral"
url = "https://repo.maven.apache.org/maven2"
credentials {
username = findProperty("mavenCentralUsername") ?: ""
password = findProperty("mavenCentralPassword") ?: ""
}
}
}
}

tasks.register('publishToLocalMaven') {
group = 'publishing'
description = 'Publish the library to the local Maven repository (~/.m2/repository).'

dependsOn 'publishMavenJavaPublicationToMavenLocal'
}

tasks.register('publishToMavenCentral') {
group = 'publishing'
description = 'Publish the library to Maven Central.'

dependsOn 'publishMavenJavaPublicationToMavenRepository'
}
27 changes: 27 additions & 0 deletions java/examples/VaasExample/ReadMe.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
You need to set a .env file with the following variables:

```
VAAS_URL=https://gateway.staging.vaas.gdatasecurity.de
TOKEN_URL=https://account-staging.gdata.de/realms/vaas-staging/protocol/openid-connect/token
CLIENT_ID=YOUR_CLIENT_ID
CLIENT_SECRET=YOUR_CLIENT_SECRET
VAAS_USER_NAME=YOUR_USER_NAME
VAAS_PASSWORD=YOUR_PASSWORD
VAAS_CLIENT_ID=vaas-customer
```

## How to run the project

You should use the published Maven package.
If you want to run the examples locally you need to publish a local Maven package with the given gradle task:

```gradle
tasks.register('publishToLocalMaven') {
group = 'publishing'
description = 'Publish the library to the local Maven repository (~/.m2/repository).'
dependsOn 'publishMavenJavaPublicationToMavenLocal'
}
```

You can find the task in the projects root located in `java/build.gradle`.
30 changes: 24 additions & 6 deletions java/examples/VaasExample/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,43 @@ group 'de.gdata.vaasexample'
version '1.0-SNAPSHOT'

repositories {
mavenLocal()
mavenCentral()
}

dependencies {
implementation 'org.slf4j:slf4j-nop:2.0.16'
implementation 'de.gdata:vaas:8.3.8'
implementation 'de.gdata:vaas:0.0.0'
implementation 'org.projectlombok:lombok:1.18.36'
implementation 'io.github.cdimascio:dotenv-java:3.1.0'
}

task fileScan(type: JavaExec) {
tasks.register('sha256Scan', JavaExec) {
classpath = sourceSets.main.runtimeClasspath
mainClass = 'de.gdata.vaasexample.Main'
mainClass = 'de.gdata.vaasexample.ForSha256Scan'
}

task urlScan(type: JavaExec) {
tasks.register('fileScan', JavaExec) {
classpath = sourceSets.main.runtimeClasspath
mainClass = 'de.gdata.vaasexample.UrlScan'
mainClass = 'de.gdata.vaasexample.ForFileScan'
}

task authentication(type: JavaExec) {
tasks.register('streamScan', JavaExec) {
classpath = sourceSets.main.runtimeClasspath
mainClass = 'de.gdata.vaasexample.ForStreamScan'
}

tasks.register('urlScan', JavaExec) {
classpath = sourceSets.main.runtimeClasspath
mainClass = 'de.gdata.vaasexample.ForUrlScan'
}

tasks.register('authentication', JavaExec) {
classpath = sourceSets.main.runtimeClasspath
mainClass = 'de.gdata.vaasexample.Authentication'
}

tasks.register('config', JavaExec) {
classpath = sourceSets.main.runtimeClasspath
mainClass = 'de.gdata.vaasexample.Config'
}
33 changes: 0 additions & 33 deletions java/examples/VaasExample/build.local.gradle

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
package de.gdata.vaasexample;

import de.gdata.vaas.*;
import de.gdata.vaas.messages.VerdictRequestAttributes;
import de.gdata.vaas.authentication.*;

import java.net.URI;


public class Authentication {
public static void main(String[] args) throws Exception {
var clientId = System.getenv("CLIENT_ID");
var clientSecret = System.getenv("CLIENT_SECRET");
var vaasclientId = System.getenv("VAAS_CLIENT_ID");
var userName = System.getenv("VAAS_USER_NAME");
var password = System.getenv("VAAS_PASSWORD");
var tokenUrl = System.getenv("TOKEN_URL");
if (tokenUrl == null) { tokenUrl = "https://account.gdata.de/realms/vaas-production/protocol/openid-connect/token"; }
var vaasUrl = System.getenv("VAAS_URL");
if (vaasUrl == null) { vaasUrl = "wss://gateway.production.vaas.gdatasecurity.de"; }
var env = new Environment();

var clientId = env.clientId;
var clientSecret = env.clientSecret;
var vaasclientId = env.vaasClientId;
var userName = env.userName;
var password = env.password;
var tokenUrl = env.tokenUrl;
var vaasUrl = env.vaasUrl;

// If you got a username and password from us, you can use the ResourceOwnerPasswordAuthenticator like this
var authenticator = new ResourceOwnerPasswordGrantAuthenticator(
Expand All @@ -36,12 +37,7 @@ public static void main(String[] args) throws Exception {

var config = new VaasConfig(new URI(vaasUrl));
var vaas = new Vaas(config, authenticator);
vaas.connect();

var verdictRequestAttributes = new VerdictRequestAttributes();
verdictRequestAttributes.setTenantId("fileTenant");
var verdict = vaas.forSha256(new Sha256("275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f"), verdictRequestAttributes);
vaas.disconnect();
var verdict = vaas.forSha256(new Sha256("275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f"));
System.out.printf("File %s was detected as %s", verdict.getSha256(), verdict.getVerdict());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package de.gdata.vaasexample;

import de.gdata.vaas.*;
import de.gdata.vaas.authentication.*;

import java.net.URI;
import java.nio.file.Path;

public class Config {
public static void main(String[] args) throws Exception {
var env = new Environment();

var timeoutInMs = 5000;
var useCache = false;
var useHashLookup = false;
var config = new VaasConfig(timeoutInMs,
useCache,
useHashLookup,
new URI(env.vaasUrl));

var authenticator = new ClientCredentialsGrantAuthenticator(env.clientId, env.clientSecret, new URI(env.tokenUrl));
var vaas = new Vaas(config, authenticator);

var file = Path.of(Environment.getenv("SCAN_PATH"));
var verdict = vaas.forFile(file);

System.out.printf("File %s was sync detected as %s", verdict.getSha256(), verdict.getVerdict());

vaas.forFileAsync(file).thenAccept(vaasResult -> {
System.out.printf("\nFile %s was async detected as %s", verdict.getSha256(), verdict.getVerdict());
}).get();
}
}
Loading

0 comments on commit 4e2e065

Please sign in to comment.