import android.content.res.Resources;
import android.database.sqlite.SQLiteDatabase;
import android.preference.PreferenceManager;
+import android.util.Log;
import net.ktnx.mobileledger.model.Data;
+import net.ktnx.mobileledger.model.MobileLedgerProfile;
import net.ktnx.mobileledger.utils.Globals;
import net.ktnx.mobileledger.utils.Logger;
import net.ktnx.mobileledger.utils.MobileLedgerDatabase;
+import java.net.Authenticator;
+import java.net.MalformedURLException;
+import java.net.PasswordAuthentication;
+import java.net.URL;
+
import static net.ktnx.mobileledger.ui.activity.SettingsActivity.PREF_KEY_SHOW_ONLY_STARRED_ACCOUNTS;
public class App extends Application {
(preference, value) -> Data.optShowOnlyStarred
.set(preference.getBoolean(PREF_KEY_SHOW_ONLY_STARRED_ACCOUNTS, false));
p.registerOnSharedPreferenceChangeListener(handler);
+ Authenticator.setDefault(new Authenticator() {
+ @Override
+ protected PasswordAuthentication getPasswordAuthentication() {
+ MobileLedgerProfile p = Data.profile.getValue();
+ if ((p != null) && p.isAuthEnabled()) {
+ try {
+ final URL url = new URL(p.getUrl());
+ final String requestingHost = getRequestingHost();
+ final String expectedHost = url.getHost();
+ if (requestingHost.equalsIgnoreCase(expectedHost))
+ return new PasswordAuthentication(p.getAuthUserName(),
+ p.getAuthPassword().toCharArray());
+ else Log.w("http-auth",
+ String.format("Requesting host [%s] differs from expected [%s]",
+ requestingHost, expectedHost));
+ }
+ catch (MalformedURLException e) {
+ e.printStackTrace();
+ }
+ }
+
+ return super.getPasswordAuthentication();
+ }
+ });
}
private void updateMonthNames() {
Resources rm = getResources();
package net.ktnx.mobileledger.utils;
-import android.util.Base64;
-
import net.ktnx.mobileledger.model.MobileLedgerProfile;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
-import java.nio.charset.StandardCharsets;
import static net.ktnx.mobileledger.utils.Logger.debug;
url += path;
debug("network", "Connecting to " + url);
HttpURLConnection http = (HttpURLConnection) new URL(url).openConnection();
- if (use_auth) {
- final String auth_user = profile.getAuthUserName();
- final String auth_password = profile.getAuthPassword();
- final byte[] bytes = (String.format("%s:%s", auth_user, auth_password))
- .getBytes(StandardCharsets.UTF_8);
- final String value = Base64.encodeToString(bytes, Base64.DEFAULT);
- http.setRequestProperty("Authorization", "Basic " + value);
- }
- http.setAllowUserInteraction(false);
+ http.setAllowUserInteraction(true);
http.setRequestProperty("Accept-Charset", "UTF-8");
http.setInstanceFollowRedirects(false);
http.setUseCaches(false);