/** * Copyright Red Hat, Inc, and individual contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.feedhenry.sdk.api2; import com.feedhenry.sdk.AppProps; import com.feedhenry.sdk.FHActCallback; import com.feedhenry.sdk2.FHHttpClient; import com.feedhenry.sdk.FHRemote; import com.feedhenry.sdk.FHResponse; import com.feedhenry.sdk.api.FHAuthSession.Callback; import com.feedhenry.sdk.utils.DataManager; import com.feedhenry.sdk.utils.FHLog; import com.feedhenry.sdk.utils.StringUtils; import org.json.fh.JSONObject; public class FHAuthSession { public static final String SESSION_TOKEN_KEY = "sessionToken"; private static final String LOG_TAG = "com.feedhenry.sdk.api.FHAuthSession"; private static final String VERIFY_SESSION_ENDPOINT = "admin/authpolicy/verifysession"; private static final String REVOKE_SESSION_ENDPOINT = "admin/authpolicy/revokesession"; private final DataManager mDataManager; private final FHHttpClient mHttpClient; /** * Boring constructor with no side effects. * * @param pDataManager a DataManager instance to inject * @param pHttpClient a FHHttpClient to inject */ public FHAuthSession(DataManager pDataManager, FHHttpClient pHttpClient) { mDataManager = pDataManager; mHttpClient = pHttpClient; } /** * Checks if a sessionToken value exists on the device. * * @return if the sessionToken exists */ public boolean exists() { return mDataManager.read(SESSION_TOKEN_KEY) != null; } /** * Gets the value of the current session token. * * @return the current session token value */ public String getToken() { return mDataManager.read(SESSION_TOKEN_KEY); } /** * Saves the seesionToken value on the device. * * @param sessionToken Session token */ public void save(String sessionToken) { mDataManager.save(SESSION_TOKEN_KEY, sessionToken); } /** * Calls the remote server to check if the existing sessionToken is actually valid. * * @param pCallback a callback to be executed when remote call is completed * @param pSync A flag to call it sync * */ public void verify(Callback pCallback, boolean pSync) { String sessionToken = mDataManager.read(SESSION_TOKEN_KEY); if (sessionToken != null) { callRemote(VERIFY_SESSION_ENDPOINT, sessionToken, pCallback, pSync); } } /** * Removes the session token on the device and tries to remove it remotely as well. * * @param pSync A flag to call it sync * */ public void clear(boolean pSync) { String sessionToken = mDataManager.read(SESSION_TOKEN_KEY); if (sessionToken != null) { mDataManager.remove(SESSION_TOKEN_KEY); callRemote(REVOKE_SESSION_ENDPOINT, sessionToken, null, pSync); } } private void callRemote(String pPath, String pSessionToken, final Callback pCallback, boolean pUseSync) { String host = AppProps.getInstance().getHost(); String url = StringUtils.removeTrailingSlash(host) + FHRemote.PATH_PREFIX + pPath; JSONObject params = new JSONObject().put(SESSION_TOKEN_KEY, pSessionToken); mHttpClient.post( url, null, params, new FHActCallback() { @Override public void success(FHResponse pResponse) { JSONObject res = pResponse.getJson(); if (pCallback != null) { pCallback.handleSuccess(res.getBoolean("isValid")); } } @Override public void fail(FHResponse pResponse) { FHLog.w(LOG_TAG, pResponse.getRawResponse()); if (pCallback != null) { pCallback.handleError(pResponse); } } }, pUseSync); } }