package com.kickstarter.services.interceptors;
import android.net.Uri;
import android.support.annotation.NonNull;
import com.kickstarter.libs.CurrentUserType;
import com.kickstarter.services.KSUri;
import java.io.IOException;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
public final class ApiRequestInterceptor implements Interceptor {
private final String clientId;
private final CurrentUserType currentUser;
private final String endpoint;
public ApiRequestInterceptor(final @NonNull String clientId, final @NonNull CurrentUserType currentUser,
final @NonNull String endpoint) {
this.clientId = clientId;
this.currentUser = currentUser;
this.endpoint = endpoint;
}
@Override
public Response intercept(final @NonNull Chain chain) throws IOException {
return chain.proceed(request(chain.request()));
}
private Request request(final @NonNull Request initialRequest) {
if (!shouldIntercept(initialRequest)) {
return initialRequest;
}
return initialRequest.newBuilder()
.header("Accept", "application/json")
.url(url(initialRequest.url()))
.build();
}
private HttpUrl url(final @NonNull HttpUrl initialHttpUrl) {
final HttpUrl.Builder builder = initialHttpUrl.newBuilder()
.setQueryParameter("client_id", clientId);
if (currentUser.exists()) {
builder.setQueryParameter("oauth_token", currentUser.getAccessToken());
}
return builder.build();
}
private boolean shouldIntercept(final @NonNull Request request) {
return KSUri.isApiUri(Uri.parse(request.url().toString()), endpoint);
}
}