org.wso2.mobile.idp.proxy.handlers.RefreshTokenHandler.java Source code

Java tutorial

Introduction

Here is the source code for org.wso2.mobile.idp.proxy.handlers.RefreshTokenHandler.java

Source

/*
 *  Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
 *
 *  WSO2 Inc. licenses this file to you 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 org.wso2.mobile.idp.proxy.handlers;

import android.app.Activity;
import android.os.AsyncTask;
import android.util.Log;
import org.apache.http.HttpStatus;
import org.json.JSONException;
import org.json.JSONObject;
import org.wso2.mobile.idp.proxy.IdentityProxy;
import org.wso2.mobile.idp.proxy.beans.Token;
import org.wso2.mobile.idp.proxy.utils.IDPConstants;
import org.wso2.mobile.idp.proxy.utils.ServerUtilities;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

/**
 * Getting new access token and refresh token  from refresh grant after access token is expired
 */
public class RefreshTokenHandler extends Activity {
    private Token tokens = null;
    private static final String TAG = "RefreshTokenHandler";
    private String clientID = null;
    private String clientSecret = null;
    private Token token;

    /**
     * @param clientID
     * @param clientSecret
     * @param token
     */
    public RefreshTokenHandler(String clientID, String clientSecret, Token token) {
        this.clientID = clientID;
        this.clientSecret = clientSecret;
        this.token = token;
    }

    public void obtainNewAccessToken() throws InterruptedException, ExecutionException, TimeoutException {
        new NetworkCallTask().execute().get(1000, TimeUnit.MILLISECONDS);
    }

    private class NetworkCallTask extends AsyncTask<Void, Void, Map<String, String>> {

        private String responseCode = null;

        public NetworkCallTask() {

        }

        @Override
        protected Map<String, String> doInBackground(Void... params) {
            Map<String, String> requestParams = new HashMap<String, String>();
            requestParams.put(IDPConstants.GRANT_TYPE, IDPConstants.REFRESH_TOKEN);
            requestParams.put(IDPConstants.REFRESH_TOKEN, tokens.getRefreshToken());
            Map<String, String> responseResult = ServerUtilities.postData(
                    IdentityProxy.getInstance().getAccessTokenURL(), requestParams, clientID, clientSecret);
            return responseResult;
        }

        /** Get new access token and refresh token from result
         *
         * @param responseResult
         */
        @Override
        protected void onPostExecute(Map<String, String> responseParams) {
            if (responseParams == null) {
                return;
            }
            String response = responseParams.get("response");
            String responseCode = responseParams.get("status");
            try {
                JSONObject responseJsonObj = new JSONObject(response);
                IdentityProxy identityProxy = IdentityProxy.getInstance();
                if (responseCode != null && responseCode.equals(String.valueOf(HttpStatus.SC_OK))) {
                    String refreshToken = responseJsonObj.getString(IDPConstants.REFRESH_TOKEN);
                    String accessToken = responseJsonObj.getString(IDPConstants.ACCESS_TOKEN);
                    Log.d(TAG, refreshToken);
                    Log.d(TAG, accessToken);
                    token.setRefreshToken(refreshToken);
                    token.setAccessToken(accessToken);
                    identityProxy.receiveNewAccessToken(responseCode, "success", token);
                } else if (responseCode != null) {
                    String error = responseJsonObj.getString("error");
                    String errorDescription = responseJsonObj.getString("error_description");
                    Log.d(TAG, error);
                    Log.d(TAG, errorDescription);
                    identityProxy.receiveNewAccessToken(responseCode, errorDescription, null);
                }
            } catch (JSONException e) {
                Log.d(TAG, e.toString());
            }
        }
    }
}