Skip to content

Instantly share code, notes, and snippets.

@Augusent
Created February 27, 2017 18:02
Show Gist options
  • Save Augusent/52ff7393bd2361a79502b08f3e204ec2 to your computer and use it in GitHub Desktop.
Save Augusent/52ff7393bd2361a79502b08f3e204ec2 to your computer and use it in GitHub Desktop.
Authorization Interceptor
@Singleton
public final class AuthInterceptor implements Interceptor {
private final Prefs prefs;
@Inject
public AuthInterceptor(Prefs prefs) {
this.prefs = prefs;
}
@Override
public Response intercept(Chain chain) throws IOException {
// Add authorization header to each request if Access Token exists on device
Request request = chain.request();
final String accessToken = this.prefs.getAccessToken();
if (accessToken != null) {
final Headers headers = request.headers()
.newBuilder()
.add(Constants.ACCESS_TOKEN_HEADER, accessToken)
.build();
request = request.newBuilder().headers(headers).build();
}
// Store obtained Access Token and Refresh Token if response contains them.
// Responses which serve new tokens: /signin, /signup, /auth_via_facebook, /session
final Response response = chain.proceed(request);
final String newAccessToken = response.headers().get(Constants.ACCESS_TOKEN_HEADER);
final String newRefreshToken = response.headers().get(Constants.REFRESH_TOKEN_HEADER);
final Date refreshTokenExpired = response.headers().getDate(Constants.REFRESH_TOKEN_EXPIRED_HEADER);
if (newAccessToken != null) {
prefs.setAccessToken(newAccessToken);
}
if (newRefreshToken != null) {
prefs.setRefreshToken(newRefreshToken);
}
return response;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment