[orbot/master] add overall preference for enabling/disabling onion service hosting

commit 0e39a7776c03d82f8e5dc08a639b401b75de0f08 Author: n8fr8 <nathan@guardianproject.info> Date: Thu May 20 10:50:49 2021 -0400 add overall preference for enabling/disabling onion service hosting --- orbotservice/build.gradle | 2 +- orbotservice/src/main/assets/fronts | 5 +- .../torproject/android/service/OrbotService.java | 126 ++++++++++----------- .../org/torproject/android/service/util/Prefs.java | 10 ++ 4 files changed, 75 insertions(+), 68 deletions(-) diff --git a/orbotservice/build.gradle b/orbotservice/build.gradle index 9f79f17f..67770146 100644 --- a/orbotservice/build.gradle +++ b/orbotservice/build.gradle @@ -64,5 +64,5 @@ dependencies { api 'info.guardianproject:jtorctl:0.4.5.7' implementation 'info.guardianproject:tor-android:0.4.5.7' - implementation 'com.github.tladesignz:IPtProxy:0.5.2' + implementation 'com.github.tladesignz:IPtProxy:0.6.0' } diff --git a/orbotservice/src/main/assets/fronts b/orbotservice/src/main/assets/fronts index 6782446d..6cafa57b 100644 --- a/orbotservice/src/main/assets/fronts +++ b/orbotservice/src/main/assets/fronts @@ -1,5 +1,6 @@ -snowflake https://d2kt284300pde7.cloudfront.net/ -snowflake-stun stun:stun.l.google.com:19302 +snowflake-target https://snowflake-broker.torproject.net.global.prod.fastly.net/ +snowflake-front cdn.sstatic.net +snowflake-stun stun:stun.stunprotocol.org:3478 moat-cdn https://d50gd378qj74g.cloudfront.net/ moat-url https://moat.torproject.org.global.prod.fastly.net/ moat-front cdn.sstatic.net \ No newline at end of file diff --git a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java index 5077ed6c..ed463752 100644 --- a/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java +++ b/orbotservice/src/main/java/org/torproject/android/service/OrbotService.java @@ -296,32 +296,29 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb private void stopTorAsync() { - new Thread(() -> { - Log.i("OrbotService", "stopTor"); - try { - sendCallbackStatus(STATUS_STOPPING); - sendCallbackLogMessage(getString(R.string.status_shutting_down)); - - if (useIPtObfsMeekProxy()) - IPtProxy.stopObfs4Proxy(); + Log.i("OrbotService", "stopTor"); + try { + sendCallbackStatus(STATUS_STOPPING); + sendCallbackLogMessage(getString(R.string.status_shutting_down)); - if (useIPtSnowflakeProxy()) - IPtProxy.stopSnowflake(); + if (useIPtObfsMeekProxy()) + IPtProxy.stopObfs4Proxy(); + if (useIPtSnowflakeProxy()) + IPtProxy.stopSnowflake(); - stopTorDaemon(true); + stopTor(); - //stop the foreground priority and make sure to remove the persistant notification - stopForeground(true); + //stop the foreground priority and make sure to remove the persistant notification + stopForeground(true); - sendCallbackLogMessage(getString(R.string.status_disabled)); - } catch (Exception e) { - logNotice("An error occured stopping Tor: " + e.getMessage()); - sendCallbackLogMessage(getString(R.string.something_bad_happened)); - } - clearNotifications(); - sendCallbackStatus(STATUS_OFF); - }).start(); + sendCallbackLogMessage(getString(R.string.status_disabled)); + } catch (Exception e) { + logNotice("An error occured stopping Tor: " + e.getMessage()); + sendCallbackLogMessage(getString(R.string.something_bad_happened)); + } + clearNotifications(); + sendCallbackStatus(STATUS_OFF); } private void stopTorOnError(String message) { @@ -377,11 +374,12 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb private void startSnowflakeClient() { //this is using the current, default Tor snowflake infrastructure - String front = getCdnFront(this,"snowflake"); + String target = getCdnFront(this, "snowflake-target"); + String front = getCdnFront(this,"snowflake-front"); String stunServer = getCdnFront(this, "snowflake-stun"); - IPtProxy.startSnowflake(stunServer, front, - null, null, true, false, true, 3); + IPtProxy.startSnowflake(stunServer, target, front, + null, true, false, true, 3); } @@ -408,41 +406,33 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb boolean unsafeLogging = false; IPtProxy.startSnowflakeProxy(capacity, broker, relay, stun, logFile, keepLocalAddresses, unsafeLogging); } + + private void stopSnowflakeProxy () { + + IPtProxy.stopSnowflakeProxy(); + } /** * if someone stops during startup, we may have to wait for the conn port to be setup, so we can properly shutdown tor */ - private void stopTorDaemon(boolean waitForConnection) throws Exception { + private void stopTor() throws Exception { - int tryCount = 0; - - while (tryCount++ < 3) { - if (conn != null) { - logNotice("Using control port to shutdown Tor"); - - try { - logNotice("sending HALT signal to Tor process"); - conn.shutdownTor(TorControlCommands.SIGNAL_SHUTDOWN); - - } catch (IOException e) { - Log.d(OrbotConstants.TAG, "error shutting down Tor via connection", e); - } + if (conn != null) { + logNotice("Using control port to shutdown Tor"); - if (shouldUnbindTorService) { - unbindService(torServiceConnection); - shouldUnbindTorService = false; - } + try { + logNotice("sending HALT signal to Tor process"); + conn.shutdownTor(TorControlCommands.SIGNAL_SHUTDOWN); - conn = null; - break; + } catch (IOException e) { + Log.d(OrbotConstants.TAG, "error shutting down Tor via connection", e); } - if (!waitForConnection) - break; - - try { - Thread.sleep(3000); - } catch (Exception e) { + if (shouldUnbindTorService) { + unbindService(torServiceConnection); + shouldUnbindTorService = false; } + + conn = null; } } @@ -728,7 +718,7 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb sendCallbackStatus(STATUS_STARTING); // make sure there are no stray daemons running - stopTorDaemon(false); + stopTor(); showToolbarNotification(getString(R.string.status_starting_up), NOTIFY_ID, R.drawable.ic_stat_tor); //sendCallbackLogMessage(getString(R.string.status_starting_up)); @@ -742,15 +732,18 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb } runTorShellCmd(); - try { - updateLegacyV2OnionNames(); - } catch (SecurityException se) { - logNotice("unable to upload legacy v2 onion names"); - } - try { - updateV3OnionNames(); - } catch (SecurityException se) { - logNotice("unable to upload v3 onion names"); + + if (Prefs.hostOnionServicesEnabled()) { + try { + updateLegacyV2OnionNames(); + } catch (SecurityException se) { + logNotice("unable to upload legacy v2 onion names"); + } + try { + updateV3OnionNames(); + } catch (SecurityException se) { + logNotice("unable to upload v3 onion names"); + } } } catch (Exception e) { logException("Unable to start Tor: " + e.toString(), e); @@ -1205,11 +1198,14 @@ public class OrbotService extends VpnService implements TorServiceConstants, Orb return null; } - ContentResolver contentResolver = getApplicationContext().getContentResolver(); - addV3OnionServicesToTorrc(extraLines, contentResolver); - addV3ClientAuthToTorrc(extraLines, contentResolver); - addV2HiddenServicesToTorrc(extraLines, contentResolver); - addV2ClientCookiesToTorrc(extraLines, contentResolver); + if (Prefs.hostOnionServicesEnabled()) { + ContentResolver contentResolver = getApplicationContext().getContentResolver(); + addV3OnionServicesToTorrc(extraLines, contentResolver); + addV3ClientAuthToTorrc(extraLines, contentResolver); + addV2HiddenServicesToTorrc(extraLines, contentResolver); + addV2ClientCookiesToTorrc(extraLines, contentResolver); + } + return extraLines; } diff --git a/orbotservice/src/main/java/org/torproject/android/service/util/Prefs.java b/orbotservice/src/main/java/org/torproject/android/service/util/Prefs.java index 1b2922a7..5c36793d 100644 --- a/orbotservice/src/main/java/org/torproject/android/service/util/Prefs.java +++ b/orbotservice/src/main/java/org/torproject/android/service/util/Prefs.java @@ -21,6 +21,8 @@ public class Prefs { private final static String PREF_USE_VPN = "pref_vpn"; private final static String PREF_EXIT_NODES = "pref_exit_nodes"; private final static String PREF_BE_A_SNOWFLAKE = "pref_be_a_snowflake"; + private final static String PREF_HOST_ONION_SERVICES = "pref_host_onionservices"; + private static SharedPreferences prefs; @@ -37,6 +39,14 @@ public class Prefs { prefs.edit().putString(key, value).apply(); } + public static boolean hostOnionServicesEnabled () { + return prefs.getBoolean(PREF_HOST_ONION_SERVICES, true); + } + + public static void putHostOnionServicesEnabled(boolean value) { + putBoolean(PREF_HOST_ONION_SERVICES, value); + } + public static boolean bridgesEnabled() { //if phone is in Farsi, enable bridges by default boolean bridgesEnabledDefault = Locale.getDefault().getLanguage().equals("fa");
participants (1)
-
n8fr8@torproject.org