From 37f4010e8f81db354085ca5b7b8fc40100169376 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 27 Nov 2011 16:57:05 +0300 Subject: add support for http basic authorization --- src/org/fox/ttrss/ApiRequest.java | 182 ++++++------------------------------ src/org/fox/ttrss/MainActivity.java | 6 +- 2 files changed, 29 insertions(+), 159 deletions(-) (limited to 'src') diff --git a/src/org/fox/ttrss/ApiRequest.java b/src/org/fox/ttrss/ApiRequest.java index a33f07da..a27b3dbb 100644 --- a/src/org/fox/ttrss/ApiRequest.java +++ b/src/org/fox/ttrss/ApiRequest.java @@ -3,9 +3,14 @@ package org.fox.ttrss; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; +import java.net.MalformedURLException; +import java.net.URL; import java.util.HashMap; +import org.apache.http.HttpHost; import org.apache.http.HttpResponse; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.methods.HttpPost; import org.apache.http.conn.scheme.PlainSocketFactory; import org.apache.http.conn.scheme.Scheme; @@ -38,15 +43,16 @@ public class ApiRequest extends AsyncTask, Integer, JsonE private boolean m_trustAny = false; private boolean m_transportDebugging = false; private Context m_context; + private SharedPreferences m_prefs; public ApiRequest(Context context) { m_context = context; - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(m_context); + m_prefs = PreferenceManager.getDefaultSharedPreferences(m_context); - m_api = prefs.getString("ttrss_url", null); - m_trustAny = prefs.getBoolean("ssl_trust_any", false); - m_transportDebugging = prefs.getBoolean("transport_debugging", false); + m_api = m_prefs.getString("ttrss_url", null); + m_trustAny = m_prefs.getBoolean("ssl_trust_any", false); + m_transportDebugging = m_prefs.getBoolean("transport_debugging", false); } @Override @@ -73,129 +79,29 @@ public class ApiRequest extends AsyncTask, Integer, JsonE } HttpPost httpPost = new HttpPost(m_api + "/api/"); - - try { - httpPost.setEntity(new StringEntity(requestStr, "utf-8")); - HttpResponse execute = client.execute(httpPost); - - InputStream content = execute.getEntity().getContent(); - - BufferedReader buffer = new BufferedReader( - new InputStreamReader(content)); - String s = ""; - String response = ""; - - while ((s = buffer.readLine()) != null) { - response += s; + String httpLogin = m_prefs.getString("http_login", ""); + String httpPassword = m_prefs.getString("http_password", ""); + + if (httpLogin.length() > 0) { + if (m_transportDebugging) Log.d(TAG, "Using HTTP Basic authentication."); + + URL targetUrl; + try { + targetUrl = new URL(m_api); + } catch (MalformedURLException e) { + e.printStackTrace(); + return null; } - - if (m_transportDebugging) Log.d(TAG, "<<< " + response); - - JsonParser parser = new JsonParser(); - return parser.parse(response); + HttpHost targetHost = new HttpHost(targetUrl.getHost(), targetUrl.getPort(), targetUrl.getProtocol()); - } catch (Exception e) { - e.printStackTrace(); + client.getCredentialsProvider().setCredentials( + new AuthScope(targetHost.getHostName(), targetHost.getPort()), + new UsernamePasswordCredentials(httpLogin, httpPassword)); } - return null; - } - - /* protected String m_sessionId; - protected String m_apiEndpoint; - protected String m_login; - protected String m_password; - protected int m_authStatus; - protected Gson m_gson = new Gson(); - - protected static final int STATUS_LOGIN_FAILED = 0; - protected static final int STATUS_OK = 1; - protected static final int STATUS_API_DISABLED = 2; - protected static final int STATUS_OTHER_ERROR = 3; - - protected ApiRequest(String sessionId, String apiEndpoint, String login, String password) { - super(); - m_sessionId = sessionId; - m_apiEndpoint = apiEndpoint; - m_authStatus = STATUS_OK; - m_login = login; - m_password = password; - - //Log.d(TAG, "initial SID=" + sessionId); - } - - protected int tryAuthenticate() { - JsonElement result = _sendRequest(new HashMap() { - { - put("op", "login"); - put("user", m_login); - put("password", m_password); - } - }); - - if (result != null) { - try { - JsonObject rv = result.getAsJsonObject(); - - int status = rv.get("status").getAsInt(); - - if (status == 0) { - JsonObject content = rv.get("content").getAsJsonObject(); - if (content != null) { - m_sessionId = content.get("session_id").getAsString(); - - Log.d(TAG, "<<< Authentified, sessionId=" + m_sessionId); - - return STATUS_OK; - } - } else { - JsonObject content = rv.get("content").getAsJsonObject(); - - if (content != null) { - String error = content.get("error").getAsString(); - - if (error.equals("LOGIN_ERROR")) { - m_sessionId = null; - return STATUS_LOGIN_FAILED; - } else if (error.equals("API_DISABLED")) { - m_sessionId = null; - return STATUS_API_DISABLED; - } - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - m_sessionId = null; - return STATUS_OTHER_ERROR; - } - - protected String getSessionId() { - return m_sessionId; - } - - protected int getAuthStatus() { - return m_authStatus; - } - - protected JsonElement _sendRequest(HashMap param) { - - HashMap tmp = new HashMap(param); - - if (m_sessionId != null) - tmp.put("sid", m_sessionId); - - String requestStr = m_gson.toJson(tmp); - - Log.d(TAG, ">>> (" + requestStr + ") " + m_apiEndpoint); - - DefaultHttpClient client = new DefaultHttpClient(); - HttpPost httpPost = new HttpPost(m_apiEndpoint + "/api/"); - try { httpPost.setEntity(new StringEntity(requestStr, "utf-8")); HttpResponse execute = client.execute(httpPost); @@ -212,7 +118,7 @@ public class ApiRequest extends AsyncTask, Integer, JsonE response += s; } - Log.d(TAG, "<<< " + response); + if (m_transportDebugging) Log.d(TAG, "<<< " + response); JsonParser parser = new JsonParser(); @@ -224,38 +130,4 @@ public class ApiRequest extends AsyncTask, Integer, JsonE return null; } - - public JsonElement sendRequest(HashMap params) { - - JsonElement result = _sendRequest(params); - - try { - JsonElement content = result.getAsJsonObject().get("content"); - int status = result.getAsJsonObject().get("status").getAsInt(); - - if (status == 1) { - String error = content.getAsJsonObject().get("error").getAsString(); - - if (error.equals("NOT_LOGGED_IN")) { - Log.d(TAG, "<<< Session invalid, trying to authenticate..."); - - m_sessionId = null; - m_authStatus = tryAuthenticate(); - - if (m_authStatus == STATUS_OK) { - result = _sendRequest(params); - - return result.getAsJsonObject().get("content"); - } - } - } else { - return content; - } - - } catch (Exception e) { - e.printStackTrace(); - } - - return null; - } */ } diff --git a/src/org/fox/ttrss/MainActivity.java b/src/org/fox/ttrss/MainActivity.java index 10eabc28..49b3db03 100644 --- a/src/org/fox/ttrss/MainActivity.java +++ b/src/org/fox/ttrss/MainActivity.java @@ -692,10 +692,8 @@ public class MainActivity extends FragmentActivity implements FeedsFragment.OnFe logout(); - if (m_prefs.getString("ttrss_url", null) == null || - m_prefs.getString("login", null) == null || - m_prefs.getString("password", null) == null) { - + if (m_prefs.getString("ttrss_url", "").length() == 0) { + setLoadingStatus(R.string.login_need_configure, false); } else { -- cgit v1.2.3