Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions mifosng-android/src/main/java/com/mifos/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import com.crashlytics.android.Crashlytics;
import com.joanzapata.iconify.Iconify;
import com.joanzapata.iconify.fonts.MaterialModule;
import com.mifos.api.BaseApiManager;
import com.mifos.mifosxdroid.injection.component.ApplicationComponent;
import com.mifos.mifosxdroid.injection.component.DaggerApplicationComponent;
import com.mifos.mifosxdroid.injection.module.ApplicationModule;
Expand All @@ -27,8 +26,6 @@ public class App extends SugarApp {

public static final Map<Integer, Typeface> typefaceManager = new HashMap<>();

public static BaseApiManager baseApiManager;

private static App instance;

ApplicationComponent mApplicationComponent;
Expand All @@ -51,7 +48,6 @@ public void onCreate() {
instance = this;
Crashlytics.start(this);

baseApiManager = new BaseApiManager();
Iconify.with(new MaterialModule());
}

Expand Down
127 changes: 52 additions & 75 deletions mifosng-android/src/main/java/com/mifos/api/BaseApiManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,10 @@
import com.mifos.api.services.StaffService;
import com.mifos.api.services.SurveyService;
import com.mifos.utils.JsonDateSerializer;
import com.mifos.utils.PrefManager;

import java.util.Date;

import okhttp3.OkHttpClient;
import okhttp3.OkHttpClient.Builder;
import okhttp3.logging.HttpLoggingInterceptor;
import okhttp3.logging.HttpLoggingInterceptor.Level;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
Expand All @@ -43,87 +40,67 @@
public class BaseApiManager {


private BaseUrl baseUrl = new BaseUrl();
private final String BASE_URL = baseUrl.getUrl();

private AuthService authApi;
private CenterService centerApi;
private ClientAccountsService accountsApi;
private ClientService clientsApi;
private DataTableService dataTableApi;
private LoanService loanApi;
private SavingsAccountService savingsApi;
private ChargeService chargeApi;
private CreateSavingsAccountService createSavingsAccountService;
private SearchService searchApi;
private GpsCoordinatesService gpsApi;
private GroupService groupApi;
private DocumentService documentApi;
private IdentifierService identifierApi;
private OfficeService officeApi;
private StaffService staffApi;
private SurveyService surveyApi;
private GroupAccountService groupAccountsServiceApi;
private static Retrofit mRetrofit;
private static AuthService authApi;
private static CenterService centerApi;
private static ClientAccountsService accountsApi;
private static ClientService clientsApi;
private static DataTableService dataTableApi;
private static LoanService loanApi;
private static SavingsAccountService savingsApi;
private static ChargeService chargeApi;
private static CreateSavingsAccountService createSavingsAccountService;
private static SearchService searchApi;
private static GpsCoordinatesService gpsApi;
private static GroupService groupApi;
private static DocumentService documentApi;
private static IdentifierService identifierApi;
private static OfficeService officeApi;
private static StaffService staffApi;
private static SurveyService surveyApi;
private static GroupAccountService groupAccountsServiceApi;

public BaseApiManager() {
createAuthApi();

centerApi = createApi(CenterService.class, BASE_URL);
accountsApi = createApi(ClientAccountsService.class, BASE_URL);
clientsApi = createApi(ClientService.class, BASE_URL);
dataTableApi = createApi(DataTableService.class, BASE_URL);
loanApi = createApi(LoanService.class, BASE_URL);
savingsApi = createApi(SavingsAccountService.class, BASE_URL);
searchApi = createApi(SearchService.class, BASE_URL);
gpsApi = createApi(GpsCoordinatesService.class, BASE_URL);
groupApi = createApi(GroupService.class, BASE_URL);
documentApi = createApi(DocumentService.class, BASE_URL);
identifierApi = createApi(IdentifierService.class, BASE_URL);
officeApi = createApi(OfficeService.class, BASE_URL);
staffApi = createApi(StaffService.class, BASE_URL);
surveyApi = createApi(SurveyService.class, BASE_URL);
chargeApi = createApi(ChargeService.class, BASE_URL);
createSavingsAccountService = createApi(CreateSavingsAccountService.class, BASE_URL);
groupAccountsServiceApi = createApi(GroupAccountService.class, BASE_URL);

}

public void setupEndpoint(String instanceUrl) {
baseUrl.updateInstanceUrl(instanceUrl);
}

public OkHttpClient getOkHttpClient() {
HttpLoggingInterceptor logger = new HttpLoggingInterceptor();
logger.setLevel(Level.BODY);
return new Builder()
.addInterceptor(logger)
.addInterceptor(new ApiRequestInterceptor())
.build();
createService();
}

public static void init() {
authApi = createApi(AuthService.class);
centerApi = createApi(CenterService.class);
accountsApi = createApi(ClientAccountsService.class);
clientsApi = createApi(ClientService.class);
dataTableApi = createApi(DataTableService.class);
loanApi = createApi(LoanService.class);
savingsApi = createApi(SavingsAccountService.class);
searchApi = createApi(SearchService.class);
gpsApi = createApi(GpsCoordinatesService.class);
groupApi = createApi(GroupService.class);
documentApi = createApi(DocumentService.class);
identifierApi = createApi(IdentifierService.class);
officeApi = createApi(OfficeService.class);
staffApi = createApi(StaffService.class);
surveyApi = createApi(SurveyService.class);
chargeApi = createApi(ChargeService.class);
createSavingsAccountService = createApi(CreateSavingsAccountService.class);
groupAccountsServiceApi = createApi(GroupAccountService.class);
}

private static <T> T createApi(Class<T> clazz) {
return mRetrofit.create(clazz);
}

private <T> T createApi(Class<T> clazz, String baseUrl) {
public static void createService() {

Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, new JsonDateSerializer()).create();

return new Retrofit.Builder()
.baseUrl(baseUrl)
mRetrofit = new Retrofit.Builder()
.baseUrl(PrefManager.getInstanceUrl())
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(getOkHttpClient())
.build()
.create(clazz);
}

private void createAuthApi() {

authApi = new Retrofit.Builder()
.baseUrl(baseUrl.getUrl())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(getOkHttpClient())
.build()
.create(AuthService.class);
.client(new MifosOkHttpClient().getMifosOkHttpClient())
.build();
init();
}

protected AuthService getAuthApi() {
Expand Down
15 changes: 1 addition & 14 deletions mifosng-android/src/main/java/com/mifos/api/BaseUrl.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,9 @@ public class BaseUrl {
public static final String PROTOCOL_HTTPS = "https://";
public static final String API_ENDPOINT = "demo.openmf.org";
public static final String API_PATH = "/fineract-provider/api/v1/";
public static final String PORT = "80";
// "/" in the last of the base url always


private String url;

public void updateInstanceUrl(String instanceUrl) {
this.url = instanceUrl;
}


public String getUrl() {
if (url == null)
return PROTOCOL_HTTPS + API_ENDPOINT + API_PATH;
return url;
}

public String getName() {
return "mifos";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@
/**
* @author fomenkoo
*/
public class ApiRequestInterceptor implements Interceptor {
public class MifosInterceptor implements Interceptor {

public static final String HEADER_TENANT = "Fineract-Platform-TenantId";
public static final String HEADER_AUTH = "Authorization";

public ApiRequestInterceptor() {
public MifosInterceptor() {
}

@Override
Expand Down
85 changes: 85 additions & 0 deletions mifosng-android/src/main/java/com/mifos/api/MifosOkHttpClient.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package com.mifos.api;

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import okhttp3.logging.HttpLoggingInterceptor.Level;

/**
* Created by Rajan Maurya on 16/06/16.
*/
public class MifosOkHttpClient {


public OkHttpClient getMifosOkHttpClient() {

OkHttpClient.Builder builder = new OkHttpClient.Builder();

try {
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = {
new X509TrustManager() {
@Override
public void checkClientTrusted(
X509Certificate[] chain,
String authType) throws CertificateException {
}

@Override
public void checkServerTrusted(
X509Certificate[] chain,
String authType) throws CertificateException {
}

@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
};

// Install the all-trusting trust manager
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
// Create an ssl socket factory with our all-trusting manager
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();

//Enable Full Body Logging
HttpLoggingInterceptor logger = new HttpLoggingInterceptor();
logger.setLevel(Level.BODY);

//Set SSL certificate to OkHttpClient Builder

builder.sslSocketFactory(sslSocketFactory);

builder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}

//Enable Full Body Logging
HttpLoggingInterceptor logger = new HttpLoggingInterceptor();
logger.setLevel(Level.BODY);

//Interceptor :> Full Body Logger and ApiRequest Header
builder.addInterceptor(logger);
builder.addInterceptor(new MifosInterceptor());

return builder.build();

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import android.content.Intent;
import android.os.Bundle;

import com.mifos.App;
import com.mifos.api.BaseUrl;
import com.mifos.mifosxdroid.core.MifosBaseActivity;
import com.mifos.mifosxdroid.login.LoginActivity;
import com.mifos.mifosxdroid.online.DashboardActivity;
Expand All @@ -25,9 +25,10 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
if (!PrefManager.isAuthenticated()) {
PrefManager.setInstanceUrl(BaseUrl.PROTOCOL_HTTPS
+ BaseUrl.API_ENDPOINT + BaseUrl.API_PATH);
startActivity(new Intent(SplashScreenActivity.this, LoginActivity.class));
} else {
App.baseApiManager.setupEndpoint(PrefManager.getInstanceUrl());
startActivity(new Intent(SplashScreenActivity.this, DashboardActivity.class));
}
finish();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import com.bumptech.glide.load.model.GlideUrl;
import com.bumptech.glide.load.model.LazyHeaders;
import com.bumptech.glide.request.target.BitmapImageViewTarget;
import com.mifos.api.ApiRequestInterceptor;
import com.mifos.api.MifosInterceptor;
import com.mifos.mifosxdroid.R;
import com.mifos.objects.client.Client;
import com.mifos.utils.PrefManager;
Expand Down Expand Up @@ -76,8 +76,8 @@ public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position)
+ client.getId()
+ "/images?maxHeight=120&maxWidth=120";
GlideUrl glideUrl = new GlideUrl(url, new LazyHeaders.Builder()
.addHeader(ApiRequestInterceptor.HEADER_TENANT, PrefManager.getTenant())
.addHeader(ApiRequestInterceptor.HEADER_AUTH, PrefManager.getToken())
.addHeader(MifosInterceptor.HEADER_TENANT, PrefManager.getTenant())
.addHeader(MifosInterceptor.HEADER_AUTH, PrefManager.getToken())
.addHeader("Accept", "application/octet-stream")
.build());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@
import com.bumptech.glide.load.model.LazyHeaders;
import com.bumptech.glide.request.target.BitmapImageViewTarget;
import com.mifos.App;
import com.mifos.api.ApiRequestInterceptor;
import com.mifos.api.BaseApiManager;
import com.mifos.api.DataManager;
import com.mifos.api.MifosInterceptor;
import com.mifos.mifosxdroid.OfflineCenterInputActivity;
import com.mifos.mifosxdroid.R;
import com.mifos.mifosxdroid.SplashScreenActivity;
Expand Down Expand Up @@ -138,7 +138,7 @@ public void hideProgress() {

@Override
public void logout() {
PrefManager.clearToken();
PrefManager.clearPrefs();
startActivity(new Intent(this, SplashScreenActivity.class));
finish();
}
Expand Down Expand Up @@ -288,9 +288,9 @@ public void onNext(Client client) {
+ userId
+ "/images?maxHeight=120&maxWidth=120";
GlideUrl glideUrl = new GlideUrl(url, new LazyHeaders.Builder()
.addHeader(ApiRequestInterceptor.HEADER_TENANT, PrefManager
.addHeader(MifosInterceptor.HEADER_TENANT, PrefManager
.getTenant())
.addHeader(ApiRequestInterceptor.HEADER_AUTH, PrefManager
.addHeader(MifosInterceptor.HEADER_AUTH, PrefManager
.getToken())
.addHeader("Accept", "application/octet-stream")
.build());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import android.app.Application;
import android.content.Context;

import com.mifos.api.BaseApiManager;
import com.mifos.api.DataManager;
import com.mifos.mifosxdroid.injection.ApplicationContext;
import com.mifos.mifosxdroid.injection.module.ApplicationModule;
Expand All @@ -27,8 +26,6 @@ public interface ApplicationComponent {

Application application();

BaseApiManager baseApiManager();

DataManager dataManager();

Bus eventBus();
Expand Down
Loading