Skip to content

Commit 067f2b4

Browse files
tobiasKaminskyalperozturk96
authored andcommitted
If enforced server, allow QR scanner, but validate url
Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
1 parent d74f162 commit 067f2b4

2 files changed

Lines changed: 38 additions & 2 deletions

File tree

app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767
import com.nextcloud.operations.PostMethod;
6868
import com.nextcloud.utils.extensions.BundleExtensionsKt;
6969
import com.nextcloud.utils.mdm.MDMConfig;
70-
import com.owncloud.android.BuildConfig;
7170
import com.owncloud.android.MainApp;
7271
import com.owncloud.android.R;
7372
import com.owncloud.android.databinding.AccountSetupBinding;
@@ -107,6 +106,8 @@
107106
import com.owncloud.android.utils.WebViewUtil;
108107
import com.owncloud.android.utils.theme.ViewThemeUtils;
109108

109+
import org.jetbrains.annotations.NotNull;
110+
110111
import java.io.InputStream;
111112
import java.net.URLDecoder;
112113
import java.util.ArrayList;
@@ -351,7 +352,6 @@ private void showEnforcedServers() {
351352
showAuthStatus();
352353
accountSetupBinding.hostUrlFrame.setVisibility(View.GONE);
353354
accountSetupBinding.hostUrlInputHelperText.setVisibility(View.GONE);
354-
accountSetupBinding.scanQr.setVisibility(View.GONE);
355355
accountSetupBinding.serversSpinner.setVisibility(View.VISIBLE);
356356

357357
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.enforced_servers_spinner);
@@ -639,6 +639,13 @@ private void parseAndLoginFromWebView(String dataString) {
639639
String prefix = getString(R.string.login_data_own_scheme) + PROTOCOL_SUFFIX + "login/";
640640
LoginUrlInfo loginUrlInfo = parseLoginDataUrl(prefix, dataString);
641641

642+
if (!checkAllowedServers(loginUrlInfo.getServer())) {
643+
mServerStatusIcon = R.drawable.ic_alert;
644+
mServerStatusText = getString(R.string.server_not_allowed);
645+
showServerStatus();
646+
return;
647+
}
648+
642649
if (accountSetupBinding != null) {
643650
accountSetupBinding.hostUrlInput.setText("");
644651
}
@@ -649,10 +656,38 @@ private void parseAndLoginFromWebView(String dataString) {
649656
mServerStatusIcon = R.drawable.ic_alert;
650657
mServerStatusText = getString(R.string.qr_could_not_be_read);
651658
showServerStatus();
659+
return;
652660
}
653661
checkOcServer();
654662
}
655663

664+
private boolean checkAllowedServers(@NotNull String server) {
665+
String webviewLogin = getString(R.string.webview_login_url);
666+
667+
if (!webviewLogin.isEmpty()) {
668+
if (webviewLogin.startsWith(server)) {
669+
return true;
670+
}
671+
}
672+
673+
String enforcedServerList = getString(R.string.enforce_servers);
674+
675+
if (!enforcedServerList.isEmpty()) {
676+
ArrayList<EnforcedServer> enforcedServers = new Gson().fromJson(enforcedServerList,
677+
new TypeToken<ArrayList<EnforcedServer>>() {
678+
}
679+
.getType());
680+
681+
for (EnforcedServer enforcedServer : enforcedServers) {
682+
if (enforcedServer.getUrl().startsWith(server)) {
683+
return true;
684+
}
685+
}
686+
}
687+
688+
return false;
689+
}
690+
656691
/**
657692
* parses a URI string and returns a login data object with the information from the URI string.
658693
*

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1506,4 +1506,5 @@
15061506
<string name="sync_conflict_notification_title">File upload conflicts</string>
15071507
<string name="sync_conflict_notification_description">Upload conflicts detected. Open uploads to resolve.</string>
15081508
<string name="sync_conflict_notification_action_title">Resolve conflicts</string>
1509+
<string name="server_not_allowed">Server not allowed</string>
15091510
</resources>

0 commit comments

Comments
 (0)