From 09c5cb0a0d33c58897026b7b4b1901c1ddc088f1 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Tue, 24 Aug 2021 19:25:59 +0200 Subject: Implement support of openvpn://import-profile/ support For details about the protocol see https://github.com/OpenVPN/openvpn3/blob/master/doc/webauth.md --- .../de/blinkt/openvpn/activities/MainActivity.java | 34 +++++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) (limited to 'main/src/ui/java/de/blinkt/openvpn/activities/MainActivity.java') diff --git a/main/src/ui/java/de/blinkt/openvpn/activities/MainActivity.java b/main/src/ui/java/de/blinkt/openvpn/activities/MainActivity.java index 58698ea3..fe98cf77 100644 --- a/main/src/ui/java/de/blinkt/openvpn/activities/MainActivity.java +++ b/main/src/ui/java/de/blinkt/openvpn/activities/MainActivity.java @@ -5,11 +5,11 @@ package de.blinkt.openvpn.activities; -import android.annotation.TargetApi; import android.content.Intent; -import android.os.Build; +import android.net.Uri; import android.view.Menu; import android.view.MenuItem; +import android.widget.Toast; import androidx.appcompat.app.ActionBar; import androidx.viewpager.widget.ViewPager; @@ -21,6 +21,7 @@ import de.blinkt.openvpn.fragments.AboutFragment; import de.blinkt.openvpn.fragments.FaqFragment; import de.blinkt.openvpn.fragments.GeneralSettings; import de.blinkt.openvpn.fragments.GraphFragment; +import de.blinkt.openvpn.fragments.ImportRemoteConfig; import de.blinkt.openvpn.fragments.LogFragment; import de.blinkt.openvpn.fragments.SendDumpFragment; import de.blinkt.openvpn.fragments.VPNProfileList; @@ -76,8 +77,14 @@ public class MainActivity extends BaseActivity { @Override protected void onResume() { super.onResume(); - if (getIntent() != null) { - String page = getIntent().getStringExtra("PAGE"); + Intent intent = getIntent(); + if (intent != null) { + if (intent.getAction().equals(Intent.ACTION_VIEW)) + { + Uri uri = intent.getData(); + checkUriForProfileImport(uri); + } + String page = intent.getStringExtra("PAGE"); if ("graph".equals(page)) { mPager.setCurrentItem(1); } @@ -85,6 +92,25 @@ public class MainActivity extends BaseActivity { } } + private void checkUriForProfileImport(Uri uri) { + if ("openvpn".equals(uri.getScheme()) && "import-profile".equals(uri.getHost())) + { + String realUrl = uri.getEncodedPath() + "?" + uri.getEncodedQuery(); + if (!realUrl.startsWith("/https://")) + { + Toast.makeText(this, "Cannot use openvpn://import-profile/ URL that does not use https://", Toast.LENGTH_LONG).show(); + return; + } + realUrl = realUrl.substring(1); + startOpenVPNUrlImport(realUrl); + } + } + + private void startOpenVPNUrlImport(String url) { + ImportRemoteConfig asImportFrag = ImportRemoteConfig.newInstance(url); + asImportFrag.show(getSupportFragmentManager(), "dialog"); + } + @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_menu, menu); -- cgit v1.2.3