From a447f4419f328d0d20ee53a713369a03318f0a9a Mon Sep 17 00:00:00 2001 From: Balint Kovacs Date: Fri, 15 Apr 2011 11:50:00 +0200 Subject: [PATCH] Support for local settings Signed-off-by: Balint Kovacs --- bin/SSLDroid.apk | Bin 23216 -> 26603 bytes bin/classes.dex | Bin 13300 -> 16736 bytes bin/resources.ap_ | Bin 15022 -> 16866 bytes res/layout/main.xml | 27 ++++++-- res/values/strings.xml | 8 +++ src/hu/blint/ssldroid/SSLDroid.java | 50 ++++++++++++-- src/hu/blint/ssldroid/SSLDroidGui.java | 91 ++++++++++++++++++++++++- 7 files changed, 162 insertions(+), 14 deletions(-) diff --git a/bin/SSLDroid.apk b/bin/SSLDroid.apk index 7432a98b80ce592e23696eaab7b4548995af38c2..c691a501be061556de36ea571584b8b6e2f92700 100644 GIT binary patch delta 11744 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 delta 8595 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 literal 13300 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 diff --git a/bin/resources.ap_ b/bin/resources.ap_ index 40337c3fb785e925aba326d6b6b990fe20aa57fe..728932ec56110613e7c08a9fe35f0ec185e49c17 100644 GIT binary patch delta 2717 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 I#{y&$0LXb&Pyhe` diff --git a/res/layout/main.xml b/res/layout/main.xml index 8b8d97a..de86a89 100644 --- a/res/layout/main.xml +++ b/res/layout/main.xml @@ -1,12 +1,29 @@ - + + + + + + + + + + + + + + + - - - \ No newline at end of file + android:layout_height="wrap_content" android:gravity="center" android:textSize="20sp" android:padding="20dp" android:text="@string/service_control" android:id="@+id/servicecontrollabel"/> + + + + + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index 1208a6e..15e5ca6 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2,4 +2,12 @@ Hello World, SSLDroidGui! SSLDroid + Service Control + Local port to listen on + Remote host to connect to + Remote port to connect to + PKCS12 file to use for auth + + Apply + PKCS12 password diff --git a/src/hu/blint/ssldroid/SSLDroid.java b/src/hu/blint/ssldroid/SSLDroid.java index 5ae8bb2..8c92d81 100644 --- a/src/hu/blint/ssldroid/SSLDroid.java +++ b/src/hu/blint/ssldroid/SSLDroid.java @@ -3,22 +3,60 @@ package hu.blint.ssldroid; import hu.blint.ssldroid.TcpProxy; import android.app.*; import android.content.Intent; +import android.content.SharedPreferences; import android.os.IBinder; import android.util.Log; +import android.widget.Toast; public class SSLDroid extends Service { final String TAG = "SSLDroid"; + public static final String PREFS_NAME = "MyPrefsFile"; TcpProxy tp; @Override public void onCreate() { - int listenPort = 9999; // port to listen on - int targetPort = 443; // port to connect to - String targetHost = "sogo.balabit.com"; // remote host - String keyFile = "/mnt/sdcard/blint-imaps.p12"; - String keyPass = "titkos"; - + + // Restore preferences + SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); + int settingLocalport = settings.getInt("0.localPort", 0); + String settingRemotehost = settings.getString("0.remoteHost", ""); + int settingRemoteport = settings.getInt("0.remotePort", 0); + String settingPkcsfile = settings.getString("0.pkcsFile", ""); + String settingPkcspass = settings.getString("0.pkcsPass", ""); + + int listenPort; + int targetPort; + String targetHost; + String keyFile; + String keyPass; + + if (settingLocalport!=0) + listenPort = settingLocalport; + else { + Toast.makeText(this, "Please set up local port first", Toast.LENGTH_LONG).show(); + return; + } + if (settingRemotehost!="") + targetHost = settingRemotehost; + else { + Toast.makeText(this, "Please set up remote host first", Toast.LENGTH_LONG).show(); + return; + } + if (settingRemoteport!=0) + targetPort = settingRemoteport; + else { + Toast.makeText(this, "Please set up remote port first", Toast.LENGTH_LONG).show(); + return; + } + if (settingPkcsfile!="") + keyFile = settingPkcsfile; + else { + Toast.makeText(this, "Please set up PKCS12 file first", Toast.LENGTH_LONG).show(); + return; + } + keyPass = settingPkcspass; + //Toast.makeText(this, "SSLDroid Service Started", Toast.LENGTH_LONG).show(); createNotification(0, "SSLDroid is running", "SSLDroid service is running"); Log.d(TAG, "SSLDroid Service Started"); diff --git a/src/hu/blint/ssldroid/SSLDroidGui.java b/src/hu/blint/ssldroid/SSLDroidGui.java index e520eb2..a561749 100644 --- a/src/hu/blint/ssldroid/SSLDroidGui.java +++ b/src/hu/blint/ssldroid/SSLDroidGui.java @@ -2,16 +2,66 @@ package hu.blint.ssldroid; import android.app.Activity; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; +import android.widget.TextView; +import android.widget.Toast; public class SSLDroidGui extends Activity implements OnClickListener { private static final String TAG = "SSLDroidGui"; - Button buttonStart, buttonStop, showLog; + public static final String PREFS_NAME = "MyPrefsFile"; + Button buttonStart, buttonStop, buttonApply; + public boolean saveSettings(){ + SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); + SharedPreferences.Editor editor = settings.edit(); + + TextView localport = (TextView) findViewById(R.id.localport); + TextView remotehost = (TextView) findViewById(R.id.remotehost); + TextView remoteport = (TextView) findViewById(R.id.remoteport); + TextView pkcsfile = (TextView) findViewById(R.id.pkcsfile); + TextView pkcspass = (TextView) findViewById(R.id.pkcspass); + + String settingLocalport = localport.getText().toString(); + String settingRemotehost = remotehost.getText().toString(); + String settingRemoteport = remoteport.getText().toString(); + String settingPkcsfile = pkcsfile.getText().toString(); + String settingPkcspass = pkcspass.getText().toString(); + + if (settingLocalport.length() == 0) { + Toast.makeText(this, "Required local port parameter not setup, skipping save", 5).show(); + return false; + } + if (settingRemotehost.length() == 0){ + Toast.makeText(this, "Required remote host parameter not setup, skipping save", 5).show(); + return false; + } + if (settingRemoteport.length() == 0){ + Toast.makeText(this, "Required remote port parameter not setup, skipping save", 5).show(); + return false; + } + if (settingPkcsfile.length() == 0){ + Toast.makeText(this, "Required PKCS12 file parameter not setup, skipping save", 5).show(); + return false; + } + editor.putInt("0.localPort", Integer.parseInt(settingLocalport)); + //Log.d(TAG, "settingSave: '"+ settingLocalport+"'"); + editor.putString("0.remoteHost", settingRemotehost); + //Log.d(TAG, "settingSave: '"+ settingRemotehost+"'"); + editor.putInt("0.remotePort", Integer.parseInt(settingRemoteport)); + //Log.d(TAG, "settingSave: '"+ settingRemoteport+"'"); + editor.putString("0.pkcsFile", settingPkcsfile); + //Log.d(TAG, "settingSave: '"+ settingPkcsfile+"'"); + editor.putString("0.pkcsPass", settingPkcspass); + //Log.d(TAG, "settingSave: '"+ settingPkcspass+"'"); + editor.commit(); + return true; + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -19,21 +69,56 @@ public class SSLDroidGui extends Activity implements OnClickListener { buttonStart = (Button) findViewById(R.id.buttonStart); buttonStop = (Button) findViewById(R.id.buttonStop); + buttonApply = (Button) findViewById(R.id.buttonApply); buttonStart.setOnClickListener(this); buttonStop.setOnClickListener(this); + buttonApply.setOnClickListener(this); + + TextView localport = (TextView) findViewById(R.id.localport); + TextView remotehost = (TextView) findViewById(R.id.remotehost); + TextView remoteport = (TextView) findViewById(R.id.remoteport); + TextView pkcsfile = (TextView) findViewById(R.id.pkcsfile); + TextView pkcspass = (TextView) findViewById(R.id.pkcspass); + + // Restore preferences + SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); + int settingLocalport = settings.getInt("0.localPort", 0); + String settingRemotehost = settings.getString("0.remoteHost", ""); + int settingRemoteport = settings.getInt("0.remotePort", 0); + String settingPkcsfile = settings.getString("0.pkcsFile", ""); + String settingPkcspass = settings.getString("0.pkcsPass", ""); + + if (settingLocalport!=0) + localport.setText(String.valueOf(settingLocalport)); + if (settingRemotehost!="") + remotehost.setText(settingRemotehost); + if (settingRemoteport!=0) + remoteport.setText(String.valueOf(settingRemoteport)); + if (settingPkcsfile!="") + pkcsfile.setText(settingPkcsfile); + if (settingPkcspass!="") + pkcspass.setText(settingPkcspass); } public void onClick(View src) { switch (src.getId()) { case R.id.buttonStart: - Log.d(TAG, "onClick: starting service"); + Log.d(TAG, "Starting service"); startService(new Intent(this, SSLDroid.class)); break; case R.id.buttonStop: - Log.d(TAG, "onClick: stopping service"); + Log.d(TAG, "Stopping service"); stopService(new Intent(this, SSLDroid.class)); break; + case R.id.buttonApply: + Log.d(TAG, "Saving settings..."); + if (saveSettings()){ + Log.d(TAG, "Restarting service after setting save"); + stopService(new Intent(this, SSLDroid.class)); + startService(new Intent(this, SSLDroid.class)); + } + break; } } } \ No newline at end of file