diff --git a/pom.xml b/pom.xml index 90e9816..1b1da5a 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.megoru wg-easy-wrapper - 2.2 + 2.3 11 diff --git a/src/main/java/org/megoru/impl/WgEasyAPI.java b/src/main/java/org/megoru/impl/WgEasyAPI.java index f2e8454..dc8b00a 100644 --- a/src/main/java/org/megoru/impl/WgEasyAPI.java +++ b/src/main/java/org/megoru/impl/WgEasyAPI.java @@ -117,6 +117,7 @@ class Builder { private String domain; private int port; private String ip; + private boolean http2; /** * This enables LOGS @@ -136,6 +137,11 @@ public Builder ip(String ip) { return this; } + public Builder enableHTTP2() { + this.http2 = true; + return this; + } + /** * @param domain It`s domain address with out https://. Example: vpn.megoru.ru */ @@ -163,10 +169,10 @@ public WgEasyAPI build() { throw new IllegalArgumentException("The provided ip and domain cannot be null!"); if (domain != null && ip == null) - return new WgEasyAPIImpl(password, domain, devMode); + return new WgEasyAPIImpl(password, domain, devMode, http2); if (port > 0) - return new WgEasyAPIImpl(password, ip, port, devMode); + return new WgEasyAPIImpl(password, ip, port, devMode, http2); throw new IllegalArgumentException("You a made error"); } diff --git a/src/main/java/org/megoru/impl/WgEasyAPIImpl.java b/src/main/java/org/megoru/impl/WgEasyAPIImpl.java index c35b8a3..b994979 100644 --- a/src/main/java/org/megoru/impl/WgEasyAPIImpl.java +++ b/src/main/java/org/megoru/impl/WgEasyAPIImpl.java @@ -10,7 +10,6 @@ import org.apache.hc.client5.http.classic.methods.HttpGet; import org.apache.hc.client5.http.classic.methods.HttpPost; import org.apache.hc.client5.http.classic.methods.HttpPut; -import org.apache.hc.client5.http.config.ConnectionConfig; import org.apache.hc.client5.http.cookie.BasicCookieStore; import org.apache.hc.client5.http.cookie.Cookie; import org.apache.hc.client5.http.cookie.CookieStore; @@ -18,7 +17,6 @@ import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse; import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; import org.apache.hc.client5.http.impl.classic.HttpClients; -import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager; import org.apache.hc.client5.http.protocol.HttpClientContext; import org.apache.hc.core5.http.*; import org.apache.hc.core5.http.io.entity.EntityUtils; @@ -43,7 +41,6 @@ import java.time.temporal.TemporalAccessor; import java.util.Arrays; import java.util.List; -import java.util.concurrent.TimeUnit; public class WgEasyAPIImpl implements WgEasyAPI { @@ -51,10 +48,11 @@ public class WgEasyAPIImpl implements WgEasyAPI { private final Gson gson; private CloseableHttpClient httpClient = HttpClients.createDefault(); + private final BasicHttpContext basicHttpContext = new BasicHttpContext(); private final String password; private final boolean devMode; - protected WgEasyAPIImpl(String password, String domain, boolean devMode) { + protected WgEasyAPIImpl(String password, String domain, boolean devMode, boolean http2) { this.devMode = devMode; this.password = password; @@ -75,10 +73,18 @@ public LocalDateTime deserialize(JsonElement json, Type type, JsonDeserializatio }).setPrettyPrinting().create(); + ProtocolVersion protocolVersion; + if (http2) { + protocolVersion = new ProtocolVersion("HTTP", 2, 0); + } else { + protocolVersion = new ProtocolVersion("HTTP", 1, 1); + } + basicHttpContext.setProtocolVersion(protocolVersion); + setSession(); } - protected WgEasyAPIImpl(String password, String ip, int port, boolean devMode) { + protected WgEasyAPIImpl(String password, String ip, int port, boolean devMode, boolean http2) { this.devMode = devMode; this.password = password; @@ -100,6 +106,14 @@ public LocalDateTime deserialize(JsonElement json, Type type, JsonDeserializatio }).setPrettyPrinting().create(); + ProtocolVersion protocolVersion; + if (http2) { + protocolVersion = new ProtocolVersion("HTTP", 2, 0); + } else { + protocolVersion = new ProtocolVersion("HTTP", 1, 1); + } + basicHttpContext.setProtocolVersion(protocolVersion); + setSession(); } @@ -120,7 +134,7 @@ public File getQRCode(String userId, String fileName) { } @Override - public File getConfig(String userId, String fileName) { + public File getConfig(String userId, String fileName) { //https://vpn.megoru.ru/api/wireguard/client/83e7877e-9eea-4695-823e-b729cddb5d8c/configuration HttpUrl url = baseUrl.newBuilder() .addPathSegment("api") @@ -156,7 +170,7 @@ public Create createClient(String name) { } @Override - public Status updateClientAddress(String userId, String address) { + public Status updateClientAddress(String userId, String address) { HttpUrl url = baseUrl.newBuilder() .addPathSegment("api") .addPathSegment("wireguard") @@ -167,7 +181,6 @@ public Status updateClientAddress(String userId, String address) { JSONObject json = new JSONObject(); - try { json.put("address ", address); } catch (JSONException e) { @@ -193,7 +206,7 @@ public Status disableClient(String userId) { } @Override - public Status enableClient(String userId) { + public Status enableClient(String userId) { HttpUrl url = baseUrl.newBuilder() .addPathSegment("api") .addPathSegment("wireguard") @@ -208,7 +221,7 @@ public Status enableClient(String userId) { } @Override - public Status deleteClient(String userId) { + public Status deleteClient(String userId) { HttpUrl url = baseUrl.newBuilder() .addPathSegment("api") .addPathSegment("wireguard") @@ -269,7 +282,7 @@ public Client getClientByName(String name) throws IllegalStateException, NullPoi } @Override - public Client[] getClients() { + public Client[] getClients() { HttpUrl url = baseUrl.newBuilder() .addPathSegment("api") .addPathSegment("wireguard") @@ -284,7 +297,6 @@ public Session getSession() { HttpUrl url = baseUrl.newBuilder() .addPathSegment("api") .addPathSegment("session") - .addQueryParameter("password", password) .build(); return get(url, new DefaultResponseTransformer<>(Session.class, gson)); @@ -326,12 +338,14 @@ private E post(HttpUrl url, JSONObject jsonBody, ResponseTransformer resp HttpEntity stringEntity = new StringEntity(jsonBody.toString(), ContentType.APPLICATION_JSON); request.setEntity(stringEntity); + return execute(request, responseTransformer); } private E delete(HttpUrl url, ResponseTransformer responseTransformer) { HttpDelete request = new HttpDelete(url.uri()); request.addHeader(HttpHeaders.CONTENT_TYPE, "application/json"); + return execute(request, responseTransformer); } @@ -348,7 +362,11 @@ private E put(HttpUrl url, JSONObject jsonBody, ResponseTransformer respo private void setCookie(Cookie cookies) { BasicCookieStore cookieStore = new BasicCookieStore(); cookieStore.addCookie(cookies); - httpClient = HttpClientBuilder.create().setDefaultCookieStore(cookieStore).build(); + + httpClient = HttpClientBuilder + .create() + .setDefaultCookieStore(cookieStore) + .build(); } private File writeToFile(String text, String fileName) { @@ -400,6 +418,11 @@ private void execute(ClassicHttpRequest request) { CookieStore cookieStore = context.getCookieStore(); List cookie = cookieStore.getCookies(); + if (devMode) { + System.out.println("cookie: " + context.getResponse().getVersion()); + System.out.println(Arrays.toString(context.getResponse().getHeaders())); + } + if (cookie.isEmpty()) throw new RuntimeException("Cookie is null"); else setCookie(cookie.get(0)); } @@ -410,7 +433,7 @@ private void execute(ClassicHttpRequest request) { private File execute(ClassicHttpRequest request, String fileName, FileExtension fileExtension) { try { - return httpClient.execute(request, new BasicHttpContext(), httpResponse -> { + return httpClient.execute(request, basicHttpContext, httpResponse -> { HttpEntity entity = httpResponse.getEntity(); String body = EntityUtils.toString(entity); if (httpResponse.getCode() == 200 && fileExtension.equals(FileExtension.CONFIG)) { @@ -433,7 +456,7 @@ private File execute(ClassicHttpRequest request, String fileName, FileExtension @Nullable private E execute(ClassicHttpRequest request, ResponseTransformer responseTransformer) { try { - return httpClient.execute(request, new BasicHttpContext(), httpResponse -> { + return httpClient.execute(request, basicHttpContext, httpResponse -> { HttpEntity entity = httpResponse.getEntity(); String body = "{}"; if (entity != null) { @@ -495,6 +518,9 @@ private void logResponse(ClassicHttpResponse response, String body) { return; } + System.out.println("Response: " + response.getVersion()); + System.out.println(Arrays.toString(response.getHeaders())); + String status = String.format( "StatusCode: %s Reason: %s", response.getCode(),