package com.pivotallabs.tracker;
import android.content.Context;
import android.content.SharedPreferences;
import com.pivotallabs.Callbacks;
import com.pivotallabs.api.ApiGateway;
import com.pivotallabs.api.ApiResponse;
import com.pivotallabs.api.ApiResponseCallbacks;
import com.pivotallabs.util.Strings;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AuthenticationGateway {
static final String TRACKER_AUTH_PREF_KEY = "tracker-auth";
private static final String GUID_KEY = "guid";
public ApiGateway apiGateway;
private SharedPreferences sharedPreferences;
public AuthenticationGateway(ApiGateway apiGateway, Context context) {
this.apiGateway = apiGateway;
sharedPreferences = context.getSharedPreferences(TRACKER_AUTH_PREF_KEY, Context.MODE_PRIVATE);
}
public void signIn(String username, String password, Callbacks responseCallbacks) {
TrackerAuthenticationRequest apiRequest = new TrackerAuthenticationRequest(username, password);
ApiResponseCallbacks remoteCallbacks = new AuthenticationApiResponseCallbacks(responseCallbacks, sharedPreferences);
apiGateway.makeRequest(apiRequest, remoteCallbacks);
}
public boolean isAuthenticated() {
return !Strings.isEmptyOrWhitespace(getToken());
}
public void signOut() {
sharedPreferences.edit().clear().commit();
}
public String getToken() {
return sharedPreferences.getString(GUID_KEY, "");
}
private static class AuthenticationApiResponseCallbacks implements ApiResponseCallbacks {
private Callbacks callbacks;
private SharedPreferences sharedPreferences;
public AuthenticationApiResponseCallbacks(Callbacks callbacks, SharedPreferences sharedPreferences) {
this.callbacks = callbacks;
this.sharedPreferences = sharedPreferences;
}
@Override
public void onSuccess(ApiResponse response) {
Matcher matcher = Pattern.compile("<guid>(.*?)</guid>").matcher(response.getResponseBody());
matcher.find();
sharedPreferences.edit().putString(GUID_KEY, matcher.group(1)).commit();
callbacks.onSuccess();
}
@Override
public void onFailure(ApiResponse response) {
callbacks.onFailure();
}
@Override
public void onComplete() {
callbacks.onComplete();
}
}
}