Add mintaka as dep

This commit is contained in:
Guilherme Werner 2024-01-05 10:16:38 -03:00
parent 3e6f8251a7
commit 114ac838cb
15 changed files with 21 additions and 352 deletions

3
.gitmodules vendored Normal file
View file

@ -0,0 +1,3 @@
[submodule "vendor/MintakaJvm"]
path = vendor/MintakaJvm
url = https://github.com/Tribufu/MintakaJvm

View file

@ -11,8 +11,9 @@ repositories {
dependencies {
api "org.apache.commons:commons-math3:3.6.1"
implementation "com.google.guava:guava:31.1-jre"
implementation "com.google.code.gson:gson:2.8.9"
implementation "com.google.guava:guava:31.1-jre"
implementation project(':MintakaJvm')
testImplementation "org.junit.jupiter:junit-jupiter:5.9.1"
}

View file

@ -2,16 +2,15 @@
package com.tribufu;
import com.tribufu.http.TribufuHttp;
import com.tribufu.types.games.Game;
import com.tribufu.types.servers.Server;
import com.tribufu.types.users.Profile;
import dev.mintaka.http.HttpClient;
import java.util.ArrayList;
import java.util.concurrent.CompletableFuture;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
/**
* Tribufu API
@ -30,7 +29,7 @@ public class TribufuApi {
protected final String baseUrl;
protected final TribufuApiOptions options;
protected final TribufuHttp http;
protected final HttpClient http;
/**
* Create a TribufuApi with the default options.
@ -58,7 +57,7 @@ public class TribufuApi {
public TribufuApi(TribufuApiOptions options) {
this.options = options;
this.baseUrl = TribufuApi.getBaseUrl();
this.http = new TribufuHttp(baseUrl, TribufuApi.defaultHeaders(), true, TribufuApi.API_URL);
this.http = new HttpClient(baseUrl, TribufuApi.defaultHeaders(), true, TribufuApi.API_URL);
}
/**

View file

@ -1,213 +0,0 @@
// Copyright (c) Tribufu. All Rights Reserved.
package com.tribufu.http;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.util.concurrent.CompletableFuture;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* Tribufu Http
*
* Helper class to make HTTP requests to the Tribufu API.
*/
public class TribufuHttp {
private static final Gson gson = new GsonBuilder().create();
private final HttpClient inner;
protected final TribufuHttpOptions options;
public TribufuHttp() {
this(new TribufuHttpOptions());
}
public TribufuHttp(String baseUrl, Map<String, String> headers, boolean logEnabled, String logTarget) {
this(new TribufuHttpOptions(baseUrl, headers, logEnabled, logTarget));
}
public TribufuHttp(TribufuHttpOptions options) {
this.options = options;
this.inner = HttpClient.newBuilder().build();
}
/**
* Helper method to send an asynchronous HTTP request.
*/
private CompletableFuture<String> sendRequest(HttpRequest request) {
return this.inner.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenApply(HttpResponse::body);
}
/**
* Helper method to send an asynchronous HTTP request.
*/
private <T> CompletableFuture<T> sendRequest(HttpRequest request, Class<T> returnType) {
return this.inner.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(response -> gson.fromJson(response.body(), returnType));
}
/**
* Helper method to build form URL-encoded data from a Map
*/
private HttpRequest.BodyPublisher buildFormDataFromMap(Map<String, String> data) {
return HttpRequest.BodyPublishers.ofString(
data.entrySet().stream()
.map(entry -> entry.getKey() + "=" + entry.getValue())
.reduce((param1, param2) -> param1 + "&" + param2)
.orElse(""));
}
/**
* Make a GET request to the Tribufu API and deserialize the response JSON.
*
* @param path The path of the resource.
* @param headers Optional headers.
* @param returnType The type to deserialize the response into.
* @return A CompletableFuture containing the deserialized response object.
*/
public <T> CompletableFuture<T> get(String path, Map<String, String> headers, Class<T> returnType) {
var requestBuilder = HttpRequest.newBuilder();
for (var entry : headers.entrySet()) {
requestBuilder.header(entry.getKey(), entry.getValue());
}
var request = requestBuilder
.uri(URI.create(this.options.baseUrl + path))
.GET()
.build();
return sendRequest(request, returnType);
}
/**
* Make a GET request to the Tribufu API and deserialize the response JSON.
*
* @param path The path of the resource.
* @param headers Optional headers.
* @param returnType The type to deserialize the response into.
* @return A CompletableFuture containing the deserialized response object.
*/
public <T> List<T> getArray(String path, Map<String, String> headers, Class<T[]> returnType) {
var requestBuilder = HttpRequest.newBuilder();
for (var entry : headers.entrySet()) {
requestBuilder.header(entry.getKey(), entry.getValue());
}
var request = requestBuilder
.uri(URI.create(this.options.baseUrl + path))
.GET()
.build();
var response = sendRequest(request);
T[] array = new Gson().fromJson(response.join(), returnType);
return Arrays.asList(array);
}
/**
* Make a POST request to the Tribufu API and deserialize the response JSON.
*
* @param path The path of the resource.
* @param body The request body.
* @param headers Optional headers.
* @param returnType The type to deserialize the response into.
* @return A CompletableFuture containing the deserialized response object.
*/
public <S, T> CompletableFuture<T> post(String path, S body, Map<String, String> headers, Class<T> returnType) {
var requestBuilder = HttpRequest.newBuilder();
for (var entry : headers.entrySet()) {
requestBuilder.header(entry.getKey(), entry.getValue());
}
var request = requestBuilder
.uri(URI.create(this.options.baseUrl + path))
.POST(HttpRequest.BodyPublishers.ofString(gson.toJson(body)))
.build();
return sendRequest(request, returnType);
}
/**
* Make a POST request to the Tribufu API with form URL-encoded data
* and deserialize the response JSON.
*
* @param path The path of the resource.
* @param formData The form data as a Map.
* @param headers Optional headers.
* @param returnType The type to deserialize the response into.
* @return A CompletableFuture containing the deserialized response object.
*/
public <T> CompletableFuture<T> postFormUrlEncoded(String path, Map<String, String> formData,
Map<String, String> headers, Class<T> returnType) {
var requestBuilder = HttpRequest.newBuilder();
for (var entry : headers.entrySet()) {
requestBuilder.header(entry.getKey(), entry.getValue());
}
var request = requestBuilder
.uri(URI.create(this.options.baseUrl + path))
.POST(buildFormDataFromMap(formData))
.build();
return sendRequest(request, returnType);
}
/**
* Make a PUT request to the Tribufu API and deserialize the response JSON.
*
* @param path The path of the resource.
* @param body The request body.
* @param headers Optional headers.
* @param returnType The type to deserialize the response into.
* @return A CompletableFuture containing the deserialized response object.
*/
public <S, T> CompletableFuture<T> put(String path, S body, Map<String, String> headers, Class<T> returnType) {
var requestBuilder = HttpRequest.newBuilder();
for (var entry : headers.entrySet()) {
requestBuilder.header(entry.getKey(), entry.getValue());
}
var request = requestBuilder
.uri(URI.create(this.options.baseUrl + path))
.PUT(HttpRequest.BodyPublishers.ofString(gson.toJson(body)))
.build();
return sendRequest(request, returnType);
}
/**
* Make a DELETE request to the Tribufu API.
*
* @param path The path of the resource.
* @param headers Optional headers.
* @return A CompletableFuture containing the response body as a String.
*/
public CompletableFuture<String> delete(String path, Map<String, String> headers) {
var requestBuilder = HttpRequest.newBuilder();
for (var entry : headers.entrySet()) {
requestBuilder.header(entry.getKey(), entry.getValue());
}
var request = requestBuilder
.uri(URI.create(this.options.baseUrl + path))
.DELETE()
.build();
return sendRequest(request);
}
}

View file

@ -1,28 +0,0 @@
// Copyright (c) Tribufu. All Rights Reserved.
package com.tribufu.http;
import java.util.HashMap;
import java.util.Map;
public class TribufuHttpOptions {
public String baseUrl;
public Map<String, String> headers;
public boolean logEnabled;
public String logTarget;
public TribufuHttpOptions() {
this(null);
}
public TribufuHttpOptions(String baseUrl) {
this(baseUrl, new HashMap<>(), false, "TribufuHttp");
}
public TribufuHttpOptions(String baseUrl, Map<String, String> headers, boolean logEnabled, String logTarget) {
this.baseUrl = baseUrl;
this.headers = headers;
this.logEnabled = logEnabled;
this.logTarget = logTarget;
}
}

View file

@ -1,20 +0,0 @@
// Copyright (c) Tribufu. All Rights Reserved.
package com.tribufu.oauth2;
public class OAuth2AuthorizeRequest {
public final OAuth2ResponseType responseType;
public final String clientId;
public final String scope;
public final String redirectUri;
public final String state;
public OAuth2AuthorizeRequest(OAuth2ResponseType responseType, String clientId, String scope, String redirectUri,
String state) {
this.responseType = responseType;
this.clientId = clientId;
this.scope = scope;
this.redirectUri = redirectUri;
this.state = state;
}
}

View file

@ -1,13 +0,0 @@
// Copyright (c) Tribufu. All Rights Reserved.
package com.tribufu.oauth2;
public class OAuth2CodeResponse {
public final String code;
public final String state;
public OAuth2CodeResponse(String code, String state) {
this.code = code;
this.state = state;
}
}

View file

@ -1,11 +0,0 @@
// Copyright (c) Tribufu. All Rights Reserved.
package com.tribufu.oauth2;
public enum OAuth2GrantType {
AuthorizationCode,
RefreshToken,
Password,
ClientCredentials,
DeviceCode,
}

View file

@ -1,8 +0,0 @@
// Copyright (c) Tribufu. All Rights Reserved.
package com.tribufu.oauth2;
public enum OAuth2ResponseType {
Code,
Token,
}

View file

@ -1,26 +0,0 @@
// Copyright (c) Tribufu. All Rights Reserved.
package com.tribufu.oauth2;
public class OAuth2TokenRequest {
public final OAuth2GrantType grantType;
public final String code;
public final String refreshToken;
public final String username;
public final String password;
public final String clientId;
public final String clientSecret;
public final String redirectUri;
public OAuth2TokenRequest(OAuth2GrantType grantType, String code, String refreshToken, String username,
String password, String clientId, String clientSecret, String redirectUri) {
this.grantType = grantType;
this.code = code;
this.refreshToken = refreshToken;
this.username = username;
this.password = password;
this.clientId = clientId;
this.clientSecret = clientSecret;
this.redirectUri = redirectUri;
}
}

View file

@ -1,20 +0,0 @@
// Copyright (c) Tribufu. All Rights Reserved.
package com.tribufu.oauth2;
public class OAuth2TokenResponse {
public final OAuth2TokenType tokenType;
public final String accessToken;
public final String refreshToken;
public final String scope;
public final int expiresIn;
public OAuth2TokenResponse(OAuth2TokenType tokenType, String accessToken, String refreshToken, String scope,
int expiresIn) {
this.tokenType = tokenType;
this.accessToken = accessToken;
this.refreshToken = refreshToken;
this.scope = scope;
this.expiresIn = expiresIn;
}
}

View file

@ -1,7 +0,0 @@
// Copyright (c) Tribufu. All Rights Reserved.
package com.tribufu.oauth2;
public enum OAuth2TokenType {
Bearer,
}

8
scripts/build.ps1 Normal file
View file

@ -0,0 +1,8 @@
#!/usr/bin/env pwsh
.\gradlew build
New-Item "build/libs" -ItemType Directory -Force
Remove-Item -Path "build/libs/*" -Force
Copy-Item -Path "./lib/build/libs/*.jar" -Destination "./build/libs" -Force
Copy-Item -Path "./vendor/MintakaJvm/lib/build/libs/*.jar" -Destination "./build/libs" -Force

View file

@ -5,3 +5,6 @@ plugins {
rootProject.name = 'TribufuJvm'
include('lib')
include('examples')
include 'MintakaJvm'
project(':MintakaJvm').projectDir = file('vendor/MintakaJvm/lib')

1
vendor/MintakaJvm vendored Submodule

@ -0,0 +1 @@
Subproject commit 9fbb227fec3a0feef978b2bd3ee86f3b3771f2e5