[tor-commits] [orbot/master] Write config.json

n8fr8 at torproject.org n8fr8 at torproject.org
Thu Mar 2 04:10:21 UTC 2017


commit 130b89d8461f91ca331c2db50ed0c625e8cc6b2d
Author: arrase <arrase at gmail.com>
Date:   Sun Nov 27 17:15:15 2016 +0100

    Write config.json
---
 .../ui/hiddenservices/HiddenServicesActivity.java  | 24 +++----
 .../ui/hiddenservices/backup/BackupUtils.java      | 80 ++++++++++++++++++++--
 .../providers/HSContentProvider.java               | 25 ++++---
 3 files changed, 99 insertions(+), 30 deletions(-)

diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/HiddenServicesActivity.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/HiddenServicesActivity.java
index dc233bb..9de0296 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/HiddenServicesActivity.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/HiddenServicesActivity.java
@@ -26,16 +26,8 @@ import org.torproject.android.ui.hiddenservices.storage.PermissionManager;
 
 public class HiddenServicesActivity extends AppCompatActivity {
     public final int WRITE_EXTERNAL_STORAGE_FROM_ACTIONBAR = 1;
-    private ContentResolver mCR;
+    private ContentResolver mResolver;
     private OnionListAdapter mAdapter;
-    private Toolbar toolbar;
-    private String[] mProjection = new String[]{
-            HSContentProvider.HiddenService._ID,
-            HSContentProvider.HiddenService.NAME,
-            HSContentProvider.HiddenService.PORT,
-            HSContentProvider.HiddenService.DOMAIN,
-            HSContentProvider.HiddenService.CREATED_BY_USER
-    };
 
     private String mWhere = HSContentProvider.HiddenService.CREATED_BY_USER + "=1";
 
@@ -44,11 +36,11 @@ public class HiddenServicesActivity extends AppCompatActivity {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.layout_hs_list_view);
 
-        toolbar = (Toolbar) findViewById(R.id.toolbar);
+        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
         setSupportActionBar(toolbar);
         getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 
-        mCR = getContentResolver();
+        mResolver = getContentResolver();
 
         FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
         fab.setOnClickListener(new View.OnClickListener() {
@@ -61,11 +53,13 @@ public class HiddenServicesActivity extends AppCompatActivity {
 
         mAdapter = new OnionListAdapter(
                 this,
-                mCR.query(HSContentProvider.CONTENT_URI, mProjection, mWhere, null, null),
+                mResolver.query(
+                        HSContentProvider.CONTENT_URI, HSContentProvider.PROJECTION, mWhere, null, null
+                ),
                 0
         );
 
-        mCR.registerContentObserver(
+        mResolver.registerContentObserver(
                 HSContentProvider.CONTENT_URI, true, new HSObserver(new Handler())
         );
 
@@ -143,8 +137,8 @@ public class HiddenServicesActivity extends AppCompatActivity {
 
         @Override
         public void onChange(boolean selfChange) {
-            mAdapter.changeCursor(mCR.query(
-                    HSContentProvider.CONTENT_URI, mProjection, mWhere, null, null
+            mAdapter.changeCursor(mResolver.query(
+                    HSContentProvider.CONTENT_URI, HSContentProvider.PROJECTION, mWhere, null, null
             ));
         }
     }
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/backup/BackupUtils.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/backup/BackupUtils.java
index 70da302..07a9600 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/backup/BackupUtils.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/backup/BackupUtils.java
@@ -1,18 +1,26 @@
 package org.torproject.android.ui.hiddenservices.backup;
 
+import android.content.ContentResolver;
 import android.content.Context;
+import android.database.Cursor;
 import android.widget.Toast;
 
+import org.json.JSONException;
+import org.json.JSONObject;
 import org.torproject.android.service.R;
 import org.torproject.android.service.TorServiceConstants;
+import org.torproject.android.ui.hiddenservices.providers.HSContentProvider;
 import org.torproject.android.ui.hiddenservices.storage.ExternalStorage;
 
 import java.io.File;
+import java.io.FileWriter;
 import java.io.IOException;
 
 public class BackupUtils {
     private File mHSBasePath;
     private Context mContext;
+    private ContentResolver mResolver;
+    private final String configFileName = "config.json";
 
     public BackupUtils(Context context) {
         mContext = context;
@@ -20,26 +28,86 @@ public class BackupUtils {
                 mContext.getFilesDir().getAbsolutePath(),
                 TorServiceConstants.HIDDEN_SERVICES_DIR
         );
+
+        mResolver = mContext.getContentResolver();
     }
 
     public String createZipBackup(Integer port) {
 
+        String configFilePath = mHSBasePath + "/hs" + port + "/" + configFileName;
+        String hostnameFilePath = mHSBasePath + "/hs" + port + "/hostname";
+        String keyFilePath = mHSBasePath + "/hs" + port + "/private_key";
+
         File storage_path = ExternalStorage.getOrCreateBackupDir();
 
         if (storage_path == null)
             return null;
 
+        Cursor portData = mResolver.query(
+                HSContentProvider.CONTENT_URI,
+                HSContentProvider.PROJECTION,
+                HSContentProvider.HiddenService.PORT + "=" + port,
+                null,
+                null
+        );
+
+        JSONObject config = new JSONObject();
+        try {
+            if (portData.getCount() != 1)
+                return null;
+
+            portData.moveToNext();
+
+            config.put(
+                    HSContentProvider.HiddenService.NAME,
+                    portData.getString(portData.getColumnIndex(HSContentProvider.HiddenService.NAME))
+            );
+
+            config.put(
+                    HSContentProvider.HiddenService.PORT,
+                    portData.getInt(portData.getColumnIndex(HSContentProvider.HiddenService.PORT))
+            );
+
+            config.put(
+                    HSContentProvider.HiddenService.ONION_PORT,
+                    portData.getInt(portData.getColumnIndex(HSContentProvider.HiddenService.ONION_PORT))
+            );
+
+            config.put(
+                    HSContentProvider.HiddenService.DOMAIN,
+                    portData.getString(portData.getColumnIndex(HSContentProvider.HiddenService.DOMAIN))
+            );
+
+            config.put(
+                    HSContentProvider.HiddenService.CREATED_BY_USER,
+                    portData.getInt(portData.getColumnIndex(HSContentProvider.HiddenService.CREATED_BY_USER))
+            );
+        } catch (JSONException e) {
+            e.printStackTrace();
+            return null;
+        } catch (NullPointerException e) {
+            e.printStackTrace();
+            return null;
+        }
+
+        try {
+            FileWriter file = new FileWriter(configFilePath);
+            file.write(config.toString());
+            file.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+            return null;
+        }
+
+        portData.close();
+
         String zip_path = storage_path.getAbsolutePath() + "/hs" + port + ".zip";
-        String files[] = {
-                mHSBasePath + "/hs" + port + "/hostname",
-                mHSBasePath + "/hs" + port + "/private_key"
-        };
+        String files[] = {hostnameFilePath, keyFilePath, configFilePath};
 
         ZipIt zip = new ZipIt(files, zip_path);
 
-        if (!zip.zip()) {
+        if (!zip.zip())
             return null;
-        }
 
         return zip_path;
     }
diff --git a/app/src/main/java/org/torproject/android/ui/hiddenservices/providers/HSContentProvider.java b/app/src/main/java/org/torproject/android/ui/hiddenservices/providers/HSContentProvider.java
index 856c685..2270f5d 100644
--- a/app/src/main/java/org/torproject/android/ui/hiddenservices/providers/HSContentProvider.java
+++ b/app/src/main/java/org/torproject/android/ui/hiddenservices/providers/HSContentProvider.java
@@ -19,39 +19,47 @@ public class HSContentProvider extends ContentProvider {
     private static final String AUTH = "org.torproject.android.ui.hiddenservices.providers";
     public static final Uri CONTENT_URI =
             Uri.parse("content://" + AUTH + "/hs");
+
+    public static final String[] PROJECTION = new String[]{
+            HiddenService._ID,
+            HiddenService.NAME,
+            HiddenService.PORT,
+            HiddenService.DOMAIN,
+            HiddenService.ONION_PORT,
+            HiddenService.CREATED_BY_USER
+    };
+
     //UriMatcher
     private static final int ONIONS = 1;
     private static final int ONION_ID = 2;
 
     private static final UriMatcher uriMatcher;
 
-    //Inicializamos el UriMatcher
     static {
         uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
         uriMatcher.addURI(AUTH, "hs", ONIONS);
         uriMatcher.addURI(AUTH, "hs/#", ONION_ID);
     }
 
-    private HSDatabase mServerDB;
+    private HSDatabase mServervices;
     private Context mContext;
 
     @Override
     public boolean onCreate() {
         mContext = getContext();
-        mServerDB = new HSDatabase(mContext);
+        mServervices = new HSDatabase(mContext);
         return true;
     }
 
     @Nullable
     @Override
     public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
-        //Si es una consulta a un ID concreto construimos el WHERE
         String where = selection;
         if (uriMatcher.match(uri) == ONION_ID) {
             where = "_id=" + uri.getLastPathSegment();
         }
 
-        SQLiteDatabase db = mServerDB.getReadableDatabase();
+        SQLiteDatabase db = mServervices.getReadableDatabase();
 
         return db.query(HSDatabase.HS_DATA_TABLE_NAME, projection, where,
                 selectionArgs, null, null, sortOrder);
@@ -77,7 +85,7 @@ public class HSContentProvider extends ContentProvider {
     public Uri insert(@NonNull Uri uri, ContentValues values) {
         long regId;
 
-        SQLiteDatabase db = mServerDB.getWritableDatabase();
+        SQLiteDatabase db = mServervices.getWritableDatabase();
 
         regId = db.insert(HSDatabase.HS_DATA_TABLE_NAME, null, values);
 
@@ -89,13 +97,12 @@ public class HSContentProvider extends ContentProvider {
     @Override
     public int delete(@NonNull Uri uri, String selection, String[] selectionArgs) {
 
-        //Si es una consulta a un ID concreto construimos el WHERE
         String where = selection;
         if (uriMatcher.match(uri) == ONION_ID) {
             where = "_id=" + uri.getLastPathSegment();
         }
 
-        SQLiteDatabase db = mServerDB.getWritableDatabase();
+        SQLiteDatabase db = mServervices.getWritableDatabase();
 
         Integer rows = db.delete(HSDatabase.HS_DATA_TABLE_NAME, where, selectionArgs);
 
@@ -107,7 +114,7 @@ public class HSContentProvider extends ContentProvider {
 
     @Override
     public int update(@NonNull Uri uri, ContentValues values, String selection, String[] selectionArgs) {
-        SQLiteDatabase db = mServerDB.getWritableDatabase();
+        SQLiteDatabase db = mServervices.getWritableDatabase();
 
         String where = selection;
         if (uriMatcher.match(uri) == ONION_ID) {





More information about the tor-commits mailing list