200 lines
6.4 KiB
Java
200 lines
6.4 KiB
Java
package com.android.emailcommon.provider;
|
|
|
|
import android.content.ContentValues;
|
|
import android.content.Context;
|
|
import android.database.Cursor;
|
|
import android.net.Uri;
|
|
import android.os.Parcel;
|
|
import android.os.Parcelable;
|
|
import android.provider.BaseColumns;
|
|
import android.text.TextUtils;
|
|
|
|
import com.android.mail.utils.LogUtils;
|
|
import com.google.common.base.Objects;
|
|
|
|
import org.json.JSONException;
|
|
import org.json.JSONObject;
|
|
|
|
public class Credential extends EmailContent implements Parcelable, BaseColumns {
|
|
|
|
public static final String TABLE_NAME = "Credential";
|
|
public static Uri CONTENT_URI;
|
|
|
|
public static final Credential EMPTY = new Credential(-1, "", "", "", 0);
|
|
|
|
public static void initCredential() {
|
|
CONTENT_URI = Uri.parse(EmailContent.CONTENT_URI + "/credential");
|
|
}
|
|
|
|
// This is the Id of the oauth provider. It can be used to lookup an oauth provider
|
|
// from oauth.xml.
|
|
public String mProviderId;
|
|
public String mAccessToken;
|
|
public String mRefreshToken;
|
|
// This is the wall clock time, in milliseconds since Midnight, Jan 1, 1970.
|
|
public long mExpiration;
|
|
|
|
// Name of the authentication provider.
|
|
public static final String PROVIDER_COLUMN = "provider";
|
|
// Access token.
|
|
public static final String ACCESS_TOKEN_COLUMN = "accessToken";
|
|
// Refresh token.
|
|
public static final String REFRESH_TOKEN_COLUMN = "refreshToken";
|
|
// Expiration date for these credentials.
|
|
public static final String EXPIRATION_COLUMN = "expiration";
|
|
|
|
|
|
public interface CredentialQuery {
|
|
public static final int ID_COLUMN_INDEX = 0;
|
|
public static final int PROVIDER_COLUMN_INDEX = 1;
|
|
public static final int ACCESS_TOKEN_COLUMN_INDEX = 2;
|
|
public static final int REFRESH_TOKEN_COLUMN_INDEX = 3;
|
|
public static final int EXPIRATION_COLUMN_INDEX = 4;
|
|
|
|
public static final String[] PROJECTION = new String[] {
|
|
_ID,
|
|
PROVIDER_COLUMN,
|
|
ACCESS_TOKEN_COLUMN,
|
|
REFRESH_TOKEN_COLUMN,
|
|
EXPIRATION_COLUMN
|
|
};
|
|
}
|
|
|
|
public Credential() {
|
|
mBaseUri = CONTENT_URI;
|
|
}
|
|
|
|
public Credential(long id, String providerId, String accessToken, String refreshToken,
|
|
long expiration) {
|
|
mBaseUri = CONTENT_URI;
|
|
mId = id;
|
|
mProviderId = providerId;
|
|
mAccessToken = accessToken;
|
|
mRefreshToken = refreshToken;
|
|
mExpiration = expiration;
|
|
}
|
|
|
|
/**
|
|
* Restore a Credential from the database, given its unique id
|
|
* @return the instantiated Credential
|
|
*/
|
|
public static Credential restoreCredentialsWithId(Context context, long id) {
|
|
return EmailContent.restoreContentWithId(context, Credential.class,
|
|
Credential.CONTENT_URI, CredentialQuery.PROJECTION, id);
|
|
}
|
|
|
|
@Override
|
|
public void restore(Cursor cursor) {
|
|
mBaseUri = CONTENT_URI;
|
|
mId = cursor.getLong(CredentialQuery.ID_COLUMN_INDEX);
|
|
mProviderId = cursor.getString(CredentialQuery.PROVIDER_COLUMN_INDEX);
|
|
mAccessToken = cursor.getString(CredentialQuery.ACCESS_TOKEN_COLUMN_INDEX);
|
|
mRefreshToken = cursor.getString(CredentialQuery.REFRESH_TOKEN_COLUMN_INDEX);
|
|
mExpiration = cursor.getInt(CredentialQuery.EXPIRATION_COLUMN_INDEX);
|
|
}
|
|
|
|
/**
|
|
* Supports Parcelable
|
|
*/
|
|
@Override
|
|
public int describeContents() {
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* Supports Parcelable
|
|
*/
|
|
public static final Parcelable.Creator<Credential> CREATOR
|
|
= new Parcelable.Creator<Credential>() {
|
|
@Override
|
|
public Credential createFromParcel(Parcel in) {
|
|
return new Credential(in);
|
|
}
|
|
|
|
@Override
|
|
public Credential[] newArray(int size) {
|
|
return new Credential[size];
|
|
}
|
|
};
|
|
|
|
@Override
|
|
public void writeToParcel(Parcel dest, int flags) {
|
|
// mBaseUri is not parceled
|
|
dest.writeLong(mId);
|
|
dest.writeString(mProviderId);
|
|
dest.writeString(mAccessToken);
|
|
dest.writeString(mRefreshToken);
|
|
dest.writeLong(mExpiration);
|
|
}
|
|
|
|
/**
|
|
* Supports Parcelable
|
|
*/
|
|
public Credential(Parcel in) {
|
|
mBaseUri = CONTENT_URI;
|
|
mId = in.readLong();
|
|
mProviderId = in.readString();
|
|
mAccessToken = in.readString();
|
|
mRefreshToken = in.readString();
|
|
mExpiration = in.readLong();
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object o) {
|
|
if (!(o instanceof Credential)) {
|
|
return false;
|
|
}
|
|
Credential that = (Credential)o;
|
|
return TextUtils.equals(mProviderId, that.mProviderId)
|
|
&& TextUtils.equals(mAccessToken, that.mAccessToken)
|
|
&& TextUtils.equals(mRefreshToken, that.mRefreshToken)
|
|
&& mExpiration == that.mExpiration;
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return Objects.hashCode(mAccessToken, mRefreshToken, mExpiration);
|
|
}
|
|
|
|
@Override
|
|
public ContentValues toContentValues() {
|
|
ContentValues values = new ContentValues();
|
|
if (TextUtils.isEmpty(mProviderId)) {
|
|
LogUtils.wtf(LogUtils.TAG, "Credential being saved with no provider");
|
|
}
|
|
values.put(PROVIDER_COLUMN, mProviderId);
|
|
values.put(ACCESS_TOKEN_COLUMN, mAccessToken);
|
|
values.put(REFRESH_TOKEN_COLUMN, mRefreshToken);
|
|
values.put(EXPIRATION_COLUMN, mExpiration);
|
|
return values;
|
|
}
|
|
|
|
protected JSONObject toJson() {
|
|
try {
|
|
final JSONObject json = new JSONObject();
|
|
json.put(PROVIDER_COLUMN, mProviderId);
|
|
json.putOpt(ACCESS_TOKEN_COLUMN, mAccessToken);
|
|
json.putOpt(REFRESH_TOKEN_COLUMN, mRefreshToken);
|
|
json.put(EXPIRATION_COLUMN, mExpiration);
|
|
return json;
|
|
} catch (final JSONException e) {
|
|
LogUtils.d(LogUtils.TAG, e, "Exception while serializing Credential");
|
|
}
|
|
return null;
|
|
}
|
|
|
|
protected static Credential fromJson(final JSONObject json) {
|
|
try {
|
|
final Credential c = new Credential();
|
|
c.mProviderId = json.getString(PROVIDER_COLUMN);
|
|
c.mAccessToken = json.optString(ACCESS_TOKEN_COLUMN);
|
|
c.mRefreshToken = json.optString(REFRESH_TOKEN_COLUMN);
|
|
c.mExpiration = json.optInt(EXPIRATION_COLUMN, 0);
|
|
return c;
|
|
} catch (final JSONException e) {
|
|
LogUtils.d(LogUtils.TAG, e, "Exception while deserializing Credential");
|
|
}
|
|
return null;
|
|
}
|
|
}
|