package com.pocketreddit.library.authentication; import java.net.URI; import java.util.ArrayList; import java.util.List; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import android.util.Log; import com.pocketreddit.library.net.HttpHelper; public class LiveAuthenticator implements Authenticator { private static final String TAG = LiveAuthenticator.class.getName(); private static final String LOGIN_URI = "https://ssl.reddit.com/api/login"; private static final String PARAM_USERNAME = "user"; private static final String PARAM_PASSWORD = "passwd"; private static final String PARAM_API_TYPE = "api_type"; private static final String API_TYPE_JSON = "json"; public LoginResult authenticate(String username, String password) throws AuthenticationException { try { return new LoginResult(HttpHelper.getInstance().getJsonObjectFromPost( new URI(LOGIN_URI + "/" + username), nameValuePairs(PARAM_USERNAME, username, PARAM_PASSWORD, password, PARAM_API_TYPE, API_TYPE_JSON))); } catch (Exception e) { Log.e(TAG, "Unable to authenticate user: " + username, e); throw new AuthenticationException("Unable to authenticate user: " + username, e); } } private List<NameValuePair> nameValuePairs(String... keysAndValues) { if (keysAndValues.length % 2 != 0) { throw new IllegalArgumentException("Must contain keys and values, length cannot be odd"); } List<NameValuePair> pairs = new ArrayList<NameValuePair>(); for (int i = 0; i < keysAndValues.length; i += 2) { pairs.add(new BasicNameValuePair(keysAndValues[i], keysAndValues[i + 1])); } return pairs; } }