package com.truckmuncher.app.data; import android.util.Base64; import java.security.SecureRandom; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.TimeZone; import retrofit.RequestInterceptor; public abstract class ApiRequestInterceptor implements RequestInterceptor { public static final String HEADER_NONCE = "X-Nonce"; public static final String HEADER_TIMESTAMP = "X-Timestamp"; public static final String HEADER_AUTHORIZATION = "Authorization"; private final DateFormat formatter; private final SecureRandom generator; private final byte[] bytes = new byte[32]; public ApiRequestInterceptor() { formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US); formatter.setTimeZone(TimeZone.getTimeZone("UTC")); generator = new SecureRandom(); } @Override public void intercept(RequestFacade request) { // Timestamp request.addHeader(HEADER_TIMESTAMP, formatter.format(new Date())); // Nonce generator.nextBytes(bytes); String nonce = Base64.encodeToString(bytes, Base64.DEFAULT); request.addHeader(HEADER_NONCE, nonce); } }