package org.restlet.ext.oauth.internal; import org.deviceconnect.android.localoauth.LocalOAuth2Settings; import org.deviceconnect.android.localoauth.ScopeUtil; /** * スコープ. */ public class Scope { /** * スコープ名. */ private String mScope; /** * トークン更新日時. * - 新規作成時およびアクセストークン再承認されたときに更新する。 * - 1970/1/1 00:00:00 UTC からの経過ミリ秒。System.currentTimeMillis()で取得した値。 */ private long mTimestamp; /** トークン有効期間(sec単位). */ private long mExpirePeriod = 0; /** * コンストラクタ. * @param scope スコープ名 * @param timestamp トークン更新日時(1970/1/1 00:00:00 UTC からの経過ミリ秒。System.currentTimeMillis()で取得した値) * @param expirePeriod トークン有効期限(sec単位) */ public Scope(final String scope, final long timestamp, final long expirePeriod) { mScope = scope; mTimestamp = timestamp; mExpirePeriod = expirePeriod; } /** * スコープ名取得. * @return スコープ名 */ public String getScope() { return mScope; } /** * スコープ名設定. * @param scope スコープ名 */ public void setScope(final String scope) { mScope = scope; } /** * タイムスタンプ取得. * @return タイムスタンプ */ public long getTimestamp() { return mTimestamp; } /** * タイムスタンプ設定. * @param timestamp タイムスタンプ */ public void setTimestamp(final long timestamp) { mTimestamp = timestamp; } /** * 有効期限取得. * @return 有効期限[sec] */ public long getExpirePeriod() { return mExpirePeriod; } /** * 有効期限設定. * @param expirePeriod 有効期限[sec] */ public void setExpirePeriod(final long expirePeriod) { mExpirePeriod = expirePeriod; } /** * 有効期限表示文字列を返す. * @return 有効期限表示文字列 */ public String getStrExpirePeriod() { long e = getTimestamp() + getExpirePeriod() * LocalOAuth2Settings.MSEC; String displayExpirePeriod = ScopeUtil.getDisplayExpirePeriodDate(e); return displayExpirePeriod; } /** * 有効期限切れか判定. * * @return true: 有効期限切れ / false: 有効期限内 */ public boolean isExpired() { long elapsedTime = System.currentTimeMillis() - mTimestamp; long timeout = mExpirePeriod * LocalOAuth2Settings.MSEC; if (elapsedTime > timeout) { return true; } return false; } /** * スコープ名の配列を返す. * @param scope スコープ配列 * @return スコープ名のString[]配列(0件ならnullを返す) */ public static String[] toScopeStringArray(final Scope[] scope) { if (scope.length > 0) { String[] array = new String[scope.length]; return array; } return null; } /** * 文字列に展開したScope値を解析してScope型に戻す. * @param strScope 文字列に展開したScope値("{スコープ名},{トークン更新日時},{トークン有効期限[sec]}") * @return Scope型のオブジェクト。変換失敗ならnullを返す。 */ public static Scope parse(final String strScope) { String[] div = strScope.split(","); if (div.length <= 0) { return null; } String scopeName = ""; long timestamp = System.currentTimeMillis(); long expirePeriod = LocalOAuth2Settings.DEFAULT_TOKEN_EXPIRE_PERIOD; if (div.length >= 1) { scopeName = div[0]; } if (div.length >= 2) { try { timestamp = Long.parseLong(div[1]); } catch (NumberFormatException e) { } } if (div.length >= 3) { try { expirePeriod = Long.parseLong(div[2]); } catch (NumberFormatException e) { } } Scope scope = new Scope(scopeName, timestamp, expirePeriod); return scope; } @Override public String toString() { String strScope = mScope + "," + mTimestamp + "," + mExpirePeriod; return strScope; } }