package org.liberty.android.fantastischmemo.downloader.quizlet;
import android.util.Log;
import org.liberty.android.fantastischmemo.common.AMEnv;
import org.liberty.android.fantastischmemo.downloader.oauth.OauthAccessCodeRetrievalFragment;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public final class QuizletOAuth2AccessCodeRetrievalFragment extends OauthAccessCodeRetrievalFragment {
private static final String TAG = QuizletOAuth2AccessCodeRetrievalFragment.class.getSimpleName();
public QuizletOAuth2AccessCodeRetrievalFragment() { }
@Override
protected void requestToken() throws IOException {
// Do nothing.
}
@Override
protected String getLoginUrl() {
try {
String uri = String
.format("https://quizlet.com/authorize/?response_type=%s&client_id=%s&scope=%s&state=%s&redirect_uri=%s",
URLEncoder.encode("code", "UTF-8"), URLEncoder
.encode(AMEnv.QUIZLET_CLIENT_ID, "UTF-8"),
URLEncoder.encode("read write_set", "UTF-8"),
URLEncoder.encode("login", "UTF-8"),
URLEncoder.encode(AMEnv.QUIZLET_REDIRECT_URI,
"UTF-8"));
Log.i(TAG, "Oauth request uri is " + uri);
return uri;
} catch (UnsupportedEncodingException e) {
// This is unlikely to happen
Log.e(TAG, "The URL encodeing UTF-8 is not supported ", e);
return null;
}
}
@Override
protected boolean processCallbackUrl(String url) {
Log.i(TAG, "Callback url is " + url);
if (!url.startsWith(AMEnv.QUIZLET_REDIRECT_URI)) {
return false;
}
int index = url.indexOf("code=");
// If there is access token
if (index != -1) {
// Move index through "code="
index += 5;
String accessToken = url.substring(index);
getAuthCodeReceiveListener().onAuthCodeReceived(accessToken);
return true;
}
index = url.indexOf("error=");
if (index != -1) {
// Move index through "error="
index += 6;
String errorString = url.substring(index);
getAuthCodeReceiveListener().onAuthCodeError(errorString);
return true;
}
return false;
}
}