From 07842b258a7e9d1a2b16dda1cfdce8b618adcc01 Mon Sep 17 00:00:00 2001 From: Mushegh98 Date: Thu, 28 May 2020 16:50:58 +0400 Subject: [PATCH 1/2] Adds getConfig API Call. --- .../network/NetworkBoundStatusResource.java | 4 +++ .../android/repository/DataRepository.java | 36 +++++++++++++++++-- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/ui/src/main/java/com/wireguard/android/api/network/NetworkBoundStatusResource.java b/ui/src/main/java/com/wireguard/android/api/network/NetworkBoundStatusResource.java index 937a620..880e239 100644 --- a/ui/src/main/java/com/wireguard/android/api/network/NetworkBoundStatusResource.java +++ b/ui/src/main/java/com/wireguard/android/api/network/NetworkBoundStatusResource.java @@ -21,6 +21,10 @@ public abstract class NetworkBoundStatusResource { mutableLiveData.setValue(value); } + public void postMutableLiveData(StatusResource value) { + mutableLiveData.postValue(value); + } + public final MutableLiveData> getMutableLiveData() { return mutableLiveData; } diff --git a/ui/src/main/java/com/wireguard/android/repository/DataRepository.java b/ui/src/main/java/com/wireguard/android/repository/DataRepository.java index a8c4873..c199686 100644 --- a/ui/src/main/java/com/wireguard/android/repository/DataRepository.java +++ b/ui/src/main/java/com/wireguard/android/repository/DataRepository.java @@ -12,20 +12,30 @@ import com.wireguard.android.model.Device; import com.wireguard.android.model.User; import com.wireguard.android.resource.StatusResource; import com.wireguard.android.util.UserStore; + +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Scanner; + import androidx.lifecycle.MutableLiveData; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; import retrofit2.Call; public class DataRepository { private static volatile DataRepository instance; private ClientApi clientApi; private CompositeDisposable compositeDisposable; + private final OkHttpClient client = new OkHttpClient(); public static final String NO_INTERNET_CONNECTION = "no_internet_connection"; private static final String SEPARATOR = ":"; @@ -124,7 +134,7 @@ public class DataRepository { UserStore.getInstance(context).setDeviceName(device.getName()); UserStore.getInstance(context).setDeviceID(device.getUuid()); hasDevice = true; - setMutableLiveData(StatusResource.success()); + getConfig(context); break; } else { final String[] itemDevice = device.getName().split(SEPARATOR); @@ -149,7 +159,7 @@ public class DataRepository { .subscribe(device -> { UserStore.getInstance(context).setDeviceName(device.getName()); UserStore.getInstance(context).setDeviceID(device.getUuid()); - setMutableLiveData(StatusResource.success()); + getConfig(context); }, throwable -> { setMutableLiveData(StatusResource.error(throwable.getMessage())); }); @@ -189,7 +199,7 @@ public class DataRepository { .subscribe(device -> { UserStore.getInstance(context).setDeviceName(device.getName()); UserStore.getInstance(context).setDeviceID(device.getUuid()); - setMutableLiveData(StatusResource.success()); + getConfig(context); },throwable -> { setMutableLiveData(StatusResource.error(throwable.getMessage())); }); @@ -202,6 +212,26 @@ public class DataRepository { }); compositeDisposable.add(disposableAllDevices); } + private void getConfig(Context context){ + final String deviceID = UserStore.getInstance(context).getDeviceID(); + final String token = UserStore.getInstance(context).getToken(); + Request request = new Request.Builder() + .url(ApiConstants.BASE_URL+"me/devices/"+deviceID+"/vpn/vpn.conf") + .addHeader(ApiConstants.AUTHORIZATION_HEADER,token) + .build(); + client.newCall(request).enqueue(new Callback() { + @Override public void onFailure(final okhttp3.Call call, final IOException e) { + setMutableLiveData(StatusResource.error(e.getMessage())); + } + + @Override public void onResponse(final okhttp3.Call call, final Response response) throws IOException { + final InputStream inputStream = response.body().byteStream(); + final Scanner scanner = new Scanner(inputStream).useDelimiter("\\A"); + final String data = scanner.hasNext() ? scanner.next() : ""; + postMutableLiveData(StatusResource.success()); + } + }); + } }.getMutableLiveData(); } From 89dee5764c1b547f2a6e559e9fc9a1579395e913 Mon Sep 17 00:00:00 2001 From: Mushegh98 Date: Thu, 28 May 2020 17:34:00 +0400 Subject: [PATCH 2/2] Refactored code. --- .../wireguard/android/api/ApiConstants.java | 2 + .../android/repository/DataRepository.java | 37 ++++++++++--------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/ui/src/main/java/com/wireguard/android/api/ApiConstants.java b/ui/src/main/java/com/wireguard/android/api/ApiConstants.java index 6498069..715ce9f 100644 --- a/ui/src/main/java/com/wireguard/android/api/ApiConstants.java +++ b/ui/src/main/java/com/wireguard/android/api/ApiConstants.java @@ -5,6 +5,8 @@ public class ApiConstants { public static final String LOGIN_URL = "auth/login"; public static final String ALL_DEVICES_URL = "me/devices"; public static final String ADD_DEVICE_URL = "me/devices"; + public static final String CONFIG_DEVICE_URL = "me/devices/"; + public static final String CONFIG_VPN_URL = "/vpn/vpn.conf"; public static final String USERNAME = "username"; public static final String PASSWORD = "password"; public static final String AUTHORIZATION_HEADER = "X-Bubble-Session"; diff --git a/ui/src/main/java/com/wireguard/android/repository/DataRepository.java b/ui/src/main/java/com/wireguard/android/repository/DataRepository.java index c199686..d9e51ce 100644 --- a/ui/src/main/java/com/wireguard/android/repository/DataRepository.java +++ b/ui/src/main/java/com/wireguard/android/repository/DataRepository.java @@ -4,6 +4,7 @@ import android.content.Context; import android.os.Build; import android.provider.Settings; import android.provider.Settings.Secure; + import com.wireguard.android.api.ApiConstants; import com.wireguard.android.api.network.ClientApi; import com.wireguard.android.api.network.ClientService; @@ -40,6 +41,7 @@ public class DataRepository { public static final String NO_INTERNET_CONNECTION = "no_internet_connection"; private static final String SEPARATOR = ":"; private static final String SPACE = " "; + private static final String DELIMITER = "\\A"; private static final int ANDROID_ID = 1; private DataRepository() { @@ -75,9 +77,8 @@ public class DataRepository { UserStore.getInstance(context).setToken(user.getToken()); if (!isDeviceLoggedIn(context)) { addDevice(context); - } - else { - getAllDevices(context); + } else { + getAllDevices(context); } }, throwable -> { setMutableLiveData(StatusResource.error(throwable.getMessage())); @@ -87,12 +88,12 @@ public class DataRepository { private void getAllDevices(final Context context) { final String token = UserStore.getInstance(context).getToken(); - final HashMap header = new HashMap<>(); - header.put(ApiConstants.AUTHORIZATION_HEADER,token); - Disposable disposableAllDevices = clientApi.getAllDevices(header) + final HashMap header = new HashMap<>(); + header.put(ApiConstants.AUTHORIZATION_HEADER, token); + Disposable disposableAllDevices = clientApi.getAllDevices(header) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(listDevices->{ + .subscribe(listDevices -> { boolean hasDevice = false; for (Device item : listDevices) { if (UserStore.getInstance(context).getDeviceID().equals(item.getUuid())) { @@ -101,10 +102,10 @@ public class DataRepository { break; } } - if(!hasDevice) { + if (!hasDevice) { addDevice(context); } - },throwable -> { + }, throwable -> { }); compositeDisposable.add(disposableAllDevices); @@ -164,8 +165,7 @@ public class DataRepository { setMutableLiveData(StatusResource.error(throwable.getMessage())); }); compositeDisposable.add(disposableAddDevice); - } - else { + } else { for (int i = (arrayListDevicesName.size() - 1); i >= arrayListDevicesName.size() - 1; i--) { if (arrayListDevicesName.get(i).contains(brandModel)) { final char[] arr = arrayListDevicesName.get(i).toCharArray(); @@ -193,14 +193,14 @@ public class DataRepository { final HashMap body = new HashMap<>(); body.put(ApiConstants.DEVICE_NAME, brandModel); body.put(ApiConstants.DEVICE_TYPE, "android"); - Disposable disposableAddDevice = clientApi.addDevice(header,body) + Disposable disposableAddDevice = clientApi.addDevice(header, body) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(device -> { UserStore.getInstance(context).setDeviceName(device.getName()); UserStore.getInstance(context).setDeviceID(device.getUuid()); getConfig(context); - },throwable -> { + }, throwable -> { setMutableLiveData(StatusResource.error(throwable.getMessage())); }); compositeDisposable.add(disposableAddDevice); @@ -212,12 +212,13 @@ public class DataRepository { }); compositeDisposable.add(disposableAllDevices); } - private void getConfig(Context context){ + + private void getConfig(Context context) { final String deviceID = UserStore.getInstance(context).getDeviceID(); final String token = UserStore.getInstance(context).getToken(); Request request = new Request.Builder() - .url(ApiConstants.BASE_URL+"me/devices/"+deviceID+"/vpn/vpn.conf") - .addHeader(ApiConstants.AUTHORIZATION_HEADER,token) + .url(ApiConstants.BASE_URL + ApiConstants.CONFIG_DEVICE_URL + deviceID + ApiConstants.CONFIG_VPN_URL) + .addHeader(ApiConstants.AUTHORIZATION_HEADER, token) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(final okhttp3.Call call, final IOException e) { @@ -226,7 +227,7 @@ public class DataRepository { @Override public void onResponse(final okhttp3.Call call, final Response response) throws IOException { final InputStream inputStream = response.body().byteStream(); - final Scanner scanner = new Scanner(inputStream).useDelimiter("\\A"); + final Scanner scanner = new Scanner(inputStream).useDelimiter(DELIMITER); final String data = scanner.hasNext() ? scanner.next() : ""; postMutableLiveData(StatusResource.success()); } @@ -271,7 +272,7 @@ public class DataRepository { return Build.MODEL; } - public void clearDisposable(){ + public void clearDisposable() { compositeDisposable.clear(); } }