package edu.gatech.oad.rocket.findmythings.control;
import android.content.SharedPreferences;
import com.google.api.client.json.JsonGenerator;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.client.util.Base64;
import edu.gatech.oad.rocket.findmythings.model.AppMember;
import java.io.IOException;
import java.io.StringWriter;
public class LoginManager {
private static final String LOGIN_PREFS_DOMAIN = "fmtauth";
private final SharedPreferences prefs;
private LoginManager() {
prefs = SharedApplication.getInstance().getSharedPreferences(LOGIN_PREFS_DOMAIN, 0);
email = prefs.getString("email", null);
token = prefs.getString("token", null);
String appmemberString = prefs.getString("currentUser", null);
if (appmemberString != null) {
try {
currentUser = new JacksonFactory().createJsonParser(appmemberString).parseAndClose(AppMember.class, null);
} catch (IOException e) {
currentUser = null;
}
}
this.currentUserCouldBeOutOfDate = true;
}
private static final class LoginManagerSingleton {
static final LoginManager mgr = new LoginManager();
}
public static LoginManager getLoginManager() {
return LoginManagerSingleton.mgr;
}
private String email;
private String token;
private AppMember currentUser;
private boolean currentUserCouldBeOutOfDate;
public void setCurrentEmailAndToken(String email, String token) {
this.email = email;
this.token = token;
this.currentUserCouldBeOutOfDate = true;
SharedPreferences.Editor edit = prefs.edit();
edit.putString("email", this.email);
edit.putString("token", this.token);
edit.commit();
}
public String getCurrentEmail() {
return email;
}
public String getCurrentToken() {
return token;
}
public void setCurrentUser(AppMember currentUser) {
this.currentUser = currentUser;
this.currentUserCouldBeOutOfDate = false;
SharedPreferences.Editor edit = prefs.edit();
if (this.currentUser != null) {
try {
StringWriter writer = new StringWriter();
JsonGenerator gen = new JacksonFactory().createJsonGenerator(writer);
gen.serialize(currentUser);
gen.close();
String stringValue = writer.toString();
edit.putString("currentUser", stringValue);
} catch (IOException e) {
edit.remove("currentUser");
}
}
edit.commit();
}
public AppMember getCurrentUser() {
return currentUser;
}
public boolean currentUserCouldBeOutOfDate() {
return currentUserCouldBeOutOfDate;
}
public boolean isLoggedIn() {
return email != null && token != null && email.length() > 0 && token.length() > 0;
}
public String getAuthorizationHeader() {
if (!isLoggedIn()) return null;
byte[] bytes = (email + ":" + token).getBytes();
return "FMTTOKEN " + Base64.encodeBase64String(bytes);
}
public void logout() {
setCurrentEmailAndToken(null, null);
setCurrentUser(null);
this.currentUserCouldBeOutOfDate = false;
}
}