Skip to content
This repository was archived by the owner on Oct 15, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified app/app-release.apk
Binary file not shown.
13 changes: 6 additions & 7 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,13 @@ android {
applicationId "com.zeapo.pwdstore"
minSdkVersion 15
targetSdkVersion 21
versionCode 24
versionName "1.2-a5"
versionCode 25
versionName "1.2-a6"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}

// avoid Travis failures
Expand Down
202 changes: 114 additions & 88 deletions app/src/main/java/com/zeapo/pwdstore/GitHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,30 @@ protected void onCreate(Bundle savedInstanceState) {
case REQUEST_CLONE:
setContentView(R.layout.activity_git_clone);

final Spinner protcol_spinner = (Spinner) findViewById(R.id.clone_protocol);
final Spinner connection_mode_spinner = (Spinner) findViewById(R.id.connection_mode);


// init the spinner for connection modes
final ArrayAdapter<CharSequence> connection_mode_adapter = ArrayAdapter.createFromResource(this,
R.array.connection_modes, android.R.layout.simple_spinner_item);
connection_mode_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
connection_mode_spinner.setAdapter(connection_mode_adapter);
connection_mode_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
String selection = ((Spinner) findViewById(R.id.connection_mode)).getSelectedItem().toString();
connectionMode = selection;
settings.edit().putString("git_remote_auth", selection).apply();
}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {

}
});

// init the spinner for protocols
Spinner protcol_spinner = (Spinner) findViewById(R.id.clone_protocol);
ArrayAdapter<CharSequence> protocol_adapter = ArrayAdapter.createFromResource(this,
R.array.clone_protocols, android.R.layout.simple_spinner_item);
protocol_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Expand All @@ -110,17 +132,20 @@ public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l)
protocol = ((Spinner)findViewById(R.id.clone_protocol)).getSelectedItem().toString();
if (protocol.equals("ssh://")) {
((EditText)findViewById(R.id.clone_uri)).setHint("user@hostname:path");

((EditText) findViewById(R.id.server_port)).setHint(R.string.default_ssh_port);

// select ssh-key auth mode as default and enable the spinner in case it was disabled
connection_mode_spinner.setSelection(0);
connection_mode_spinner.setEnabled(true);
} else {
((EditText)findViewById(R.id.clone_uri)).setHint("hostname/path");
new AlertDialog.Builder(activity).
setMessage(activity.getResources().getString(R.string.read_only_dialog_text)).
setCancelable(true).
setPositiveButton(activity.getResources().getString(R.string.dialog_ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {

}
}).show();

((EditText) findViewById(R.id.server_port)).setHint(R.string.default_https_port);

// select user/pwd auth-mode and disable the spinner
connection_mode_spinner.setSelection(1);
connection_mode_spinner.setEnabled(false);
}
}

Expand All @@ -131,25 +156,6 @@ public void onNothingSelected(AdapterView<?> adapterView) {
}
);

// init the spinner for connection modes
Spinner connection_mode_spinner = (Spinner) findViewById(R.id.connection_mode);
ArrayAdapter<CharSequence> connection_mode_adapter = ArrayAdapter.createFromResource(this,
R.array.connection_modes, android.R.layout.simple_spinner_item);
connection_mode_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
connection_mode_spinner.setAdapter(connection_mode_adapter);
connection_mode_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
String selection = ((Spinner) findViewById(R.id.connection_mode)).getSelectedItem().toString();
connectionMode = selection;
settings.edit().putString("git_remote_auth", selection).apply();
}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {

}
});

// init the server information
final EditText server_url = ((EditText) findViewById(R.id.server_url));
Expand Down Expand Up @@ -259,30 +265,57 @@ private void updateURI() {
EditText server_port = ((EditText) findViewById(R.id.server_port));
EditText server_path = ((EditText) findViewById(R.id.server_path));
EditText server_user = ((EditText) findViewById(R.id.server_user));
Log.i("GIT", "key entred");

if (uri != null) {
String hostname =
server_user.getText()
+ "@" +
server_url.getText().toString().trim()
+ ":";
if (server_port.getText().toString().equals("22")) {
hostname += server_path.getText().toString();

((TextView) findViewById(R.id.warn_url)).setVisibility(View.GONE);
} else {
TextView warn_url = (TextView) findViewById(R.id.warn_url);
if (!server_path.getText().toString().matches("/.*") && !server_port.getText().toString().isEmpty()) {
warn_url.setText(R.string.warn_malformed_url_port);
warn_url.setVisibility(View.VISIBLE);
} else {
warn_url.setVisibility(View.GONE);

if (uri != null) {
switch (protocol)
{
case "ssh://":
{
String hostname =
server_user.getText()
+ "@" +
server_url.getText().toString().trim()
+ ":";
if (server_port.getText().toString().equals("22")) {
hostname += server_path.getText().toString();

((TextView) findViewById(R.id.warn_url)).setVisibility(View.GONE);
} else {
TextView warn_url = (TextView) findViewById(R.id.warn_url);
if (!server_path.getText().toString().matches("/.*") && !server_port.getText().toString().isEmpty()) {
warn_url.setText(R.string.warn_malformed_url_port);
warn_url.setVisibility(View.VISIBLE);
} else {
warn_url.setVisibility(View.GONE);
}
hostname += server_port.getText().toString() + server_path.getText().toString();
}

if (!hostname.equals("@:")) uri.setText(hostname);
}
break;
case "https://":
{
StringBuilder hostname = new StringBuilder();
hostname.append(server_url.getText().toString().trim());

if (server_port.getText().toString().equals("443")) {
hostname.append(server_path.getText().toString());

((TextView) findViewById(R.id.warn_url)).setVisibility(View.GONE);
} else {
hostname.append("/");
hostname.append(server_port.getText().toString())
.append(server_path.getText().toString());
}

if (!hostname.toString().equals("@/")) uri.setText(hostname);
}
hostname += server_port.getText().toString() + server_path.getText().toString();
break;
default:
break;
}

if (!hostname.equals("@:")) uri.setText(hostname);
}
}

Expand Down Expand Up @@ -439,8 +472,6 @@ public void cloneRepository(View view) {
if (!port.isEmpty())
hostname = protocol + hostname;

Log.i("GIT", "> " + port);

// did he forget the username?
if (!hostname.matches("^.+@.+")) {
new AlertDialog.Builder(this).
Expand Down Expand Up @@ -506,10 +537,9 @@ public void cloneOperation(UsernamePasswordCredentialsProvider provider) {
// remember the settings
SharedPreferences.Editor editor = settings.edit();

// TODO this is not pretty, use the information obtained earlier
editor.putString("git_remote_server", hostname.split("@")[1].split(":")[0]);
editor.putString("git_remote_location", hostname.split("@")[1].split(":")[1]);
editor.putString("git_remote_username", hostname.split("@")[0]);
editor.putString("git_remote_server", ((EditText) findViewById(R.id.server_url)).getText().toString());
editor.putString("git_remote_location", ((EditText) findViewById(R.id.server_path)).getText().toString());
editor.putString("git_remote_username", ((EditText) findViewById(R.id.server_user)).getText().toString());
editor.putString("git_remote_protocol", protocol);
editor.putString("git_remote_auth", connectionMode);
editor.putString("git_remote_port", port);
Expand Down Expand Up @@ -700,39 +730,35 @@ public void onClick(DialogInterface dialog, int whichButton) {
}).show();
}
} else {
if (protocol.equals("ssh://")) {
final EditText password = new EditText(activity);
password.setHint("Password");
password.setWidth(LinearLayout.LayoutParams.MATCH_PARENT);
password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

new AlertDialog.Builder(activity)
.setTitle(activity.getResources().getString(R.string.passphrase_dialog_title))
.setMessage(activity.getResources().getString(R.string.password_dialog_text))
.setView(password)
.setPositiveButton(activity.getResources().getString(R.string.dialog_ok), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {

SshSessionFactory.setInstance(new GitConfigSessionFactory());
try {
method.invoke(activity,
new UsernamePasswordCredentialsProvider(
settings.getString("git_remote_username", "git"),
password.getText().toString())
);
} catch (Exception e){
e.printStackTrace();
}

final EditText password = new EditText(activity);
password.setHint("Password");
password.setWidth(LinearLayout.LayoutParams.MATCH_PARENT);
password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

new AlertDialog.Builder(activity)
.setTitle(activity.getResources().getString(R.string.passphrase_dialog_title))
.setMessage(activity.getResources().getString(R.string.password_dialog_text))
.setView(password)
.setPositiveButton(activity.getResources().getString(R.string.dialog_ok), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {

SshSessionFactory.setInstance(new GitConfigSessionFactory());
try {
method.invoke(activity,
new UsernamePasswordCredentialsProvider(
settings.getString("git_remote_username", "git"),
password.getText().toString())
);
} catch (Exception e){
e.printStackTrace();
}
}).setNegativeButton(activity.getResources().getString(R.string.dialog_cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Do nothing.
}
}).show();
} else {
// BUG: we do not support HTTP yet...
}

}
}).setNegativeButton(activity.getResources().getString(R.string.dialog_cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Do nothing.
}
}).show();
}
}

Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/arrays.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
</string-array>
<string-array name="clone_protocols">
<item>ssh://</item>
<item>https://</item>
</string-array>
</resources>
4 changes: 3 additions & 1 deletion app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,10 @@
<string name="server_url">Server URL</string>
<string name="server_url_hint">server.com</string>
<string name="server_port_hint">22</string>
<string name="default_ssh_port">22</string>
<string name="default_https_port">443</string>
<string name="server_path">Repo path</string>
<string name="server_path_hint">/path/to/pass</string>
<string name="server_path_hint">path/to/pass</string>
<string name="server_user">Username</string>
<string name="server_user_hint">git_username</string>

Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.+'
classpath 'com.android.tools.build:gradle:0.14.4'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
Expand Down
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Wed Apr 10 15:27:10 PDT 2013
#Tue Nov 25 21:49:03 CET 2014
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2-all.zip