package fuzion24.device.vulnerability.test; import android.content.Context; import android.os.AsyncTask; import android.util.Log; import com.afollestad.materialdialogs.MaterialDialog; import java.util.ArrayList; import java.util.List; import fuzion24.device.vulnerability.vulnerabilities.VulnerabilityOrganizer; import fuzion24.device.vulnerability.vulnerabilities.VulnerabilityTest; public class VulnerabilityTestRunner extends AsyncTask<Void, Integer, List<VulnerabilityTestResult>> { private final Boolean mShowWaitDiaglog; private MaterialDialog mProgressDialog; private final ResultsCallback mCustomCallback; private final Context mCtx; private List<VulnerabilityTest> tests; private static final String TAG = "VULN_TEST"; public VulnerabilityTestRunner(Context actv, Boolean showScanDialog, ResultsCallback callback) { mCtx = actv; mShowWaitDiaglog = showScanDialog; mCustomCallback = callback; tests = VulnerabilityOrganizer.getTests(mCtx); } @Override protected void onPreExecute() { if (mShowWaitDiaglog) { mProgressDialog = new MaterialDialog.Builder(mCtx) .title("Device Vulnerability Checker") .content("Checking device for publicly known vulnerabilities") .cancelable(false) .progress(false, tests.size()) .show(); } } @Override protected List<VulnerabilityTestResult> doInBackground(Void... params) { Log.d(TAG, "Async execute called!!!!"); List<VulnerabilityTestResult> results = new ArrayList<>(); for (int i = 0; i < tests.size(); i++) { mProgressDialog.setProgress(i); VulnerabilityTest test = tests.get(i); Log.d(TAG, "Running test: " + test.getCVEorID()); Exception x = null; boolean isVuln = false; try { isVuln = test.isVulnerable(mCtx); Log.d(TAG, test.getCVEorID() + " isVulnerable: " + isVuln); } catch (Exception e) { e.printStackTrace(); Log.d(TAG, test.getCVEorID() + " failed with: " + e.getMessage()); x = e; } results.add(new VulnerabilityTestResult(test, isVuln, x)); } return results; } @Override protected void onPostExecute(List<VulnerabilityTestResult> vulnerabilityResults) { super.onPostExecute(vulnerabilityResults); if (mCustomCallback != null) mCustomCallback.finished(vulnerabilityResults); if (mShowWaitDiaglog) mProgressDialog.dismiss(); } }