Merge pull request #65 from dddddd-mmmmmm/issue-26

issue-26: Add support for p= authentication method
This commit is contained in:
Andrew Rabert 2020-01-15 15:38:49 -05:00 committed by GitHub
commit a6a784037e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 10 deletions

View File

@ -28,6 +28,7 @@ import android.preference.ListPreference;
import android.preference.Preference; import android.preference.Preference;
import android.preference.PreferenceCategory; import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen; import android.preference.PreferenceScreen;
import android.preference.SwitchPreference;
import android.text.InputType; import android.text.InputType;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
@ -469,6 +470,12 @@ public class SettingsFragment extends PreferenceCompatFragment implements Shared
serverPasswordPreference.setSummary("***"); serverPasswordPreference.setSummary("***");
serverPasswordPreference.setTitle(R.string.settings_server_password); serverPasswordPreference.setTitle(R.string.settings_server_password);
final SwitchPreference authMethodPreference = new SwitchPreference(context);
authMethodPreference.setKey(Constants.PREFERENCES_KEY_AUTH_METHOD + instance);
authMethodPreference.setSummary(R.string.settings_auth_summary);
authMethodPreference.setDefaultValue(true); // use Token/Salt by default
authMethodPreference.setTitle(R.string.settings_auth_method);
final Preference serverOpenBrowser = new Preference(context); final Preference serverOpenBrowser = new Preference(context);
serverOpenBrowser.setKey(Constants.PREFERENCES_KEY_OPEN_BROWSER); serverOpenBrowser.setKey(Constants.PREFERENCES_KEY_OPEN_BROWSER);
serverOpenBrowser.setPersistent(false); serverOpenBrowser.setPersistent(false);
@ -529,6 +536,7 @@ public class SettingsFragment extends PreferenceCompatFragment implements Shared
screen.addPreference(serverLocalNetworkSSIDPreference); screen.addPreference(serverLocalNetworkSSIDPreference);
screen.addPreference(serverUsernamePreference); screen.addPreference(serverUsernamePreference);
screen.addPreference(serverPasswordPreference); screen.addPreference(serverPasswordPreference);
screen.addPreference(authMethodPreference);
screen.addPreference(serverTestConnectionPreference); screen.addPreference(serverTestConnectionPreference);
screen.addPreference(serverOpenBrowser); screen.addPreference(serverOpenBrowser);
screen.addPreference(serverRemoveServerPreference); screen.addPreference(serverRemoveServerPreference);

View File

@ -71,6 +71,7 @@ public final class Constants {
public static final String PREFERENCES_KEY_MUSIC_FOLDER_ID = "musicFolderId"; public static final String PREFERENCES_KEY_MUSIC_FOLDER_ID = "musicFolderId";
public static final String PREFERENCES_KEY_USERNAME = "username"; public static final String PREFERENCES_KEY_USERNAME = "username";
public static final String PREFERENCES_KEY_PASSWORD = "password"; public static final String PREFERENCES_KEY_PASSWORD = "password";
public static final String PREFERENCES_KEY_AUTH_METHOD = "authMethod";
public static final String PREFERENCES_KEY_THEME = "theme"; public static final String PREFERENCES_KEY_THEME = "theme";
public static final String PREFERENCES_KEY_FULL_SCREEN = "fullScreen"; public static final String PREFERENCES_KEY_FULL_SCREEN = "fullScreen";
public static final String PREFERENCES_KEY_DISPLAY_TRACK = "displayTrack"; public static final String PREFERENCES_KEY_DISPLAY_TRACK = "displayTrack";

View File

@ -326,18 +326,24 @@ public final class Util {
builder.addPathSegment("rest"); builder.addPathSegment("rest");
builder.addPathSegment(method + ".view"); builder.addPathSegment(method + ".view");
int hash = (username + password).hashCode(); builder.addQueryParameter("u", username);
Pair<String, String> values = tokens.get(hash);
if (values == null) { if (prefs.getBoolean(Constants.PREFERENCES_KEY_AUTH_METHOD + instance, true)) {
String salt = new BigInteger(130, getRandom()).toString(32); int hash = (username + password).hashCode();
String token = md5Hex(password + salt); Pair<String, String> values = tokens.get(hash);
values = new Pair<>(salt, token); if (values == null) {
tokens.put(hash, values); String salt = new BigInteger(130, getRandom()).toString(32);
String token = md5Hex(password + salt);
values = new Pair<>(salt, token);
tokens.put(hash, values);
}
builder.addQueryParameter("s", values.getFirst());
builder.addQueryParameter("t", values.getSecond());
} else {
builder.addQueryParameter("p", password);
} }
builder.addQueryParameter("u", username);
builder.addQueryParameter("s", values.getFirst());
builder.addQueryParameter("t", values.getSecond());
builder.addQueryParameter("v", Constants.REST_PROTOCOL_VERSION_SUBSONIC); builder.addQueryParameter("v", Constants.REST_PROTOCOL_VERSION_SUBSONIC);
builder.addQueryParameter("c", Constants.REST_CLIENT_ID); builder.addQueryParameter("c", Constants.REST_CLIENT_ID);

View File

@ -135,6 +135,8 @@
<string name="settings.server_internal_address">Local network address</string> <string name="settings.server_internal_address">Local network address</string>
<string name="settings.server_username">Username</string> <string name="settings.server_username">Username</string>
<string name="settings.server_password">Password</string> <string name="settings.server_password">Password</string>
<string name="settings.auth_method">Authentication Method</string>
<string name="settings.auth_summary">Use token/salt authentication?</string>
<string name="settings.server_open_browser">Open in browser</string> <string name="settings.server_open_browser">Open in browser</string>
<string name="settings.cache_title">Music cache</string> <string name="settings.cache_title">Music cache</string>
<string name="settings.preload_wifi">Songs to preload (Wifi)</string> <string name="settings.preload_wifi">Songs to preload (Wifi)</string>