/*
         * @description Authenticates the user with Salesforce via a connected OAuth application.
         *
         * @param username The user's Salesforce username
         * @param password The user's Salesforce password
         *
         * @throws SalesforceConfigurationException if client is not properly configured
         * @throws SalesforceAuthenticationException if authentication request fails due to invalid credentials
         * @throws SalesforceApiException if authentication request fails (possible reasons: network...)
         */
        public IEnumerator login()
        {
            string passwordWithToken = credentials.getPasswordWithToken();

            // Check configuration
            assertConfigurationIsValid(credentials.username, passwordWithToken);

            // Check if Auth Token is already set
            if (isUserLoggedIn())
            {
                yield return(true);
            }

            // Configure request
            WWWForm form = new WWWForm();

            form.AddField("username", credentials.username);
            form.AddField("password", passwordWithToken);
            form.AddField("client_secret", credentials.consumerSecret);
            form.AddField("client_id", credentials.consumerKey);
            form.AddField("grant_type", "password");

            // Send request & parse response
            using (UnityWebRequest request = UnityWebRequest.Post(oAuthEndpoint, form)) {
                yield return(request.SendWebRequest());

                if (request.isNetworkError || request.isHttpError)
                {
                    logResponseError(request);
                    JSONObject errorDetails = JSONObject.Parse(request.downloadHandler.text);
                    if (errorDetails != null)
                    {
                        string error            = errorDetails.GetString("error");
                        string errorDescription = errorDetails.GetString("error_description");
                        if (error == "invalid_client_id" || error == "invalid_client")
                        {
                            throw new SalesforceConfigurationException("Salesforce authentication error due to invalid OAuth configuration: " + errorDescription);
                        }
                        else if (error == "invalid_grant")
                        {
                            throw new SalesforceAuthenticationException("Salesforce authentication error due to invalid user credentials: " + errorDescription);
                        }
                        else
                        {
                            throw new SalesforceApiException("Salesforce authentication error: " + errorDescription);
                        }
                    }
                    throw new SalesforceApiException("Salesforce authentication error: " + request.error);
                }
                else
                {
                    logResponseSuccess(request);
                    JSONObject obj         = JSONObject.Parse(request.downloadHandler.text);
                    string     token       = obj.GetString("access_token");
                    string     instanceUrl = obj.GetString("instance_url");
                    connection = new SalesforceConnection(token, instanceUrl, apiVersion);
                    yield return(true);
                }
            }
        }
Esempio n. 2
0
 /**
  * Allows to resume an already open connection and save time by not logging in again.
  */
 public void setConnection(SalesforceConnection connection)
 {
     this.connection = connection;
 }