Check for missing files

https://github.com/jmingov/NetHunter-Terminal-Emulator/issues/1
Signed-off-by: binkybear <binkybear@nethunter.com>
This commit is contained in:
binkybear 2016-09-16 21:46:29 -05:00
parent 832a88dd96
commit bb898d5502
2 changed files with 78 additions and 10 deletions

View File

@ -7,6 +7,7 @@ package com.offsec.nhterm;
// todo: Find a good way to get the paths
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
public class ShellType {

View File

@ -34,12 +34,14 @@ import com.offsec.nhterm.emulatorview.compat.KeycodeConstants;
import com.offsec.nhterm.util.SessionList;
import com.offsec.nhterm.util.TermSettings;
import java.io.File;
import java.io.IOException;
import java.text.Collator;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import android.view.View.OnClickListener;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ActivityNotFoundException;
@ -81,6 +83,8 @@ import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import static android.R.attr.button;
/**
* A terminal emulator activity.
*/
@ -860,20 +864,37 @@ public class Term extends Activity implements UpdateCallback, SharedPreferences.
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Log.d("Kali", "Kali");
TermSession session = null;
String filename = "/system/bin/bootkali_login";
String chroot_dir = "/data/local/nhsystem/kali-armhf"; // Not sure if I can wildcard this
File filePath = new File(filename);
File chrootPath = new File(chroot_dir);
try {
session = createTermSession(getBaseContext(), settings, "", ShellType.KALI_LOGIN_SHELL);
session.setFinishCallback(mTermService);
if(!isSymlink(filePath)){
NotFound(filename);
} else if (!isSymlink(chrootPath)){
NotFound(chroot_dir);
} else {
TermSession session = null;
try {
session = createTermSession(getBaseContext(), settings, "", ShellType.KALI_LOGIN_SHELL);
session.setFinishCallback(mTermService);
} catch (IOException e) {
e.printStackTrace();
}
mTermSessions.add(session);
if (from.equals("doCreateNewWindow")) {
end_doCreateNewWindow(session);
}
if (from.equals("populateViewFlipper")) {
end_populateViewFlipper();
}
}
} catch (IOException e) {
e.printStackTrace();
}
mTermSessions.add(session);
if (from.equals("doCreateNewWindow")) {
end_doCreateNewWindow(session);
}
if (from.equals("populateViewFlipper")) {
end_populateViewFlipper();
}
}
});
@ -889,6 +910,52 @@ public class Term extends Activity implements UpdateCallback, SharedPreferences.
});
alertDialog.show();
}
// Check for symlink for bootkali
// http://stackoverflow.com/questions/813710/java-1-6-determine-symbolic-links/813730#813730
public static boolean isSymlink(File file) throws IOException {
if (file == null)
throw new NullPointerException("File must not be null");
File canon;
if (file.getParent() == null) {
canon = file;
} else {
File canonDir = file.getParentFile().getCanonicalFile();
canon = new File(canonDir, file.getName());
}
return !canon.getCanonicalFile().equals(canon.getAbsoluteFile());
}
private void NotFound(String text){
String msg = "";
if (text == "/system/bin/bootkali_login"){
msg = "Please run Nethunter Application to generate!";
} else if (text == "/data/local/nhsystem/kali-armhf" ){
msg = "Missing chroot. You need to install from Chroot Manager";
}
/// Do something for not found text (alertDialog)
alertDialogBuilder = new AlertDialog.Builder(this);
//alertDialogBuilder.setView(promptsView);
//alertDialogBuilder.setCancelable(false);
alertDialogBuilder.setTitle("Error");
alertDialogBuilder.setMessage("Could not find:\n" + text + ":\n" + msg );
alertDialogBuilder.setNegativeButton("OK!",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// close
finish();
System.exit(0);
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}
private void end_doCreateNewWindow(TermSession session){
TermView view = createEmulatorView(session);
view.updatePrefs(mSettings);