blob: a5619697ce6a76dee8be836d5671ec8621c65f10 [file] [log] [blame]
/*
* This project is licensed under the open source MPL V2.
* See https://github.com/openMF/android-client/blob/master/LICENSE.md
*/
package org.apache.fineract.data.remote;
import android.content.Context;
import androidx.annotation.NonNull;
import android.text.TextUtils;
import org.apache.fineract.FineractApplication;
import org.apache.fineract.data.local.PreferenceKey;
import org.apache.fineract.data.local.PreferencesHelper;
import java.io.IOException;
import java.util.HashSet;
import javax.inject.Inject;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Request.Builder;
import okhttp3.Response;
/**
* @author Rajan Maurya
* @since 17/03/2017
*/
public class FineractInterceptor implements Interceptor {
public static final String HEADER_TENANT = "X-Tenant-Identifier";
public static final String HEADER_AUTH = "Authorization";
private static final String HEADER_ACCEPT_JSON = "Accept";
private static final String HEADER_CONTENT_TYPE = "Content-type";
public static final String HEADER_USER = "User";
@Inject
PreferencesHelper preferencesHelper;
public FineractInterceptor(Context context) {
FineractApplication.get(context).getComponent().inject(this);
}
@Override
public Response intercept(@NonNull Chain chain) throws IOException {
Request chainRequest = chain.request();
Builder builder = chainRequest.newBuilder();
//TODO fix call single time instead of calling every request
String authToken = preferencesHelper.getAccessToken();
String tenantIdentifier = preferencesHelper.getTenantIdentifier();
String user = preferencesHelper.getUserName();
Boolean refreshTokenStatus = preferencesHelper.getBoolean(
PreferenceKey.PREF_KEY_REFRESH_ACCESS_TOKEN, false);
builder.header(HEADER_ACCEPT_JSON, "application/json");
builder.header(HEADER_CONTENT_TYPE, "application/json");
if (refreshTokenStatus) {
//Add Cookies
HashSet<String> cookies = (HashSet<String>) preferencesHelper.getStringSet(
PreferenceKey.PREF_KEY_COOKIES);
if (cookies != null) {
for (String cookie : cookies) {
builder.addHeader("Cookie", cookie);
}
}
} else {
if (!TextUtils.isEmpty(authToken)) {
builder.header(HEADER_AUTH, authToken);
}
if (!TextUtils.isEmpty(user)) {
builder.header(HEADER_USER, user);
}
}
if (!TextUtils.isEmpty(tenantIdentifier)) {
builder.header(HEADER_TENANT, tenantIdentifier);
}
Request request = builder.build();
return chain.proceed(request);
}
}