package com.mapzen.pelias;
import java.io.IOException;
import java.util.Map;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
/**
* OkHttp3 style network interceptor to append client headers and query params to outgoing requests.
*/
class RequestInterceptor implements Interceptor {
private PeliasRequestHandler requestHandler;
/**
* Intercepts outgoing requests and makes modifications if a {@link PeliasRequestHandler} is set.
*/
@Override public Response intercept(Chain chain) throws IOException {
if (requestHandler != null) {
return modifyRequest(chain);
}
return chain.proceed(chain.request());
}
/**
* Modifies headers and query params for an outgoing request.
*/
private Response modifyRequest(Chain chain) throws IOException {
final Request originalRequest = chain.request();
final Request.Builder requestBuilder = originalRequest.newBuilder();
addHeaders(requestBuilder);
addQueryParams(requestBuilder, originalRequest);
return chain.proceed(requestBuilder.build());
}
/**
* Add custom headers to outgoing request.
*/
private void addHeaders(Request.Builder requestBuilder) {
final Map<String, String> headers = requestHandler.headersForRequest();
if (headers != null) {
for (String key : headers.keySet()) {
requestBuilder.header(key, headers.get(key));
}
}
}
/**
* Add custom query params to outgoing request.
*/
private void addQueryParams(Request.Builder requestBuilder, Request originalRequest) {
final Map<String, String> params = requestHandler.queryParamsForRequest();
if (params != null) {
for (String key : params.keySet()) {
final HttpUrl url = originalRequest
.url()
.newBuilder()
.addQueryParameter(key, params.get(key))
.build();
requestBuilder.url(url);
}
}
}
void setRequestHandler(PeliasRequestHandler requestHandler) {
this.requestHandler = requestHandler;
}
}