Search in sources :

Example 1 with AccessToken

use of com.keylesspalace.tusky.entity.AccessToken in project Tusky by Vavassor.

the class LoginActivity method onStart.

@Override
protected void onStart() {
    super.onStart();
    /* Check if we are resuming during authorization by seeing if the intent contains the
         * redirect that was given to the server. If so, its response is here! */
    Uri uri = getIntent().getData();
    String redirectUri = getOauthRedirectUri();
    preferences = getSharedPreferences(getString(R.string.preferences_file_key), Context.MODE_PRIVATE);
    if (preferences.getString("accessToken", null) != null && preferences.getString("domain", null) != null) {
        // We are already logged in, go to MainActivity
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        finish();
        return;
    }
    if (uri != null && uri.toString().startsWith(redirectUri)) {
        // This should either have returned an authorization code or an error.
        String code = uri.getQueryParameter("code");
        String error = uri.getQueryParameter("error");
        if (code != null) {
            /* During the redirect roundtrip this Activity usually dies, which wipes out the
                 * instance variables, so they have to be recovered from where they were saved in
                 * SharedPreferences. */
            domain = preferences.getString("domain", null);
            clientId = preferences.getString("clientId", null);
            clientSecret = preferences.getString("clientSecret", null);
            setLoading(true);
            /* Since authorization has succeeded, the final step to log in is to exchange
                 * the authorization code for an access token. */
            Callback<AccessToken> callback = new Callback<AccessToken>() {

                @Override
                public void onResponse(Call<AccessToken> call, Response<AccessToken> response) {
                    if (response.isSuccessful()) {
                        onLoginSuccess(response.body().accessToken);
                    } else {
                        setLoading(false);
                        editText.setError(getString(R.string.error_retrieving_oauth_token));
                        Log.e(TAG, String.format("%s %s", getString(R.string.error_retrieving_oauth_token), response.message()));
                    }
                }

                @Override
                public void onFailure(Call<AccessToken> call, Throwable t) {
                    setLoading(false);
                    editText.setError(getString(R.string.error_retrieving_oauth_token));
                    Log.e(TAG, String.format("%s %s", getString(R.string.error_retrieving_oauth_token), t.getMessage()));
                }
            };
            getApiFor(domain).fetchOAuthToken(clientId, clientSecret, redirectUri, code, "authorization_code").enqueue(callback);
        } else if (error != null) {
            /* Authorization failed. Put the error response where the user can read it and they
                 * can try again. */
            setLoading(false);
            editText.setError(getString(R.string.error_authorization_denied));
            Log.e(TAG, getString(R.string.error_authorization_denied) + error);
        } else {
            setLoading(false);
            // This case means a junk response was received somehow.
            editText.setError(getString(R.string.error_authorization_unknown));
        }
    }
}
Also used : Response(retrofit2.Response) Call(retrofit2.Call) Callback(retrofit2.Callback) AccessToken(com.keylesspalace.tusky.entity.AccessToken) CustomTabsIntent(android.support.customtabs.CustomTabsIntent) Intent(android.content.Intent) Uri(android.net.Uri)

Aggregations

Intent (android.content.Intent)1 Uri (android.net.Uri)1 CustomTabsIntent (android.support.customtabs.CustomTabsIntent)1 AccessToken (com.keylesspalace.tusky.entity.AccessToken)1 Call (retrofit2.Call)1 Callback (retrofit2.Callback)1 Response (retrofit2.Response)1