diff --git a/build.gradle b/build.gradle
index 1173817c..e9f66baa 100644
--- a/build.gradle
+++ b/build.gradle
@@ -25,6 +25,7 @@ dependencies {
compile 'com.android.support:design:24.1.1'
compile 'com.google.zxing:android-integration:3.2.1'
compile 'com.google.code.gson:gson:2.7'
+ compile 'org.mindrot:jbcrypt:0.3m'
androidTestCompile 'com.squareup.okhttp:mockwebserver:2.4.0'
}
diff --git a/src/main/java/com/nutomic/syncthingandroid/activities/WebGuiActivity.java b/src/main/java/com/nutomic/syncthingandroid/activities/WebGuiActivity.java
index 9a68f183..a1547426 100644
--- a/src/main/java/com/nutomic/syncthingandroid/activities/WebGuiActivity.java
+++ b/src/main/java/com/nutomic/syncthingandroid/activities/WebGuiActivity.java
@@ -7,6 +7,7 @@ import android.net.http.SslError;
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
+import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.webkit.HttpAuthHandler;
@@ -16,6 +17,7 @@ import android.webkit.WebViewClient;
import com.nutomic.syncthingandroid.R;
import com.nutomic.syncthingandroid.syncthing.SyncthingService;
+import com.nutomic.syncthingandroid.util.ConfigXml;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -44,6 +46,8 @@ public class WebGuiActivity extends SyncthingActivity
private X509Certificate mCaCert;
+ private ConfigXml mConfig;
+
/**
* Hides the loading screen and shows the WebView once it is fully loaded.
*/
@@ -53,7 +57,7 @@ public class WebGuiActivity extends SyncthingActivity
* Catch (self-signed) SSL errors and test if they correspond to Syncthing's certificate.
*/
@Override
- public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) {
+ public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
try {
int sdk = android.os.Build.VERSION.SDK_INT;
if (sdk >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
@@ -82,8 +86,10 @@ public class WebGuiActivity extends SyncthingActivity
}
}
- public void onReceivedHttpAuthRequest (WebView view, HttpAuthHandler handler, String host, String realm) {
- handler.proceed(getService().getApi().getGuiUser(), getService().getApi().getGuiPassword());
+ public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
+ String password = PreferenceManager.getDefaultSharedPreferences(WebGuiActivity.this)
+ .getString("web_gui_password", "");
+ handler.proceed(mConfig.getUserName(), password);
}
@Override
@@ -106,6 +112,7 @@ public class WebGuiActivity extends SyncthingActivity
setContentView(R.layout.activity_web_gui);
mLoadingView = findViewById(R.id.loading);
+ mConfig = new ConfigXml(this);
loadCaCert();
mWebView = (WebView) findViewById(R.id.webview);
diff --git a/src/main/java/com/nutomic/syncthingandroid/fragments/SettingsFragment.java b/src/main/java/com/nutomic/syncthingandroid/fragments/SettingsFragment.java
index ada19f67..3c8079dd 100644
--- a/src/main/java/com/nutomic/syncthingandroid/fragments/SettingsFragment.java
+++ b/src/main/java/com/nutomic/syncthingandroid/fragments/SettingsFragment.java
@@ -44,8 +44,10 @@ public class SettingsFragment extends PreferenceFragment
private static final String DEVICE_NAME_KEY = "deviceName";
private static final String USAGE_REPORT_ACCEPTED = "urAccepted";
private static final String ADDRESS = "address";
- private static final String GUI_USER = "gui_user";
- private static final String GUI_PASSWORD = "gui_password";
+ private static final String USER = "user";
+ // Note that this preference is seperate from the syncthing config value. While Syncthing
+ // stores a password hash, we store the plaintext password in the Android preferences.
+ private static final String PASSWORD = "web_gui_password";
private static final String EXPORT_CONFIG = "export_config";
private static final String IMPORT_CONFIG = "import_config";
private static final String STTRACE = "sttrace";
@@ -96,6 +98,13 @@ public class SettingsFragment extends PreferenceFragment
Preference address = mGuiScreen.findPreference(ADDRESS);
address.setOnPreferenceChangeListener(this);
applyPreference(address, api.getValue(RestApi.TYPE_GUI, ADDRESS));
+
+ Preference user = mGuiScreen.findPreference(USER);
+ user.setOnPreferenceChangeListener(this);
+ applyPreference(user, api.getValue(RestApi.TYPE_GUI, USER));
+
+ Preference password = mGuiScreen.findPreference(PASSWORD);
+ password.setOnPreferenceChangeListener(this);
}
}
@@ -113,7 +122,6 @@ public class SettingsFragment extends PreferenceFragment
}
}
-
/**
* Loads layout, sets version from Rest API.
*
@@ -139,8 +147,6 @@ public class SettingsFragment extends PreferenceFragment
Preference appVersion = screen.findPreference(APP_VERSION_KEY);
mOptionsScreen = (PreferenceScreen) screen.findPreference(SYNCTHING_OPTIONS_KEY);
mGuiScreen = (PreferenceScreen) screen.findPreference(SYNCTHING_GUI_KEY);
- final Preference user = screen.findPreference(GUI_USER);
- Preference password = screen.findPreference(GUI_PASSWORD);
Preference sttrace = findPreference(STTRACE);
try {
@@ -159,8 +165,6 @@ public class SettingsFragment extends PreferenceFragment
screen.findPreference(EXPORT_CONFIG).setOnPreferenceClickListener(this);
screen.findPreference(IMPORT_CONFIG).setOnPreferenceClickListener(this);
screen.findPreference(SYNCTHING_RESET).setOnPreferenceClickListener(this);
- user.setOnPreferenceChangeListener(this);
- password.setOnPreferenceChangeListener(this);
sttrace.setOnPreferenceChangeListener(this);
}
@@ -256,32 +260,22 @@ public class SettingsFragment extends PreferenceFragment
} else if (preference.getKey().equals(ADDRESS)) {
mSyncthingService.getApi().setValue(
RestApi.TYPE_GUI, preference.getKey(), o, false, getActivity());
+ } else if (preference.getKey().equals(USER)) {
+ mSyncthingService.getApi().setValue(
+ RestApi.TYPE_GUI, preference.getKey(), o, false, getActivity());
+ } else if (preference.getKey().equals(PASSWORD)) {
+ mSyncthingService.getApi().setValue(
+ RestApi.TYPE_GUI, "password", o, false, getActivity());
}
-
// Avoid any code injection.
- int error = 0;
if (preference.getKey().equals(STTRACE)) {
if (((String) o).matches("[a-z, ]*"))
requireRestart = true;
- else
- error = R.string.toast_invalid_sttrace;
- } else if (preference.getKey().equals(GUI_USER)) {
- String s = (String) o;
- if (!s.contains(":") && !s.contains("'"))
- requireRestart = true;
- else
- error = R.string.toast_invalid_username;
- } else if (preference.getKey().equals(GUI_PASSWORD)) {
- String s = (String) o;
- if (!s.contains(":") && !s.contains("'"))
- requireRestart = true;
- else
- error = R.string.toast_invalid_password;
- }
- if (error != 0) {
- Toast.makeText(getActivity(), error, Toast.LENGTH_SHORT).show();
- return false;
+ else {
+ Toast.makeText(getActivity(), R.string.toast_invalid_sttrace, Toast.LENGTH_SHORT).show();
+ return false;
+ }
}
if (requireRestart)
diff --git a/src/main/java/com/nutomic/syncthingandroid/syncthing/RestApi.java b/src/main/java/com/nutomic/syncthingandroid/syncthing/RestApi.java
index af8f31c7..965b2cfc 100644
--- a/src/main/java/com/nutomic/syncthingandroid/syncthing/RestApi.java
+++ b/src/main/java/com/nutomic/syncthingandroid/syncthing/RestApi.java
@@ -173,10 +173,6 @@ public class RestApi implements SyncthingService.OnWebGuiAvailableListener,
private final String mApiKey;
- private final String mGuiUser;
-
- private final String mGuiPassword;
-
private final String mHttpsCertPath;
private JSONObject mConfig;
@@ -207,13 +203,11 @@ public class RestApi implements SyncthingService.OnWebGuiAvailableListener,
*/
private final Map mCacheFolderPathLookup = new HashMap();
- public RestApi(Context context, String url, String apiKey, String guiUser, String guiPassword,
- OnApiAvailableListener apiListener, OnConfigChangedListener configListener) {
+ public RestApi(Context context, String url, String apiKey, OnApiAvailableListener apiListener,
+ OnConfigChangedListener configListener) {
mContext = context;
mUrl = url;
mApiKey = apiKey;
- mGuiUser = guiUser;
- mGuiPassword = guiPassword;
mHttpsCertPath = mContext.getFilesDir() + "/" + SyncthingService.HTTPS_CERT_FILE;
mOnApiAvailableListener = apiListener;
mOnConfigChangedListener = configListener;
@@ -1079,18 +1073,6 @@ public class RestApi implements SyncthingService.OnWebGuiAvailableListener,
return new Device();
}
- public String getApiKey() {
- return mApiKey;
- }
-
- public String getGuiUser() {
- return mGuiUser;
- }
-
- public String getGuiPassword() {
- return mGuiPassword;
- }
-
/**
* Returns value of usage reporting preference.
*/
diff --git a/src/main/java/com/nutomic/syncthingandroid/syncthing/SyncthingRunnable.java b/src/main/java/com/nutomic/syncthingandroid/syncthing/SyncthingRunnable.java
index 56849f56..778c3a59 100644
--- a/src/main/java/com/nutomic/syncthingandroid/syncthing/SyncthingRunnable.java
+++ b/src/main/java/com/nutomic/syncthingandroid/syncthing/SyncthingRunnable.java
@@ -120,8 +120,6 @@ public class SyncthingRunnable implements Runnable {
env.put("STTRACE", sp.getString("sttrace", ""));
env.put("STNORESTART", "1");
env.put("STNOUPGRADE", "1");
- env.put("STGUIAUTH", sp.getString("gui_user", "") + ":" +
- sp.getString("gui_password", ""));
if (sp.getBoolean("use_tor", false)) {
env.put("all_proxy", "socks5://localhost:9050");
env.put("ALL_PROXY_NO_FALLBACK", "1");
diff --git a/src/main/java/com/nutomic/syncthingandroid/syncthing/SyncthingService.java b/src/main/java/com/nutomic/syncthingandroid/syncthing/SyncthingService.java
index 69c5c86c..6c378edd 100644
--- a/src/main/java/com/nutomic/syncthingandroid/syncthing/SyncthingService.java
+++ b/src/main/java/com/nutomic/syncthingandroid/syncthing/SyncthingService.java
@@ -305,22 +305,8 @@ public class SyncthingService extends Service implements
@Override
@TargetApi(21)
public void onCreate() {
+ super.onCreate();
PRNGFixes.apply();
- SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
-
- if (isFirstStart()) {
- char[] chars =
- "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz".toCharArray();
- StringBuilder sb = new StringBuilder();
- SecureRandom random = new SecureRandom();
- for (int i = 0; i < 20; i++)
- sb.append(chars[random.nextInt(chars.length)]);
-
- String user = Build.MODEL.replaceAll("[^a-zA-Z0-9 ]", "");
- Log.i(TAG, "Generated GUI username and password (username is " + user + ")");
- sp.edit().putString("gui_user", user)
- .putString("gui_password", sb.toString()).apply();
- }
mDeviceStateHolder = new DeviceStateHolder(SyncthingService.this);
registerReceiver(mDeviceStateHolder, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
@@ -328,9 +314,9 @@ public class SyncthingService extends Service implements
registerReceiver(mPowerSaveModeChangedReceiver,
new IntentFilter(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED));
}
-
- new StartupTask(sp.getString("gui_user",""), sp.getString("gui_password","")).execute();
- sp.registerOnSharedPreferenceChangeListener(this);
+ new StartupTask().execute();
+ PreferenceManager.getDefaultSharedPreferences(this)
+ .registerOnSharedPreferenceChangeListener(this);
}
/**
@@ -339,13 +325,6 @@ public class SyncthingService extends Service implements
* {@code Pair}.
*/
private class StartupTask extends AsyncTask> {
- String mGuiUser;
- String mGuiPassword;
-
- public StartupTask(String guiUser, String guiPassword) {
- mGuiUser = guiUser;
- mGuiPassword = guiPassword;
- }
@Override
protected Pair doInBackground(Void... voids) {
@@ -368,7 +347,6 @@ public class SyncthingService extends Service implements
}
mApi = new RestApi(SyncthingService.this, urlAndKey.first, urlAndKey.second,
- mGuiUser, mGuiPassword,
new RestApi.OnApiAvailableListener() {
@Override
public void onApiAvailable() {
diff --git a/src/main/java/com/nutomic/syncthingandroid/util/ConfigXml.java b/src/main/java/com/nutomic/syncthingandroid/util/ConfigXml.java
index 06c0f985..963a29b7 100644
--- a/src/main/java/com/nutomic/syncthingandroid/util/ConfigXml.java
+++ b/src/main/java/com/nutomic/syncthingandroid/util/ConfigXml.java
@@ -3,11 +3,13 @@ package com.nutomic.syncthingandroid.util;
import android.content.Context;
import android.os.Build;
import android.os.Environment;
+import android.preference.PreferenceManager;
import android.util.Log;
import com.nutomic.syncthingandroid.R;
import com.nutomic.syncthingandroid.syncthing.SyncthingRunnable;
+import org.mindrot.jbcrypt.BCrypt;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -16,6 +18,7 @@ import org.xml.sax.SAXException;
import java.io.File;
import java.io.IOException;
+import java.security.SecureRandom;
import java.util.Arrays;
import java.util.Locale;
@@ -96,6 +99,7 @@ public class ConfigXml {
if (isFirstStart) {
changeDefaultFolder();
+ generateLoginInfo();
}
updateIfNeeded();
}
@@ -116,6 +120,10 @@ public class ConfigXml {
return getGuiElement().getElementsByTagName("apikey").item(0).getTextContent();
}
+ public String getUserName() {
+ return getGuiElement().getElementsByTagName("user").item(0).getTextContent();
+ }
+
/**
* Updates the config file.
*
@@ -225,7 +233,7 @@ public class ConfigXml {
/**
* Change default folder id to camera and path to camera folder path.
*/
- public void changeDefaultFolder() {
+ private void changeDefaultFolder() {
Element folder = (Element) mConfig.getDocumentElement()
.getElementsByTagName("folder").item(0);
String model = Build.MODEL
@@ -240,6 +248,36 @@ public class ConfigXml {
saveChanges();
}
+ /**
+ * Generates username and config, stores them in config and preferences.
+ *
+ * We have to store the plaintext password in preferences, because we need it in
+ * WebGuiActivity. The password in the config is hashed, so we can't use it directly.
+ */
+ private void generateLoginInfo() {
+ char[] chars =
+ "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz".toCharArray();
+ StringBuilder password = new StringBuilder();
+ SecureRandom random = new SecureRandom();
+ for (int i = 0; i < 20; i++)
+ password.append(chars[random.nextInt(chars.length)]);
+
+ String user = Build.MODEL.replaceAll("[^a-zA-Z0-9 ]", "");
+ Log.i(TAG, "Generated GUI username and password (username is " + user + ")");
+
+ Node userNode = mConfig.createElement("user");
+ getGuiElement().appendChild(userNode);
+ userNode.setTextContent(user);
+
+ Node passwordNode = mConfig.createElement("password");
+ getGuiElement().appendChild(passwordNode);
+ String hashed = BCrypt.hashpw(password.toString(), BCrypt.gensalt());
+ passwordNode.setTextContent(hashed);
+ PreferenceManager.getDefaultSharedPreferences(mContext).edit()
+ .putString("web_gui_password", password.toString())
+ .apply();
+ }
+
/**
* Writes updated mConfig back to file.
*/
diff --git a/src/main/res/layout/activity_web_gui.xml b/src/main/res/layout/activity_web_gui.xml
index 9a459cbc..4507a8b4 100644
--- a/src/main/res/layout/activity_web_gui.xml
+++ b/src/main/res/layout/activity_web_gui.xml
@@ -20,7 +20,6 @@
android:orientation="vertical">
diff --git a/src/main/res/layout/dialog_loading.xml b/src/main/res/layout/dialog_loading.xml
index c4301c12..a6926d8c 100644
--- a/src/main/res/layout/dialog_loading.xml
+++ b/src/main/res/layout/dialog_loading.xml
@@ -7,7 +7,6 @@
android:theme="?alertDialogTheme">
В настройките на STTRACE са разрешени само символите a-z и \',\'
- Символите : и \' ме могат да бъдат ползвани като част от потребителско име
- Символите : и \' ме могат да бъдат ползвани като част от парола
Нулиране на базата данни
diff --git a/src/main/res/values-cs/strings.xml b/src/main/res/values-cs/strings.xml
index 7dc277c5..19e43914 100644
--- a/src/main/res/values-cs/strings.xml
+++ b/src/main/res/values-cs/strings.xml
@@ -194,9 +194,7 @@ Všechny problémy, se kterými se setkáte, nahlašte prosím přes Github.
V STTRACE jsou povoleny pouze znaky a-z a \',\'
- V uživatelském jménu nejsou povoleny znaky : a \'
- V heslu nejsou povoleny znaky : a \'
Resetovat databázi
diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml
index 445ea5f7..4e14499b 100644
--- a/src/main/res/values-de/strings.xml
+++ b/src/main/res/values-de/strings.xml
@@ -185,9 +185,7 @@ Bitte auftretenden Probleme via Github melden.
Nur a-z und \',\' sind in STTRACE Optionen errlaubt
- Die Zeichen : und \' sind im Benutzernamen nicht erlaubt
- Die Zeichen : und \' sind im Passwort nicht erlaubt
Datenbank zurücksetzen
diff --git a/src/main/res/values-es-rMX/strings.xml b/src/main/res/values-es-rMX/strings.xml
index 02c719f4..8fa40fbc 100644
--- a/src/main/res/values-es-rMX/strings.xml
+++ b/src/main/res/values-es-rMX/strings.xml
@@ -185,9 +185,7 @@ Por favor reporte cualquier problema que encuentre por medio de Github.
Sólo (a-z) y (\',\') están permitidos en las opciones de STTRACE
- Los caracteres : y \' no están permitidos en el nombre de usuario
- Los caracteres : y \' no están permitidos en la contraseña
Reiniciar Base de Datos
diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml
index 378220fc..6682a1b9 100644
--- a/src/main/res/values-es/strings.xml
+++ b/src/main/res/values-es/strings.xml
@@ -177,9 +177,7 @@ Por favor informe de qualquier problema que encuentres via Github.
Sólo se permiten a-z y \',\' en las opciones STTRACE
- No se permiten los carácteres : y \' en el nombre de usuario
- No se permiten los carácteres : y \' en la contraseña
Restablecer base de datos
diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml
index c89aab05..1e8a3e9f 100644
--- a/src/main/res/values-fr/strings.xml
+++ b/src/main/res/values-fr/strings.xml
@@ -191,9 +191,7 @@ S\'il vous plait, signalez les problèmes que vous rencontrez via Gihub.
Seuls, les caractères a-z et \',\' sont autorisés dans les options STTRACE
- Les caractères : et \' ne sont pas autorisés dans le nom d\'utilisateur
- Les caractères : et \' ne sont pas autorisés dans le mot de passe
Remise à zéro de la base de données
diff --git a/src/main/res/values-it/strings.xml b/src/main/res/values-it/strings.xml
index ec10917b..39e7b628 100644
--- a/src/main/res/values-it/strings.xml
+++ b/src/main/res/values-it/strings.xml
@@ -194,9 +194,7 @@ Riferisci tramite Github i problemi che incontri.
Solo le lettere da a-z e la virgola \',\' sono consentiti nelle opzioni STTRACE
- I caratteri : (duepunti) e \' (apostrofo) non sono consentiti nel nome utente
- I caratteri : (duepunti) e \' (apostrofo) non sono consentiti nella password
Reset del Database
diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml
index 164a42f3..fbde8a82 100644
--- a/src/main/res/values-ja/strings.xml
+++ b/src/main/res/values-ja/strings.xml
@@ -194,9 +194,7 @@
STTRACE オプションでは、a-z および \',\' のみ使用できます。
- ユーザー名に 文字 : および \' は使用できません
- パスワードに 文字 : および \' は使用できません
データベースをリセット
diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml
index b8e1382f..e0f55390 100644
--- a/src/main/res/values-ko/strings.xml
+++ b/src/main/res/values-ko/strings.xml
@@ -193,9 +193,7 @@
STTRACE 옵션에서는 a-z 와 \'.\' 외의 문자를 사용할 수 없습니다.
- 문자 :와 \'은 사용자명으로 사용할 수 없습니다
- 문자 :와 \'은 비밀번호로 사용할 수 없습니다
데이터베이스 리셋
diff --git a/src/main/res/values-nb/strings.xml b/src/main/res/values-nb/strings.xml
index ec59d8e0..c75d7143 100644
--- a/src/main/res/values-nb/strings.xml
+++ b/src/main/res/values-nb/strings.xml
@@ -194,9 +194,7 @@ Vennligst rapporter eventuelle problemer som oppstår via GitHub.
Bare a-z og \',\' er tillatt som STTRACE-valg
- Tegnene : og \' er ikke tillatt i brukernavn
- Tegnene : og \' er ikke tillatt i passord
Nullstill database
diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml
index 6897a26e..fcaf341d 100644
--- a/src/main/res/values-nl/strings.xml
+++ b/src/main/res/values-nl/strings.xml
@@ -194,9 +194,7 @@ Gelieve alle problemen die je tegenkomt via GitHub te melden.
Enkel a-z en \',\' zijn toegestaan in STTRACE-opties
- Tekens : en \' zijn niet toegestaan in gebruikersnaam
- Tekens : en \' zijn niet toegestaan in wachtwoord
Database opnieuw instellen
diff --git a/src/main/res/values-nn/strings.xml b/src/main/res/values-nn/strings.xml
index 1e934a44..d78a69ae 100644
--- a/src/main/res/values-nn/strings.xml
+++ b/src/main/res/values-nn/strings.xml
@@ -194,9 +194,7 @@ Om du skulle støyte på problem, ver snill å rapportere dei via Github.
Berre a-z og \',\' er tillatne i STTRACE-alternativ
- Teikna : og \' er ikkje tillatne i brukernamn
- Teikna : og \' er ikkje tillatne i passord
Nullstill database
diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml
index c1a939ea..aca6641b 100644
--- a/src/main/res/values-pl/strings.xml
+++ b/src/main/res/values-pl/strings.xml
@@ -181,9 +181,7 @@ Proszę zgłaszać błędy programu w serwisie Github.
Tylko znaki a-z oraz „,” są dopuszczalne w STTRACE
- Znaki „:” oraz „\'” są niedozwolone w nazwie użytkownika
- Znaki „:” oraz „\'” są niedozwolone w haśle
Przywróć pierwotny stan bazy danych
diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml
index abe329d3..a68e6914 100644
--- a/src/main/res/values-pt-rBR/strings.xml
+++ b/src/main/res/values-pt-rBR/strings.xml
@@ -194,9 +194,7 @@ Por favor, informe-nos sobre quaisquer problemas via Github.
Somente a-z e \",\" (vírgula) são permitidos nas opções do STTRACE
- Caracteres \":\" (dois-pontos) e \"\'\" (apóstrofo) não são permitidos no nome de usuário
- Caracteres \":\" (dois-pontos) e \"\'\" (apóstrofo) não são permitidos na senha
Limpar banco de dados
diff --git a/src/main/res/values-pt/strings.xml b/src/main/res/values-pt/strings.xml
index 9919e3dd..8f42a804 100644
--- a/src/main/res/values-pt/strings.xml
+++ b/src/main/res/values-pt/strings.xml
@@ -172,9 +172,7 @@ Relate quaisquer problemas que encontre via Github, por favor.
Apenas é permitido usar a-z e \';\' nas opções do STTRACE
- Os caracteres : e \' não são permitidos no nome de utilizador
- Os caracteres : e \' não são permitidos na senha
Reiniciar a base de dados
diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml
index c4abff47..b8424856 100644
--- a/src/main/res/values-ru/strings.xml
+++ b/src/main/res/values-ru/strings.xml
@@ -188,9 +188,7 @@
В настройках STTRACE можно использовать только символы a-z и \',\'
- Символы : и \' запрещено использовать в имени пользователя
- Символы : и \' запрещено использовать в пароле
Сбросить базу данных
diff --git a/src/main/res/values-sk/strings.xml b/src/main/res/values-sk/strings.xml
index dd297597..e0b673b1 100644
--- a/src/main/res/values-sk/strings.xml
+++ b/src/main/res/values-sk/strings.xml
@@ -170,9 +170,7 @@ Aby ste mohli zdielať dáta s ostatnými zariadeniami, musíte najprv pridať i
V STTRACE options sú povolené iba znaky a-z a \',\'
- Dvojbodka a apostrof nie sú v uživatelskom mene povolené
- Dvojbodka a apostrof nie sú v hesle povolené
Resetovať Databázu
diff --git a/src/main/res/values-sv-rSE/strings.xml b/src/main/res/values-sv-rSE/strings.xml
index cd3ef8c4..43554462 100644
--- a/src/main/res/values-sv-rSE/strings.xml
+++ b/src/main/res/values-sv-rSE/strings.xml
@@ -194,9 +194,7 @@ Vänligen rapportera eventuella problem du stöter på via Github.
Endast a-z och \',\' är tillåtna i STTRACE alternativ
- Tecknena : och \' tillåts inte i användarnamnet
- Tecknet : och \' tillåts inte i lösenordet
Återställ databas
diff --git a/src/main/res/values-sv/strings.xml b/src/main/res/values-sv/strings.xml
index aab05819..528a5e2d 100644
--- a/src/main/res/values-sv/strings.xml
+++ b/src/main/res/values-sv/strings.xml
@@ -194,9 +194,7 @@ Vänligen rapportera eventuella problem du stöter på via Github.
Endast a-z och \',\' är tillåtna i STTRACE alternativ
- Tecknena : och \' tillåts inte i användarnamnet
- Tecknena : och \' tillåts inte i lösenordet
Återställ databas
diff --git a/src/main/res/values-tr/strings.xml b/src/main/res/values-tr/strings.xml
index a8892ae5..cadd211a 100644
--- a/src/main/res/values-tr/strings.xml
+++ b/src/main/res/values-tr/strings.xml
@@ -177,9 +177,7 @@ Lütfen, herhangi bir sorunla karşılaştığınızda Github üzerinden bildiri
STTRACE seçenekleri içinde sadece a-z ve \',\' karakterleri kullanabilirsiniz
- Kullanıcı adı içinde : ve \' karakterleri kullanamazsınız
- Parola içinde : ve \' karakterleri kullanamazsınız
Veritabanını Sıfırla
diff --git a/src/main/res/values-vi/strings.xml b/src/main/res/values-vi/strings.xml
index 1c422a2a..ab3570ad 100644
--- a/src/main/res/values-vi/strings.xml
+++ b/src/main/res/values-vi/strings.xml
@@ -185,9 +185,7 @@ Xin báo cáo mọi vấn đề phát sinh thông qua Github.
Chỉ cho phép a-z và \',\' trong tuỳ chọn STTRACE
- Không cho phép : và \' trong tên người dùng
- Không cho phép : và \' trong mật khẩu
Cài lại CSDL
diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml
index e94aafc1..198fe7d5 100644
--- a/src/main/res/values-zh-rCN/strings.xml
+++ b/src/main/res/values-zh-rCN/strings.xml
@@ -194,9 +194,7 @@
STTRACE 选项仅允许 a-z 与逗号
- 用户名不允许存在符号 \'
- 密码不允许存在符号 \'
重置数据库
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 713c0ccc..711fb983 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -325,12 +325,6 @@ Please report any problems you encounter via Github.
Only a-z and \',\' are allowed in STTRACE options
-
- Characters : and \' are not allowed in username
-
-
- Characters : and \' are not allowed in password
-
Reset Database
diff --git a/src/main/res/values/styles.xml b/src/main/res/values/styles.xml
index c546bc97..52ccbb17 100644
--- a/src/main/res/values/styles.xml
+++ b/src/main/res/values/styles.xml
@@ -41,11 +41,6 @@
- @null
-
-