diff options
Diffstat (limited to 'src/de/blinkt/openvpn/OpenVPNClient.java')
| -rw-r--r-- | src/de/blinkt/openvpn/OpenVPNClient.java | 383 | 
1 files changed, 0 insertions, 383 deletions
diff --git a/src/de/blinkt/openvpn/OpenVPNClient.java b/src/de/blinkt/openvpn/OpenVPNClient.java deleted file mode 100644 index db6dd95a..00000000 --- a/src/de/blinkt/openvpn/OpenVPNClient.java +++ /dev/null @@ -1,383 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - *      http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package de.blinkt.openvpn; - -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.cert.X509Certificate; -import java.util.HashMap; - -import javax.net.ssl.TrustManagerFactory; -import javax.net.ssl.X509TrustManager; - -import android.app.Activity; -import android.content.Intent; -import android.content.SharedPreferences; -import android.net.VpnService; -import android.os.Bundle; -import android.os.Handler; -import android.os.Handler.Callback; -import android.os.Message; -import android.security.KeyChain; -import android.security.KeyChainAliasCallback; -import android.util.Log; -import android.view.View; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemSelectedListener; -import android.widget.CheckBox; -import android.widget.CompoundButton; -import android.widget.CompoundButton.OnCheckedChangeListener; -import android.widget.EditText; -import android.widget.Spinner; -import android.widget.TextView; -import android.widget.ToggleButton; - -import com.lamerman.FileDialog; - -import de.blinkt.openvpn.R.id; - -public class OpenVPNClient extends Activity implements View.OnClickListener, OnItemSelectedListener, Callback, OnCheckedChangeListener { -	private static final String TAG = "OpenVpnClient"; - - -	private static final int START_OPENVPN = 0; -	private static final int CHOOSE_FILE_OFFSET = 1000; -	private static final int UPDATE_ALIAS = 20; - -	private static final String PREFS_NAME = "OVPN_SERVER"; - - - -	private TextView mServerAddress; -	private TextView mServerPort; -	private FileSelectLayout mClientCert; -	private FileSelectLayout mCaCert; -	private FileSelectLayout mClientKey; -	private TextView mAliasName; -	private CheckBox mUseLzo; -	private ToggleButton mTcpUdp; -	private Spinner mType; -	private String certalias; -	private FileSelectLayout mpkcs12; -	private TextView mPKCS12Password; - -	private Handler mHandler; - - -	private CheckBox mUseTlsAuth; - - -	private CheckBox mShowAdvanced; - - -	private FileSelectLayout mTlsFile; - -	private HashMap<Integer, FileSelectLayout> fileselects = new HashMap<Integer, FileSelectLayout>(); - - -	private Spinner mTLSDirection; - - -	private EditText mUserName; - - -	private EditText mPassword; - -	@Override -	protected void onStop(){ -		super.onStop(); -		savePreferences(); -	} - - -	 -	private void addFileSelectLayout (FileSelectLayout fsl) { -		int i = fileselects.size() + CHOOSE_FILE_OFFSET; -		fileselects.put(i, fsl); -		fsl.setActivity(this,i); -	} - - - - - -	@Override -	public void onCreate(Bundle savedInstanceState) { -		super.onCreate(savedInstanceState); -		setContentView(R.layout.basic_settings); - -		// Forces early JNI Load -		OpenVPN.foo(); - -		mServerAddress = (TextView) findViewById(R.id.address); -		mServerPort = (TextView) findViewById(R.id.port); -		mClientCert = (FileSelectLayout) findViewById(R.id.certselect); -		mClientKey = (FileSelectLayout) findViewById(R.id.keyselect); -		mCaCert = (FileSelectLayout) findViewById(R.id.caselect); -		mpkcs12 = (FileSelectLayout) findViewById(R.id.pkcs12select); -		mUseLzo = (CheckBox) findViewById(R.id.lzo); -		mTcpUdp = (ToggleButton) findViewById(id.tcpudp); -		mType = (Spinner) findViewById(R.id.type); -		mPKCS12Password = (TextView) findViewById(R.id.pkcs12password); -		mAliasName = (TextView) findViewById(R.id.aliasname); -		mUseTlsAuth = (CheckBox) findViewById(R.id.useTLSAuth); -		mTLSDirection = (Spinner) findViewById(R.id.tls_direction); - -		mShowAdvanced = (CheckBox) findViewById(R.id.show_advanced); -		mTlsFile = (FileSelectLayout) findViewById(R.id.tlsAuth);		 -		mUserName = (EditText) findViewById(R.id.auth_username); -		mPassword = (EditText) findViewById(R.id.auth_password); -		 - -		addFileSelectLayout(mCaCert); -		addFileSelectLayout(mClientCert); -		addFileSelectLayout(mClientKey); -		addFileSelectLayout(mTlsFile); -		addFileSelectLayout(mpkcs12); - -		loadPreferences(); - -		mType.setOnItemSelectedListener(this); - -		mShowAdvanced.setOnCheckedChangeListener(this); -		mUseTlsAuth.setOnCheckedChangeListener(this); - - -		findViewById(R.id.select_keystore_button).setOnClickListener(this); -		findViewById(R.id.about).setOnClickListener(this); -		findViewById(R.id.connect).setOnClickListener(this);		 - -		if (mHandler == null) { -			mHandler = new Handler(this); -		} -	} - - -	@Override -	public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { -		if (parent == mType) { -			changeType(position); -		} -	} - - - -	private void changeType(int type){ -		// hide everything -		findViewById(R.id.pkcs12).setVisibility(View.GONE); -		findViewById(R.id.certs).setVisibility(View.GONE); -		findViewById(R.id.statickeys).setVisibility(View.GONE); -		findViewById(R.id.keystore).setVisibility(View.GONE); - -		switch(type) { -		case VpnProfile.TYPE_CERTIFICATES: -			findViewById(R.id.certs).setVisibility(View.VISIBLE); -			break; -		case VpnProfile.TYPE_PKCS12: -			findViewById(R.id.pkcs12).setVisibility(View.VISIBLE); -			break; -		case VpnProfile.TYPE_STATICKEYS: -			findViewById(R.id.statickeys).setVisibility(View.VISIBLE); -			break; -		case VpnProfile.TYPE_KEYSTORE: -			findViewById(R.id.keystore).setVisibility(View.VISIBLE); -			break; -			 -		case VpnProfile.TYPE_USERPASS: -			findViewById(R.id.userpassword).setVisibility(View.VISIBLE); -		} - - -	} - -	private void loadPreferences() { -		SharedPreferences settings = getSharedPreferences(PREFS_NAME,Activity.MODE_PRIVATE); - -		mClientCert.setData(settings.getString("clientcert", "")); -		mClientKey.setData(settings.getString("clientkey", "")); -		mCaCert.setData(settings.getString("ca", "")); - -		mUseLzo.setChecked(settings.getBoolean("useLzo", true)); -		mServerPort.setText(settings.getString("port", "1194")); -		mServerAddress.setText(settings.getString("server", "openvpn.blinkt.de")); -		mTcpUdp.setChecked(settings.getBoolean("udp", true)); -		mType.setSelection(settings.getInt("type", VpnProfile.TYPE_PKCS12)); -		mpkcs12.setData(settings.getString("pkcs12file", "")); -		mPKCS12Password.setText(settings.getString("pkcs12password", "")); -		certalias = settings.getString("alias", null); -		mUseTlsAuth.setChecked(settings.getBoolean("tlsauth", false)); -		onCheckedChanged(mUseTlsAuth,mUseTlsAuth.isChecked()); -		 -		mTlsFile.setData(settings.getString("tlsfile","")); -		mTLSDirection.setSelection(settings.getInt("tls-direction", 2)); // Unspecified -		setAlias(); - -	} - -	private void savePreferences() { -		// We need an Editor object to make preference changes. -		// All objects are from android.context.Context -		SharedPreferences settings = getSharedPreferences(PREFS_NAME,Activity.MODE_PRIVATE); -		SharedPreferences.Editor editor = settings.edit(); - - -		editor.putString("ca" , mCaCert.getData()); -		editor.putString("clientcert", mClientCert.getData()); -		editor.putString("clientkey", mClientKey.getData()); - -		editor.putBoolean("useLzo",mUseLzo.isChecked()); -		editor.putString("port",  mServerPort.getText().toString()); -		editor.putString("server", mServerAddress.getText().toString()); -		editor.putBoolean("udp", mTcpUdp.isChecked()); - -		editor.putInt("type",mType.getSelectedItemPosition()); -		editor.putString("pkcs12file", mpkcs12.getData()); -		editor.putString("pkcs12password", mPKCS12Password.getText().toString()); -		editor.putString("alias", certalias); -		editor.putBoolean("tlsauth", mUseTlsAuth.isChecked()); -		editor.putString("tlsfile", mTlsFile.getData()); -		editor.putInt("tls-direction", mTLSDirection.getSelectedItemPosition()); -		// Commit the edits! -		editor.commit(); -	} - - -	private void setAlias() { -		if(certalias == null) { -			mAliasName.setText(R.string.client_no_certificate); -		} else { -			mAliasName.setText(certalias); -		} -	} - -	public void showCertDialog () { -		KeyChain.choosePrivateKeyAlias(this, -				new KeyChainAliasCallback() { - -			public void alias(String alias) { -				// Credential alias selected.  Remember the alias selection for future use. -				certalias=alias; -				mHandler.sendEmptyMessage(UPDATE_ALIAS); -			} - - -		}, -		new String[] {"RSA", "DSA"}, // List of acceptable key types. null for any -		null,                        // issuer, null for any -		"internal.example.com",      // host name of server requesting the cert, null if unavailable -		443,                         // port of server requesting the cert, -1 if unavailable -		null);                       // alias to preselect, null if unavailable -	} - -	 - -	public void testGetallCerts() throws NoSuchAlgorithmException, KeyStoreException { -		TrustManagerFactory tmf = TrustManagerFactory -				.getInstance(TrustManagerFactory.getDefaultAlgorithm()); - -		tmf.init((KeyStore) null); -		X509TrustManager xtm = (X509TrustManager) tmf.getTrustManagers()[0]; - -		X509Certificate[] foo = xtm.getAcceptedIssuers(); -		for (X509Certificate cert : xtm.getAcceptedIssuers()) { -			String certStr = "S:" + cert.getSubjectDN().getName() + "\nI:" -					+ cert.getIssuerDN().getName(); -			Log.d(TAG, certStr); -		} -		System.out.println(foo); -	} - -	@Override -	public void onClick(View v) { -		if(v == findViewById(R.id.connect)) { -			Intent intent = VpnService.prepare(this); -			if (intent != null) { -				startActivityForResult(intent, 0); -			} else { -				onActivityResult(START_OPENVPN, RESULT_OK, null); -			} -		} else if (v == findViewById(R.id.about)) { -			//Intent intent = new Intent(getBaseContext(),AboutActivity.class); -			Intent intent = new Intent(getBaseContext(),VPNPreferences.class); -			intent.putExtra("foo","der bar war hier!"); -			startActivity(intent); -		} else if (v == findViewById(R.id.select_keystore_button)) { -			showCertDialog(); -		} -	} - - - -	/* (non-Javadoc) -	 * @see android.app.Activity#onActivityResult(int, int, android.content.Intent) -	 */ -	@Override -	protected void onActivityResult(int request, int result, Intent data) { -		if (request== START_OPENVPN) { -			if (result == RESULT_OK) { -				// It always crashes and never saves ;) -				savePreferences(); -				new startOpenVpnThread().start(); -			} - -		} else if (request >= CHOOSE_FILE_OFFSET) { -			String filepath = data.getStringExtra(FileDialog.RESULT_PATH); -			FileSelectLayout fsl = fileselects.get(request); -			fsl.setData(filepath); -		} -		savePreferences(); -	} - - - -	private class startOpenVpnThread extends Thread { - -		@Override -		public void run() { -		//	startOpenVpn(); -		} - -	} - -	@Override -	public void onNothingSelected(AdapterView<?> parent) { -	} - - -	@Override -	public boolean handleMessage(Message msg) { -		setAlias(); -		return true; -	} - - -	@Override -	public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { -		int visibility; -		if(isChecked)  -			visibility =View.VISIBLE; -		else  -			visibility =View.GONE; - -		if(buttonView==mShowAdvanced) { -			findViewById(R.id.advanced_options).setVisibility(visibility); -		} else if (buttonView == mUseTlsAuth) { -			findViewById(R.id.tlsauth_options).setVisibility(visibility); -		} -	} -}  | 
