Skip to content

Commit 4e2e065

Browse files
Merge pull request #676 from GDATASoftwareAG/java/http_api
Java/http api
2 parents c2e4b5a + 4ec870f commit 4e2e065

File tree

61 files changed

+2989
-2085
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+2989
-2085
lines changed

.github/workflows/ci-java.yaml

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ on:
2828
env:
2929
CLIENT_ID: ${{ secrets.CLIENT_ID }}
3030
CLIENT_SECRET: ${{secrets.CLIENT_SECRET}}
31-
VAAS_URL: "wss://gateway.production.vaas.gdatasecurity.de"
31+
VAAS_URL: "https://gateway.production.vaas.gdatasecurity.de"
3232
TOKEN_URL: "https://account.gdata.de/realms/vaas-production/protocol/openid-connect/token"
3333
VAAS_CLIENT_ID: ${{ secrets.VAAS_CLIENT_ID }}
3434
VAAS_USER_NAME: ${{ secrets.VAAS_USER_NAME }}
@@ -54,7 +54,7 @@ jobs:
5454
run: |
5555
echo "CLIENT_ID=${{ secrets.STAGING_CLIENT_ID }}" >> $GITHUB_ENV
5656
echo "CLIENT_SECRET=${{ secrets.STAGING_CLIENT_SECRET }}" >> $GITHUB_ENV
57-
echo "VAAS_URL=wss://gateway.staging.vaas.gdatasecurity.de" >> $GITHUB_ENV
57+
echo "VAAS_URL=https://gateway.staging.vaas.gdatasecurity.de" >> $GITHUB_ENV
5858
echo "TOKEN_URL=https://account-staging.gdata.de/realms/vaas-staging/protocol/openid-connect/token" >> $GITHUB_ENV
5959
echo "VAAS_CLIENT_ID=${{ secrets.STAGING_VAAS_CLIENT_ID }}" >> $GITHUB_ENV
6060
echo "VAAS_USER_NAME=${{ secrets.STAGING_VAAS_USER_NAME }}" >> $GITHUB_ENV
@@ -65,7 +65,7 @@ jobs:
6565
run: |
6666
echo "CLIENT_ID=${{ secrets.DEVELOP_CLIENT_ID }}" >> $GITHUB_ENV
6767
echo "CLIENT_SECRET=${{ secrets.DEVELOP_CLIENT_SECRET }}" >> $GITHUB_ENV
68-
echo "VAAS_URL=wss://gateway.develop.vaas.gdatasecurity.de" >> $GITHUB_ENV
68+
echo "VAAS_URL=https://gateway.develop.vaas.gdatasecurity.de" >> $GITHUB_ENV
6969
echo "TOKEN_URL=https://account-staging.gdata.de/realms/vaas-develop/protocol/openid-connect/token" >> $GITHUB_ENV
7070
echo "VAAS_CLIENT_ID=${{ secrets.DEVELOP_VAAS_CLIENT_ID }}" >> $GITHUB_ENV
7171
echo "VAAS_USER_NAME=${{ secrets.DEVELOP_VAAS_USER_NAME }}" >> $GITHUB_ENV
@@ -89,27 +89,59 @@ jobs:
8989
gradle-version: "8.6"
9090
build-root-directory: java
9191

92-
- name: run examples for file
92+
- name: publish local Maven package for examples
93+
uses: gradle/gradle-build-action@v3
94+
with:
95+
arguments: publishToLocalMaven
96+
gradle-version: "8.6"
97+
build-root-directory: java
98+
99+
- name: run forSha256 example
100+
uses: gradle/gradle-build-action@v3
101+
with:
102+
arguments: sha256Scan
103+
gradle-version: "8.6"
104+
build-root-directory: java/examples/VaasExample
105+
106+
- name: run forFile example
93107
env:
94-
SCAN_PATH: "src/main/java/de/gdata/vaasexample/Main.java"
108+
SCAN_PATH: "build.gradle"
95109
uses: gradle/gradle-build-action@v3
96110
with:
97111
arguments: fileScan
98112
gradle-version: "8.6"
99113
build-root-directory: java/examples/VaasExample
100114

101-
- name: run examples for url
115+
- name: run forStream example
116+
env:
117+
SCAN_PATH: "build.gradle"
118+
uses: gradle/gradle-build-action@v3
119+
with:
120+
arguments: streamScan
121+
gradle-version: "8.6"
122+
build-root-directory: java/examples/VaasExample
123+
124+
- name: run forUrl example
102125
uses: gradle/gradle-build-action@v3
103126
with:
104127
arguments: urlScan
105128
gradle-version: "8.6"
106-
build-root-directory: java/examples/VaasExample
129+
build-root-directory: java/examples/VaasExample
107130

108-
- name: run authentication examples
131+
- name: run authentication example
109132
uses: gradle/gradle-build-action@v3
110133
with:
111134
arguments: authentication
112135
gradle-version: "8.6"
136+
build-root-directory: java/examples/VaasExample
137+
138+
- name: run config example
139+
env:
140+
SCAN_PATH: "build.gradle"
141+
uses: gradle/gradle-build-action@v3
142+
with:
143+
arguments: config
144+
gradle-version: "8.6"
113145
build-root-directory: java/examples/VaasExample
114146

115147
- name: extract version

java/build.gradle

Lines changed: 47 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,18 @@ java {
2020
dependencies {
2121
implementation 'org.projectlombok:lombok:1.18.36'
2222
implementation 'com.google.code.gson:gson:2.11.0'
23-
implementation 'org.java-websocket:Java-WebSocket:1.6.0'
2423
implementation 'org.jetbrains:annotations:26.0.1'
2524
implementation 'io.github.cdimascio:dotenv-java:3.1.0'
25+
implementation 'com.ibm.async:asyncutil:0.1.0'
26+
implementation 'com.fasterxml.jackson.core:jackson-databind:2.18.2'
2627
testImplementation 'org.testng:testng:7.10.2'
2728
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.11.4'
28-
testImplementation 'org.slf4j:slf4j-simple:2.0.16'
29-
29+
testImplementation 'org.mockito:mockito-core:5.14.2'
30+
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.11.3'
31+
testImplementation 'com.amazonaws:aws-java-sdk-s3:1.12.780'
3032
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.11.4'
3133
testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.11.4'
3234

33-
3435
compileOnly 'org.projectlombok:lombok:1.18.36'
3536
annotationProcessor 'org.projectlombok:lombok:1.18.36'
3637

@@ -41,13 +42,13 @@ dependencies {
4142
test {
4243
useJUnitPlatform()
4344
testLogging {
44-
events "passed", "skipped", "failed"
45+
events "passed", "skipped", "failed"
4546

46-
showExceptions true
47-
exceptionFormat "full"
48-
showCauses true
49-
showStackTraces true
50-
showStandardStreams true
47+
showExceptions true
48+
exceptionFormat "full"
49+
showCauses true
50+
showStackTraces true
51+
showStandardStreams true
5152
}
5253
}
5354

@@ -69,6 +70,8 @@ tasks.register('testWithoutErrorLogProducer', Test) {
6970
publishing {
7071
publications {
7172
mavenJava(MavenPublication) {
73+
from components.java
74+
7275
pom {
7376
name = 'G DATA VaaS'
7477
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.'
@@ -90,22 +93,50 @@ publishing {
9093
connection = 'scm:git:[email protected]:GDATASoftwareAG/vaas.git'
9194
url = 'https://github.com/GDATASoftwareAG/vaas'
9295
}
93-
94-
from components.java
9596
}
9697
}
9798
}
9899

99100
signing {
100-
def signingKey = findProperty("signingKey")
101-
def signingPassword = findProperty("signingPassword")
102-
useInMemoryPgpKeys(signingKey, signingPassword)
103-
sign publishing.publications.mavenJava
101+
def isReleaseBuild = project.gradle.taskGraph.hasTask("publishToMavenCentral")
102+
103+
if (isReleaseBuild && findProperty("signingKey") && findProperty("signingPassword")) {
104+
useInMemoryPgpKeys(findProperty("signingKey"), findProperty("signingPassword"))
105+
sign publishing.publications.mavenJava
106+
} else {
107+
logger.lifecycle("Skipping signing as this is not a release build or no signing credentials are provided.")
108+
}
104109
}
105110

111+
106112
repositories {
113+
// Veröffentlichung in ein internes lokales Verzeichnis (nur optional)
107114
maven {
108115
url = layout.buildDirectory.dir('repos/releases')
109116
}
117+
118+
// Maven Central
119+
maven {
120+
name = "mavenCentral"
121+
url = "https://repo.maven.apache.org/maven2"
122+
credentials {
123+
username = findProperty("mavenCentralUsername") ?: ""
124+
password = findProperty("mavenCentralPassword") ?: ""
125+
}
126+
}
110127
}
111128
}
129+
130+
tasks.register('publishToLocalMaven') {
131+
group = 'publishing'
132+
description = 'Publish the library to the local Maven repository (~/.m2/repository).'
133+
134+
dependsOn 'publishMavenJavaPublicationToMavenLocal'
135+
}
136+
137+
tasks.register('publishToMavenCentral') {
138+
group = 'publishing'
139+
description = 'Publish the library to Maven Central.'
140+
141+
dependsOn 'publishMavenJavaPublicationToMavenRepository'
142+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
You need to set a .env file with the following variables:
2+
3+
```
4+
VAAS_URL=https://gateway.staging.vaas.gdatasecurity.de
5+
TOKEN_URL=https://account-staging.gdata.de/realms/vaas-staging/protocol/openid-connect/token
6+
CLIENT_ID=YOUR_CLIENT_ID
7+
CLIENT_SECRET=YOUR_CLIENT_SECRET
8+
VAAS_USER_NAME=YOUR_USER_NAME
9+
VAAS_PASSWORD=YOUR_PASSWORD
10+
VAAS_CLIENT_ID=vaas-customer
11+
```
12+
13+
## How to run the project
14+
15+
You should use the published Maven package.
16+
If you want to run the examples locally you need to publish a local Maven package with the given gradle task:
17+
18+
```gradle
19+
tasks.register('publishToLocalMaven') {
20+
group = 'publishing'
21+
description = 'Publish the library to the local Maven repository (~/.m2/repository).'
22+
23+
dependsOn 'publishMavenJavaPublicationToMavenLocal'
24+
}
25+
```
26+
27+
You can find the task in the projects root located in `java/build.gradle`.

java/examples/VaasExample/build.gradle

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,43 @@ group 'de.gdata.vaasexample'
66
version '1.0-SNAPSHOT'
77

88
repositories {
9+
mavenLocal()
910
mavenCentral()
1011
}
1112

1213
dependencies {
1314
implementation 'org.slf4j:slf4j-nop:2.0.16'
14-
implementation 'de.gdata:vaas:8.3.8'
15+
implementation 'de.gdata:vaas:0.0.0'
16+
implementation 'org.projectlombok:lombok:1.18.36'
17+
implementation 'io.github.cdimascio:dotenv-java:3.1.0'
1518
}
1619

17-
task fileScan(type: JavaExec) {
20+
tasks.register('sha256Scan', JavaExec) {
1821
classpath = sourceSets.main.runtimeClasspath
19-
mainClass = 'de.gdata.vaasexample.Main'
22+
mainClass = 'de.gdata.vaasexample.ForSha256Scan'
2023
}
2124

22-
task urlScan(type: JavaExec) {
25+
tasks.register('fileScan', JavaExec) {
2326
classpath = sourceSets.main.runtimeClasspath
24-
mainClass = 'de.gdata.vaasexample.UrlScan'
27+
mainClass = 'de.gdata.vaasexample.ForFileScan'
2528
}
2629

27-
task authentication(type: JavaExec) {
30+
tasks.register('streamScan', JavaExec) {
31+
classpath = sourceSets.main.runtimeClasspath
32+
mainClass = 'de.gdata.vaasexample.ForStreamScan'
33+
}
34+
35+
tasks.register('urlScan', JavaExec) {
36+
classpath = sourceSets.main.runtimeClasspath
37+
mainClass = 'de.gdata.vaasexample.ForUrlScan'
38+
}
39+
40+
tasks.register('authentication', JavaExec) {
2841
classpath = sourceSets.main.runtimeClasspath
2942
mainClass = 'de.gdata.vaasexample.Authentication'
3043
}
44+
45+
tasks.register('config', JavaExec) {
46+
classpath = sourceSets.main.runtimeClasspath
47+
mainClass = 'de.gdata.vaasexample.Config'
48+
}

java/examples/VaasExample/build.local.gradle

Lines changed: 0 additions & 33 deletions
This file was deleted.
Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
package de.gdata.vaasexample;
22

33
import de.gdata.vaas.*;
4-
import de.gdata.vaas.messages.VerdictRequestAttributes;
4+
import de.gdata.vaas.authentication.*;
5+
56
import java.net.URI;
67

78

89
public class Authentication {
910
public static void main(String[] args) throws Exception {
10-
var clientId = System.getenv("CLIENT_ID");
11-
var clientSecret = System.getenv("CLIENT_SECRET");
12-
var vaasclientId = System.getenv("VAAS_CLIENT_ID");
13-
var userName = System.getenv("VAAS_USER_NAME");
14-
var password = System.getenv("VAAS_PASSWORD");
15-
var tokenUrl = System.getenv("TOKEN_URL");
16-
if (tokenUrl == null) { tokenUrl = "https://account.gdata.de/realms/vaas-production/protocol/openid-connect/token"; }
17-
var vaasUrl = System.getenv("VAAS_URL");
18-
if (vaasUrl == null) { vaasUrl = "wss://gateway.production.vaas.gdatasecurity.de"; }
11+
var env = new Environment();
12+
13+
var clientId = env.clientId;
14+
var clientSecret = env.clientSecret;
15+
var vaasclientId = env.vaasClientId;
16+
var userName = env.userName;
17+
var password = env.password;
18+
var tokenUrl = env.tokenUrl;
19+
var vaasUrl = env.vaasUrl;
1920

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

3738
var config = new VaasConfig(new URI(vaasUrl));
3839
var vaas = new Vaas(config, authenticator);
39-
vaas.connect();
40-
41-
var verdictRequestAttributes = new VerdictRequestAttributes();
42-
verdictRequestAttributes.setTenantId("fileTenant");
43-
var verdict = vaas.forSha256(new Sha256("275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f"), verdictRequestAttributes);
44-
vaas.disconnect();
40+
var verdict = vaas.forSha256(new Sha256("275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f"));
4541
System.out.printf("File %s was detected as %s", verdict.getSha256(), verdict.getVerdict());
4642
}
4743
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package de.gdata.vaasexample;
2+
3+
import de.gdata.vaas.*;
4+
import de.gdata.vaas.authentication.*;
5+
6+
import java.net.URI;
7+
import java.nio.file.Path;
8+
9+
public class Config {
10+
public static void main(String[] args) throws Exception {
11+
var env = new Environment();
12+
13+
var timeoutInMs = 5000;
14+
var useCache = false;
15+
var useHashLookup = false;
16+
var config = new VaasConfig(timeoutInMs,
17+
useCache,
18+
useHashLookup,
19+
new URI(env.vaasUrl));
20+
21+
var authenticator = new ClientCredentialsGrantAuthenticator(env.clientId, env.clientSecret, new URI(env.tokenUrl));
22+
var vaas = new Vaas(config, authenticator);
23+
24+
var file = Path.of(Environment.getenv("SCAN_PATH"));
25+
var verdict = vaas.forFile(file);
26+
27+
System.out.printf("File %s was sync detected as %s", verdict.getSha256(), verdict.getVerdict());
28+
29+
vaas.forFileAsync(file).thenAccept(vaasResult -> {
30+
System.out.printf("\nFile %s was async detected as %s", verdict.getSha256(), verdict.getVerdict());
31+
}).get();
32+
}
33+
}

0 commit comments

Comments
 (0)