All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.xcase.box.impl.simple.methods.GetAuthTokenMethod Maven / Gradle / Ivy

/**
 * Copyright 2016 Xcase All rights reserved.
 */
package com.xcase.box.impl.simple.methods;

import com.xcase.box.constant.BoxConstant;
import com.xcase.box.factories.BoxResponseFactory;
import com.xcase.box.objects.BoxException;
import com.xcase.box.transputs.GetAuthTokenRequest;
import com.xcase.box.transputs.GetAuthTokenResponse;
import com.xcase.common.constant.CommonConstant;
import com.xcase.common.impl.simple.core.CommonHTTPManager;
import java.io.IOException;
import java.lang.invoke.*;
import java.util.*;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.apache.logging.log4j.*;

/**
 * @author martin
 *
 */
public class GetAuthTokenMethod extends BaseBoxMethod {

    /**
     * log4j object.
     */
    protected static final Logger LOGGER = LogManager.getLogger(MethodHandles.lookup().lookupClass());

    /**
     *
     */
    public GetAuthTokenMethod() {
        super();
    }

    /**
     *
     * @param getAuthTokenRequest request
     * @return response
     * @throws IOException IO exception
     * @throws BoxException box exception
     */
    public GetAuthTokenResponse getAuthToken(GetAuthTokenRequest getAuthTokenRequest) throws IOException, BoxException {
        LOGGER.debug("starting getAuthToken()");
        GetAuthTokenResponse getAuthTokenResponse = BoxResponseFactory.createGetAuthTokenResponse();
        String apiKey = getAuthTokenRequest.getApiKey();
        LOGGER.debug("apiKey is " + apiKey);
        String userName = getAuthTokenRequest.getUsername();
        LOGGER.debug("userName is " + userName);
        String password = getAuthTokenRequest.getPassword();
        LOGGER.debug("password is " + password);
        if (BoxConstant.CONFIG_API_REQUEST_FORMAT_REST.equals(apiRequestFormat)) {
            LOGGER.debug("apiRequestFormat is BoxConstant.CONFIG_API_REQUEST_FORMAT_REST");
            StringBuffer urlBuff = new StringBuffer("https://www.box.com/api/oauth2/authorize?response_type=code&state=authenticated");
            LOGGER.debug("urlBuff is " + urlBuff.toString());
            urlBuff.append(CommonConstant.AND_SIGN_STRING);
            urlBuff.append(BoxConstant.PARAM_NAME_CLIENT_ID);
            urlBuff.append(CommonConstant.EQUALS_SIGN_STRING);
            urlBuff.append(apiKey);
            try {
                String urlString = urlBuff.toString();
                LOGGER.debug("urlString is " + urlString);
                CommonHTTPManager commonHTTPManager = CommonHTTPManager.refreshCommonHTTPManager();
                String responseEntityString = commonHTTPManager.doStringGet(urlString, null, null);
                LOGGER.debug("responseEntityString is " + responseEntityString);
                String requestToken = getRequestToken(responseEntityString);
                LOGGER.debug("requestToken is " + requestToken);
                List loginParameters = new ArrayList();
                StringBuffer redirectUrlStringBuffer = new StringBuffer("/api/oauth2/authorize?response_type=code&state=authenticated");
                LOGGER.debug("redirectUrlStringBuffer is " + redirectUrlStringBuffer.toString());
                redirectUrlStringBuffer.append(CommonConstant.AND_SIGN_STRING);
                redirectUrlStringBuffer.append(BoxConstant.PARAM_NAME_CLIENT_ID);
                redirectUrlStringBuffer.append(CommonConstant.EQUALS_SIGN_STRING);
                redirectUrlStringBuffer.append(apiKey);
                String redirectUrlString = redirectUrlStringBuffer.toString();
                LOGGER.debug("redirectUrlString is " + redirectUrlString);
                NameValuePair redirectUrlNVP = new BasicNameValuePair("_redirect_url", redirectUrlString);
                loginParameters.add(redirectUrlNVP);
                NameValuePair dologinNVP = new BasicNameValuePair("dologin", "1");
                loginParameters.add(dologinNVP);
                NameValuePair clientIDNVP = new BasicNameValuePair("client_id", apiKey);
                loginParameters.add(clientIDNVP);
                NameValuePair responseTypeNVP = new BasicNameValuePair("response_type", "code");
                loginParameters.add(responseTypeNVP);
                NameValuePair redirectURINVP = new BasicNameValuePair("redirect_uri", "https://localhost");
                loginParameters.add(redirectURINVP);
                NameValuePair scopeNVP = new BasicNameValuePair("scope", "root_readwrite admin_on_behalf_of");
                loginParameters.add(scopeNVP);
                NameValuePair folderNVP = new BasicNameValuePair("folder", "");
                loginParameters.add(folderNVP);
                NameValuePair folderIDNVP = new BasicNameValuePair("folder_id", "");
                loginParameters.add(folderIDNVP);
                NameValuePair stateNVP = new BasicNameValuePair("state", "authenticated");
                loginParameters.add(stateNVP);
                NameValuePair regStepNVP = new BasicNameValuePair("reg_step", "");
                loginParameters.add(regStepNVP);
                NameValuePair submit1NVP = new BasicNameValuePair("submit1", "1");
                loginParameters.add(submit1NVP);
                NameValuePair loginOrRegisterModeNVP = new BasicNameValuePair("login_or_register_mode", "login");
                loginParameters.add(loginOrRegisterModeNVP);
                NameValuePair newLoginOrRegisterModeNVP = new BasicNameValuePair("new_login_or_register_mode", "");
                loginParameters.add(newLoginOrRegisterModeNVP);
                NameValuePair underscoreLoginNVP = new BasicNameValuePair("__login", "1");
                loginParameters.add(underscoreLoginNVP);
                NameValuePair pwSQLNVP = new BasicNameValuePair("_pw_sql", "");
                loginParameters.add(pwSQLNVP);
                NameValuePair rememberLoginNVP = new BasicNameValuePair("remember_login", "on");
                loginParameters.add(rememberLoginNVP);
                NameValuePair loginNVP = new BasicNameValuePair("login", userName);
                loginParameters.add(loginNVP);
                NameValuePair passwordNVP = new BasicNameValuePair("password", password);
                loginParameters.add(passwordNVP);
                NameValuePair requestTokenNVP = new BasicNameValuePair("request_token", requestToken);
                loginParameters.add(requestTokenNVP);
                NameValuePair redirectURLNVP = new BasicNameValuePair("redirect_url", redirectUrlString);
                loginParameters.add(redirectURLNVP);
                NameValuePair skipFrameworkLoginNVP = new BasicNameValuePair("skip_framework_login", "1");
                loginParameters.add(skipFrameworkLoginNVP);
                LOGGER.debug("about to login");
                responseEntityString = commonHTTPManager.doStringPost(urlString, null, loginParameters, null, null);
                LOGGER.debug("responseEntityString is " + responseEntityString);
                List allowParameters = new ArrayList();
                allowParameters.add(clientIDNVP);
                allowParameters.add(responseTypeNVP);
                allowParameters.add(redirectURINVP);
                allowParameters.add(scopeNVP);
                allowParameters.add(stateNVP);
                allowParameters.add(requestTokenNVP);
                NameValuePair doConsentNVP = new BasicNameValuePair("doconsent", "doconsent");
                allowParameters.add(doConsentNVP);
                String icParameter = getICParameter(responseEntityString);
                LOGGER.debug("icParameter is " + icParameter);
                NameValuePair icNVP = new BasicNameValuePair("ic", icParameter);
                allowParameters.add(icNVP);
                NameValuePair consentAcceptButtonNVP = new BasicNameValuePair("consent_accept", "Accept");
                allowParameters.add(consentAcceptButtonNVP);
                LOGGER.debug("about to accept");
                HttpResponse httpResponse = commonHTTPManager.doHttpResponsePost(urlString, null, allowParameters, null);
                Header[] responseHeaders = httpResponse.getAllHeaders();
                for (Header responseHeader : responseHeaders) {
                    LOGGER.debug("responseHeader is " + responseHeader.getName() + ":" + responseHeader.getValue());
                }

                String authorizationCode = null;
                if (httpResponse.getFirstHeader("Location") != null) {
                    String location = httpResponse.getFirstHeader("Location").getValue();
                    LOGGER.debug("location is " + location);
                    int lastEqualsIndex = location.lastIndexOf("=");
                    authorizationCode = location.substring(lastEqualsIndex + 1, location.length());
                }

                LOGGER.debug("authorizationCode is " + authorizationCode);
                getAuthTokenResponse.setAuthToken(authorizationCode);
            } catch (Exception e) {
                throw new BoxException("failed to parse to a document.", e);
            }
        } else if (BoxConstant.CONFIG_API_REQUEST_FORMAT_XML.equals(apiRequestFormat)) {
            LOGGER.debug("apiRequestFormat is BoxConstant.CONFIG_API_REQUEST_FORMAT_XML");
        } else if (BoxConstant.CONFIG_API_REQUEST_FORMAT_SOAP.equals(apiRequestFormat)) {
            LOGGER.debug("apiRequestFormat is BoxConstant.CONFIG_API_REQUEST_FORMAT_SOAP");
        } else {
            LOGGER.debug("apiRequestFormat is unrecognized");
        }

        return getAuthTokenResponse;
    }

    private String getICParameter(String responseEntityString) {
        LOGGER.debug("starting getICParameter()");
        int indexOfNameEqualsICToken = responseEntityString.indexOf("name=\"ic\"");
        LOGGER.debug("indexOfNameEqualsICToken is " + indexOfNameEqualsICToken);
        int indexOfEqualsValue = responseEntityString.indexOf("=", indexOfNameEqualsICToken + 9);
        LOGGER.debug("indexOfEqualsValue is " + indexOfEqualsValue);
        int indexOfOpenQuoteICValue = responseEntityString.indexOf("\"", indexOfEqualsValue + 1);
        LOGGER.debug("indexOfOpenQuoteICValue is " + indexOfOpenQuoteICValue);
        int lengthOfICValue = 64;
        LOGGER.debug("lengthOfICValue is " + lengthOfICValue);
        String ICValue = responseEntityString.substring(indexOfOpenQuoteICValue + 1, indexOfOpenQuoteICValue + 65);
        LOGGER.debug("ICValue is " + ICValue);
        return ICValue;
    }

    private String getRequestToken(String responseEntityString) {
        LOGGER.debug("starting getRequestToken()");
        int indexOfRequestToken = responseEntityString.indexOf("request_token");
        LOGGER.debug("indexOfRequestToken is " + indexOfRequestToken);
        int indexOfOpenQuoteRequestToken = responseEntityString.indexOf("'", indexOfRequestToken + 1);
        LOGGER.debug("indexOfOpenQuoteRequestToken is " + indexOfOpenQuoteRequestToken);
        int indexOfCloseQuoteRequestToken = responseEntityString.indexOf("'", indexOfOpenQuoteRequestToken + 1);
        LOGGER.debug("indexOfCloseQuoteRequestToken is " + indexOfCloseQuoteRequestToken);
        int lengthOfRequestToken = indexOfCloseQuoteRequestToken - indexOfOpenQuoteRequestToken;
        LOGGER.debug("lengthOfRequestToken is " + lengthOfRequestToken);
        String requestToken = responseEntityString.substring(indexOfOpenQuoteRequestToken + 1, indexOfCloseQuoteRequestToken);
        LOGGER.debug("requestToken is " + requestToken);
        return requestToken;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy