summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorParménides GV <parmegv@sdf.org>2013-04-22 18:07:07 +0200
committerParménides GV <parmegv@sdf.org>2013-04-29 17:09:12 +0200
commit75728462433b19567710f54a9d4767681b10be95 (patch)
treeca6208f300c740a249a8b74fe343154be1bc96c9
parent5c05094401d6ed3c69ab8f64e47278973bc87425 (diff)
Coded dialog (now there is a button in the Dashboard), time to test.
I need to implement bypass for dev.bitmask.net, because bitmask.net is down.
-rw-r--r--res/layout/log_in_dialog.xml32
-rw-r--r--res/menu/client_dashboard.xml1
-rwxr-xr-xres/values/strings.xml4
-rw-r--r--src/se/leap/leapclient/ConfigHelper.java7
-rw-r--r--src/se/leap/leapclient/ConfigurationWizard.java4
-rw-r--r--src/se/leap/leapclient/Dashboard.java64
-rw-r--r--src/se/leap/leapclient/LogInDialog.java73
-rw-r--r--src/se/leap/leapclient/ProviderAPI.java8
8 files changed, 184 insertions, 9 deletions
diff --git a/res/layout/log_in_dialog.xml b/res/layout/log_in_dialog.xml
new file mode 100644
index 00000000..6f28118d
--- /dev/null
+++ b/res/layout/log_in_dialog.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ tools:context=".LogInDialog" >
+
+ <EditText
+ android:id="@+id/username_entered"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="4dp"
+ android:layout_marginLeft="4dp"
+ android:layout_marginRight="4dp"
+ android:layout_marginTop="16dp"
+ android:ems="10"
+ android:hint="@string/username_ask"
+ android:inputType="textUri" >
+
+ <requestFocus />
+ </EditText>
+
+ <EditText
+ android:id="@+id/password_entered"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:ems="10"
+ android:hint="@string/password_ask"
+ android:inputType="textPassword" />
+
+</LinearLayout> \ No newline at end of file
diff --git a/res/menu/client_dashboard.xml b/res/menu/client_dashboard.xml
index 87e7ae62..fffd4e23 100644
--- a/res/menu/client_dashboard.xml
+++ b/res/menu/client_dashboard.xml
@@ -7,5 +7,6 @@
android:title="@string/menu_settings"/>
<item android:id="@+id/about_leap" android:title="@string/about" android:orderInCategory="110" />
<item android:id="@+id/legacy_interface" android:title="ICS OpenVPN Interface" android:orderInCategory="500" />
+ <item android:id="@+id/login_button" android:title="@string/login_button" android:visible="true"></item>
</menu> \ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2deb23fa..6e84bed2 100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -265,5 +265,9 @@
<string name="introduce_new_provider">Introduce new provider</string>
<string name="save">Save</string>
<string name="new_provider_uri">New provider\'s main URL</string>
+ <string name="username_ask">Introduce your username</string>
+ <string name="password_ask">Enter your password</string>
+ <string name="log_in_button">Log in</string>
+ <string name="login_button">Log In</string>
</resources> \ No newline at end of file
diff --git a/src/se/leap/leapclient/ConfigHelper.java b/src/se/leap/leapclient/ConfigHelper.java
index 8f38cbeb..de14eed6 100644
--- a/src/se/leap/leapclient/ConfigHelper.java
+++ b/src/se/leap/leapclient/ConfigHelper.java
@@ -30,8 +30,11 @@ public class ConfigHelper {
final static String downloadJsonFilesBundleExtra = "downloadJSONFiles";
final static String downloadNewProviderDotJSON = "downloadNewProviderDotJSON";
- public static final String srpRegister = "srpRegister";
+ final public static String logInDialog = "logInDialog";
+ final public static String newProviderDialog = "logInDialog";
+ final public static String srpRegister = "srpRegister";
final public static String srpAuth = "srpAuth";
+ public static String logIn = "logIn";
public static String logOut = "logOut";
final public static String resultKey = "result";
final static String provider_key = "provider";
@@ -40,7 +43,7 @@ public class ConfigHelper {
public static final String PREFERENCES_KEY = "LEAPPreferences";
public static final String user_directory = "leap_android";
public static String provider_main_url = "provider_main_url";
- final public static String srp_server_url_key = "srp_server_url";
+ final public static String api_url_key = "srp_server_url";
final public static String username_key = "username";
final public static String password_key = "password";
final public static String eip_service_api_path = "/config/eip-service.json";
diff --git a/src/se/leap/leapclient/ConfigurationWizard.java b/src/se/leap/leapclient/ConfigurationWizard.java
index 0d445227..417752e2 100644
--- a/src/se/leap/leapclient/ConfigurationWizard.java
+++ b/src/se/leap/leapclient/ConfigurationWizard.java
@@ -172,14 +172,14 @@ public class ConfigurationWizard extends Activity
public void addNewProvider(View view) {
FragmentTransaction fragment_transaction = getFragmentManager().beginTransaction();
- Fragment previous_new_provider_dialog = getFragmentManager().findFragmentByTag("newProviderDialog");
+ Fragment previous_new_provider_dialog = getFragmentManager().findFragmentByTag(ConfigHelper.newProviderDialog);
if (previous_new_provider_dialog != null) {
fragment_transaction.remove(previous_new_provider_dialog);
}
fragment_transaction.addToBackStack(null);
DialogFragment newFragment = NewProviderDialog.newInstance();
- newFragment.show(fragment_transaction, "newProviderDialog");
+ newFragment.show(fragment_transaction, ConfigHelper.newProviderDialog);
}
@Override
diff --git a/src/se/leap/leapclient/Dashboard.java b/src/se/leap/leapclient/Dashboard.java
index dce99b1e..815df18f 100644
--- a/src/se/leap/leapclient/Dashboard.java
+++ b/src/se/leap/leapclient/Dashboard.java
@@ -1,13 +1,20 @@
package se.leap.leapclient;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import se.leap.leapclient.ProviderAPIResultReceiver.Receiver;
import se.leap.openvpn.AboutFragment;
import se.leap.openvpn.MainActivity;
import android.app.Activity;
+import android.app.DialogFragment;
import android.app.Fragment;
+import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
+import android.os.Handler;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -16,7 +23,7 @@ import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.TextView;
-public class Dashboard extends Activity {
+public class Dashboard extends Activity implements LogInDialog.LogInDialogInterface, Receiver {
protected static final int CONFIGURE_LEAP = 0;
@@ -26,6 +33,8 @@ public class Dashboard extends Activity {
private TextView providerNameTV;
private TextView eipTypeTV;
+ public ProviderAPIResultReceiver providerAPI_result_receiver;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -128,6 +137,9 @@ public class Dashboard extends Activity {
intent = new Intent(this,MainActivity.class);
startActivity(intent);
return true;
+ case R.id.login_button:
+
+ return true;
default:
return super.onOptionsItemSelected(item);
}
@@ -139,4 +151,54 @@ public class Dashboard extends Activity {
// TODO Expand the one line overview item to show some details
}
+ @Override
+ public void authenticate(String username, String password) {
+ providerAPI_result_receiver = new ProviderAPIResultReceiver(new Handler());
+ providerAPI_result_receiver.setReceiver(this);
+
+ Intent provider_API_command = new Intent(this, ProviderAPI.class);
+
+ Bundle method_and_parameters = new Bundle();
+ method_and_parameters.putString(ConfigHelper.username_key, username);
+ method_and_parameters.putString(ConfigHelper.password_key, password);
+
+ JSONObject provider_json;
+ try {
+ provider_json = new JSONObject(preferences.getString(ConfigHelper.provider_key, ""));
+ method_and_parameters.putString(ConfigHelper.api_url_key, provider_json.getString(ConfigHelper.api_url_key));
+ } catch (JSONException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ provider_API_command.putExtra(ConfigHelper.srpAuth, method_and_parameters);
+ provider_API_command.putExtra("receiver", providerAPI_result_receiver);
+
+ startService(provider_API_command);
+ }
+
+ public void logInDialog(View view) {
+ FragmentTransaction fragment_transaction = getFragmentManager().beginTransaction();
+ Fragment previous_log_in_dialog = getFragmentManager().findFragmentByTag(ConfigHelper.logInDialog);
+ if (previous_log_in_dialog != null) {
+ fragment_transaction.remove(previous_log_in_dialog);
+ }
+ fragment_transaction.addToBackStack(null);
+
+ DialogFragment newFragment = LogInDialog.newInstance();
+ newFragment.show(fragment_transaction, ConfigHelper.logInDialog);
+ }
+
+ @Override
+ public void onReceiveResult(int resultCode, Bundle resultData) {
+ if(resultCode == ConfigHelper.SRP_AUTHENTICATION_SUCCESSFUL){
+ setResult(RESULT_OK);
+ //TODO What should we do know?
+ }
+ else if(resultCode == ConfigHelper.SRP_AUTHENTICATION_FAILED) {
+ setResult(RESULT_CANCELED);
+ finish();
+ }
+ }
+
}
diff --git a/src/se/leap/leapclient/LogInDialog.java b/src/se/leap/leapclient/LogInDialog.java
new file mode 100644
index 00000000..b9583d8a
--- /dev/null
+++ b/src/se/leap/leapclient/LogInDialog.java
@@ -0,0 +1,73 @@
+package se.leap.leapclient;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.Toast;
+
+public class LogInDialog extends DialogFragment {
+
+ public interface LogInDialogInterface {
+ public void authenticate(String username, String password);
+ }
+
+ LogInDialogInterface interface_with_ConfigurationWizard;
+
+ public static DialogFragment newInstance() {
+ LogInDialog dialog_fragment = new LogInDialog();
+ return dialog_fragment;
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ // Verify that the host activity implements the callback interface
+ try {
+ // Instantiate the NoticeDialogListener so we can send events to the host
+ interface_with_ConfigurationWizard = (LogInDialogInterface) activity;
+ } catch (ClassCastException e) {
+ // The activity doesn't implement the interface, throw exception
+ throw new ClassCastException(activity.toString()
+ + " must implement NoticeDialogListener");
+ }
+ }
+
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ LayoutInflater inflater = getActivity().getLayoutInflater();
+ View log_in_dialog_view = inflater.inflate(R.layout.log_in_dialog, null);
+ final EditText username_field = (EditText)log_in_dialog_view.findViewById(R.id.username_entered);
+ final EditText password_field = (EditText)log_in_dialog_view.findViewById(R.id.password_entered);
+ builder.setView(log_in_dialog_view)
+ .setPositiveButton(R.string.log_in_button, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ String username = username_field.getText().toString().trim();
+ String password = password_field.getText().toString().trim();
+ if(validPassword(password)) {
+ interface_with_ConfigurationWizard.authenticate(username, password);
+ Toast.makeText(getActivity().getApplicationContext(), "It seems your URL is well formed", Toast.LENGTH_LONG).show();
+ } else {
+ password_field.setText("");
+ Toast.makeText(getActivity().getApplicationContext(), "It seems your URL is not well formed", Toast.LENGTH_LONG).show();
+ }
+ }
+ })
+ .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ dialog.cancel();
+ }
+ });
+ // Create the AlertDialog object and return it
+ return builder.create();
+ }
+
+ boolean validPassword(String entered_password) {
+ return !(entered_password.length() > 8);
+ }
+}
diff --git a/src/se/leap/leapclient/ProviderAPI.java b/src/se/leap/leapclient/ProviderAPI.java
index d47e3b65..0b114e38 100644
--- a/src/se/leap/leapclient/ProviderAPI.java
+++ b/src/se/leap/leapclient/ProviderAPI.java
@@ -83,7 +83,7 @@ public class ProviderAPI extends IntentService {
ConfigHelper.saveSharedPref(ConfigHelper.eip_service_key, eip_service_json);
return true;
} catch (IOException e) {
- // TODO Auto-generated catch block
+ // TODO
e.printStackTrace();
return false;
} catch (JSONException e) {
@@ -98,7 +98,7 @@ public class ProviderAPI extends IntentService {
private boolean registerWithSRP(Bundle task) {
String username = (String) task.get(ConfigHelper.username_key);
String password = (String) task.get(ConfigHelper.password_key);
- String authentication_server = (String) task.get(ConfigHelper.srp_server_url_key);
+ String authentication_server = (String) task.get(ConfigHelper.api_url_key);
BigInteger ng_1024 = new BigInteger(ConfigHelper.NG_1024, 16);
BigInteger salt = ng_1024.probablePrime(1024, null);
@@ -110,7 +110,7 @@ public class ProviderAPI extends IntentService {
private boolean authenticateBySRP(Bundle task) {
String username = (String) task.get(ConfigHelper.username_key);
String password = (String) task.get(ConfigHelper.password_key);
- String authentication_server = (String) task.get(ConfigHelper.srp_server_url_key);
+ String authentication_server = (String) task.get(ConfigHelper.api_url_key);
String salt = "abcd";
@@ -269,7 +269,7 @@ public class ProviderAPI extends IntentService {
DefaultHttpClient client = LeapHttpClient.getInstance(getApplicationContext());
int session_id_index = 0;
//String delete_url = task.getString(ConfigHelper.srp_server_url_key) + "/sessions/" + client.getCookieStore().getCookies().get(0).getValue();
- String delete_url = task.getString(ConfigHelper.srp_server_url_key) + "/logout" + "?authenticity_token=" + client.getCookieStore().getCookies().get(session_id_index).getValue();
+ String delete_url = task.getString(ConfigHelper.api_url_key) + "/logout" + "?authenticity_token=" + client.getCookieStore().getCookies().get(session_id_index).getValue();
HttpDelete delete = new HttpDelete(delete_url);
try {
HttpResponse getResponse = client.execute(delete);