Fix issue with no databases on service start

This commit is contained in:
Tad 2017-12-17 07:37:34 -05:00
parent 21dfafd0af
commit 23774983ab
4 changed files with 30 additions and 23 deletions

View file

@ -6,8 +6,8 @@ android {
applicationId "us.spotco.malwarescanner"
minSdkVersion 21
targetSdkVersion 26
versionCode 17
versionName "1.8"
versionCode 18
versionName "1.9"
}
buildTypes {
debug {

View file

@ -26,9 +26,33 @@ class Database {
public Database(Context context, TextView log) {
Database.log = log;
initDatabase(context);
}
public static boolean areDatabasesAvailable() {
return databasePath != null && databasePath.listFiles().length > 0;
}
public static boolean isDatabaseLoaded() {
return signaturesMD5.size() > 0 && signaturesSHA1.size() > 0 && signaturesSHA256.size() > 0;
}
public static int getSignatureCount() {
return signaturesMD5.size() + signaturesSHA1.size() + signaturesSHA256.size();
}
public static void updateDatabase(ArrayList<SignatureDatabase> signatureDatabases) {
for (SignatureDatabase signatureDatabase : signatureDatabases) {
new Downloader().execute(signatureDatabase.getUrl(), databasePath + "/" + signatureDatabase.getName());
}
}
public static void initDatabase(Context context) {
databasePath = new File(context.getFilesDir() + "/signatures/");
databasePath.mkdir();
signatureDatabases.clear();
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/bofhland_malware_attach.hdb"));
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/crdfam.clamav.hdb"));
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/doppelstern.hdb"));
@ -48,26 +72,9 @@ class Database {
signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/winnow_malware.hdb"));
}
public static boolean areDatabasesAvailable() {
return databasePath.listFiles().length > 0;
}
public static boolean isDatabaseLoaded() {
return signaturesMD5.size() > 0 && signaturesSHA1.size() > 0 && signaturesSHA256.size() > 0;
}
public static int getSignatureCount() {
return signaturesMD5.size() + signaturesSHA1.size() + signaturesSHA256.size();
}
public static void updateDatabase(ArrayList<SignatureDatabase> signatureDatabases) {
for (SignatureDatabase signatureDatabase : signatureDatabases) {
new Downloader().execute(signatureDatabase.getUrl(), databasePath + "/" + signatureDatabase.getName());
}
}
public static void loadDatabase(boolean ignoreifLoaded, ArrayList<SignatureDatabase> signatureDatabases) {
public static void loadDatabase(Context context, boolean ignoreifLoaded, ArrayList<SignatureDatabase> signatureDatabases) {
if (!isDatabaseLoaded() || !ignoreifLoaded && isDatabaseLoaded()) {
initDatabase(context);
signaturesMD5.clear();
signaturesSHA1.clear();
signaturesSHA256.clear();

View file

@ -112,7 +112,7 @@ public class MainActivity extends AppCompatActivity {
case R.id.mnuUpdateDatabase:
Database.updateDatabase(Database.signatureDatabases);
if (Database.isDatabaseLoaded()) {
Database.loadDatabase(false, Database.signatureDatabases);
Database.loadDatabase(getApplicationContext(), false, Database.signatureDatabases);
}
break;
case R.id.toggleRealtime:

View file

@ -74,7 +74,7 @@ class MalwareScanner extends AsyncTask<Set<File>, Object, String> {
publishProgress(filesToScan[0].size() + " files pending scan\n", true);
Database.loadDatabase(true, Database.signatureDatabases);
Database.loadDatabase(context, true, Database.signatureDatabases);
publishProgress("Loaded database with " + Database.getSignatureCount() + " signatures\n", true);
//Get file hashes