/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.network;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.content.Context;
import android.text.TextUtils;
import com.galaxy.meetup.client.util.AccountsUtil;
import com.galaxy.meetup.client.util.Property;
/**
*
* @author sihai
*
*/
public final class ApiaryAuthDataFactory {
static final Map sAuthDatas = new HashMap();
public ApiaryAuthDataFactory() {
}
public static ApiaryAuthData getAuthData(String s) {
Object obj;
synchronized (sAuthDatas) {
obj = (ApiaryAuthData) sAuthDatas.get(s);
if (obj == null) {
obj = new ApiaryAuthDataImpl(s);
sAuthDatas.put(s, obj);
}
}
return ((ApiaryAuthData) (obj));
}
public static interface ApiaryAuthData {
public abstract Long getAuthTime(String s);
public abstract String getAuthToken(Context context, String s) throws AuthenticatorException,
OperationCanceledException, IOException;
public abstract void invalidateAuthToken(Context context, String s) throws OperationCanceledException,
AuthenticatorException, IOException;
}
private static final class ApiaryAuthDataImpl implements ApiaryAuthData {
private final String mScope;
private final Map mTokenTimes = new HashMap();
private final Map mTokens = new HashMap();
public ApiaryAuthDataImpl(String s) {
mScope = s;
}
public final Long getAuthTime(String s) {
Long long1;
if (Property.ENABLE_DOGFOOD_FEATURES.getBoolean()
&& !TextUtils.isEmpty(Property.PLUS_APIARY_AUTH_TOKEN.get()))
long1 = Long.valueOf(System.currentTimeMillis());
else
long1 = (Long) mTokenTimes.get(s);
return long1;
}
public final String getAuthToken(Context context, String s) throws AuthenticatorException, OperationCanceledException, IOException {
String s1 = null;
if(Property.ENABLE_DOGFOOD_FEATURES.getBoolean()) {
String s2 = Property.PLUS_APIARY_AUTH_TOKEN.get();
if(!TextUtils.isEmpty(s2)) {
return s2;
}
}
synchronized(this) {
s1 = (String) mTokens.get(s);
if (s1 != null) {
Long long2 = (Long) mTokenTimes.get(s1);
if (long2 == null || System.currentTimeMillis() - long2.longValue() > 0x36ee80L) {
mTokens.remove(s);
mTokenTimes.remove(s1);
AccountsUtil.invalidateAuthToken(context, s1);
s1 = null;
}
}
}
if(s1 != null) {
return s1;
}
Long long1 = Long.valueOf(System.currentTimeMillis());
s1 = AccountsUtil.getAuthToken(context, s, mScope);
if(s1 == null) {
return null;
}
synchronized(this) {
String s3 = (String)mTokens.remove(s);
if(s3 != null)
mTokenTimes.remove(s3);
mTokens.put(s, s1);
mTokenTimes.put(s1, long1);
}
return s1;
}
public final void invalidateAuthToken(Context context, String s) throws OperationCanceledException,
AuthenticatorException, IOException {
if (!Property.ENABLE_DOGFOOD_FEATURES.getBoolean()
|| TextUtils.isEmpty(Property.PLUS_APIARY_AUTH_TOKEN.get())) {
String s1;
s1 = (String) mTokens.remove(s);
if (s1 != null) {
mTokenTimes.remove(s1);
AccountsUtil.invalidateAuthToken(context, s1);
}
} else {
return;
}
}
}
}