[tor-commits] [orbot/master] Issue #370: Added testing code to directly use meek_lite as proxy to talk to MOAT's meek endpoint. Nonfunctional.

n8fr8 at torproject.org n8fr8 at torproject.org
Wed Dec 23 16:36:11 UTC 2020


commit d9861e90b793af71a1ec9b6938650961b3e3b6db
Author: Benjamin Erhart <berhart at netzarchitekten.com>
Date:   Tue Aug 25 16:48:47 2020 +0200

    Issue #370: Added testing code to directly use meek_lite as proxy to talk to MOAT's meek endpoint. Nonfunctional.
---
 app/build.gradle                                   |  3 ++
 .../android/ui/onboarding/MoatActivity.java        | 53 +++++++++++++++++++++-
 .../android/ui/onboarding/ProxiedHurlStack.java    | 32 +++++++++++++
 3 files changed, 87 insertions(+), 1 deletion(-)

diff --git a/app/build.gradle b/app/build.gradle
index 52ffaa64..55d331c1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -128,6 +128,9 @@ dependencies {
     androidTestImplementation "tools.fastlane:screengrab:1.2.0"
     implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
     implementation 'com.android.volley:volley:1.1.1'
+    implementation 'info.pluggabletransports.aptds:apt-dispatch-library:1.0.9'
+    implementation 'info.pluggabletransports.aptds:apt-meek-obfs4-legacy:1.0.9'
+    implementation 'info.pluggabletransports.aptds:goptbundle:1.0.0'
 }
 
 // Map for the version code that gives each ABI a value.
diff --git a/app/src/main/java/org/torproject/android/ui/onboarding/MoatActivity.java b/app/src/main/java/org/torproject/android/ui/onboarding/MoatActivity.java
index 588c6952..44c86c2c 100644
--- a/app/src/main/java/org/torproject/android/ui/onboarding/MoatActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/MoatActivity.java
@@ -9,6 +9,7 @@ import android.content.Intent;
 import android.content.IntentFilter;
 import android.graphics.BitmapFactory;
 import android.os.Bundle;
+import android.os.Handler;
 import android.text.TextUtils;
 import android.util.Base64;
 import android.util.Log;
@@ -46,6 +47,15 @@ import org.torproject.android.service.TorServiceConstants;
 import org.torproject.android.service.util.Prefs;
 import org.torproject.android.ui.dialog.MoatErrorDialogFragment;
 
+import java.util.ArrayList;
+import java.util.Properties;
+
+import goptbundle.Goptbundle;
+import info.pluggabletransports.dispatch.DispatchConstants;
+import info.pluggabletransports.dispatch.Dispatcher;
+import info.pluggabletransports.dispatch.Transport;
+import info.pluggabletransports.dispatch.transports.legacy.MeekTransport;
+
 /**
  Implements the MOAT protocol: Fetches OBFS4 bridges via Meek Azure.
 
@@ -170,7 +180,48 @@ public class MoatActivity extends AppCompatActivity implements View.OnClickListe
     protected void onResume() {
         super.onResume();
 
-        sendIntentToService(TorServiceConstants.ACTION_STATUS);
+        new MeekTransport().register();
+
+        Properties options = new Properties();
+        options.put(MeekTransport.OPTION_URL, "https://onion.azureedge.net/");
+        options.put(MeekTransport.OPTION_FRONT, "ajax.aspnetcdn.com");
+
+        Transport transport = Dispatcher.get().getTransport(this, DispatchConstants.PT_TRANSPORTS_MEEK, options);
+
+        if (transport != null) {
+            new Thread(() -> {
+                Goptbundle.setenv(DispatchConstants.TOR_PT_LOG_LEVEL, "DEBUG");
+                Goptbundle.setenv(DispatchConstants.TOR_PT_CLIENT_TRANSPORTS, DispatchConstants.PT_TRANSPORTS_MEEK);
+                Goptbundle.setenv(DispatchConstants.TOR_PT_MANAGED_TRANSPORT_VER, "1");
+                Goptbundle.setenv(DispatchConstants.TOR_PT_EXIT_ON_STDIN_CLOSE, "0");
+                Goptbundle.load(getDir("pt-state", Context.MODE_PRIVATE).getAbsolutePath());
+            }).start();
+
+            ArrayList<String> args = new ArrayList<>();
+
+            for (Object key : options.keySet()) {
+                String k = (String) key;
+
+                args.add(String.format("%s=%s", k, options.getProperty(k)));
+            }
+
+            StringBuilder sb = new StringBuilder();
+
+            for (String arg : args) {
+                sb.append(arg).append(";");
+            }
+
+            ProxiedHurlStack phs = new ProxiedHurlStack("127.0.0.1", 47352,
+                    sb.toString(), "\0");
+
+            mQueue = Volley.newRequestQueue(MoatActivity.this, phs);
+
+            if (mCaptcha == null) {
+                new Handler().postDelayed(this::fetchCaptcha, 1000);
+            }
+        }
+
+//        sendIntentToService(TorServiceConstants.ACTION_STATUS);
     }
 
     @Override
diff --git a/app/src/main/java/org/torproject/android/ui/onboarding/ProxiedHurlStack.java b/app/src/main/java/org/torproject/android/ui/onboarding/ProxiedHurlStack.java
index e3bdb86a..06352b58 100644
--- a/app/src/main/java/org/torproject/android/ui/onboarding/ProxiedHurlStack.java
+++ b/app/src/main/java/org/torproject/android/ui/onboarding/ProxiedHurlStack.java
@@ -2,11 +2,15 @@
 /* See LICENSE for licensing information */
 package org.torproject.android.ui.onboarding;
 
+import android.util.Log;
+
 import com.android.volley.toolbox.HurlStack;
 
 import java.io.IOException;
+import java.net.Authenticator;
 import java.net.HttpURLConnection;
 import java.net.InetSocketAddress;
+import java.net.PasswordAuthentication;
 import java.net.Proxy;
 import java.net.URL;
 
@@ -15,12 +19,25 @@ public class ProxiedHurlStack extends HurlStack {
 
     private final String mHost;
     private final int mPort;
+    private final String mUsername;
+    private final String mPassword;
 
     public ProxiedHurlStack(String host, int port) {
         super();
 
         mHost = host;
         mPort = port;
+        mUsername = null;
+        mPassword = null;
+    }
+
+    public ProxiedHurlStack(String host, int port, String username, String password) {
+        super();
+
+        mHost = host;
+        mPort = port;
+        mUsername = username;
+        mPassword = password;
     }
 
     @Override
@@ -28,6 +45,21 @@ public class ProxiedHurlStack extends HurlStack {
         Proxy proxy = new Proxy(Proxy.Type.SOCKS,
                 InetSocketAddress.createUnresolved(mHost, mPort));
 
+        if (mUsername != null && mPassword != null) {
+            Log.d(getClass().getSimpleName(), String.format("mHost=%s, mPort=%d, mUsername=%s, mPassword=%s", mHost, mPort, mUsername, mPassword));
+
+            Authenticator authenticator = new Authenticator() {
+                @Override
+                protected PasswordAuthentication getPasswordAuthentication() {
+                    Log.d(getClass().getSimpleName(), "getPasswordAuthentication!");
+
+                    return new PasswordAuthentication(mUsername, mPassword.toCharArray());
+                }
+            };
+
+            Authenticator.setDefault(authenticator);
+        }
+
         return (HttpURLConnection) url.openConnection(proxy);
     }
 }





More information about the tor-commits mailing list