Added anti-feature table + join onto apk.
Not used yet, but will be used soon for known vulnerability anti features.
This commit is contained in:
parent
5d17676a01
commit
caa1ead689
@ -241,7 +241,7 @@ public class Apk extends ValueObject implements Comparable<Apk>, Parcelable {
|
|||||||
case Cols.Repo.ADDRESS:
|
case Cols.Repo.ADDRESS:
|
||||||
repoAddress = cursor.getString(i);
|
repoAddress = cursor.getString(i);
|
||||||
break;
|
break;
|
||||||
case Cols.ANTI_FEATURES:
|
case Cols.AntiFeatures.ANTI_FEATURES:
|
||||||
antiFeatures = Utils.parseCommaSeparatedString(cursor.getString(i));
|
antiFeatures = Utils.parseCommaSeparatedString(cursor.getString(i));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -348,7 +348,7 @@ public class Apk extends ValueObject implements Comparable<Apk>, Parcelable {
|
|||||||
values.put(Cols.FEATURES, Utils.serializeCommaSeparatedString(features));
|
values.put(Cols.FEATURES, Utils.serializeCommaSeparatedString(features));
|
||||||
values.put(Cols.NATIVE_CODE, Utils.serializeCommaSeparatedString(nativecode));
|
values.put(Cols.NATIVE_CODE, Utils.serializeCommaSeparatedString(nativecode));
|
||||||
values.put(Cols.INCOMPATIBLE_REASONS, Utils.serializeCommaSeparatedString(incompatibleReasons));
|
values.put(Cols.INCOMPATIBLE_REASONS, Utils.serializeCommaSeparatedString(incompatibleReasons));
|
||||||
values.put(Cols.ANTI_FEATURES, Utils.serializeCommaSeparatedString(antiFeatures));
|
values.put(Cols.AntiFeatures.ANTI_FEATURES, Utils.serializeCommaSeparatedString(antiFeatures));
|
||||||
values.put(Cols.IS_COMPATIBLE, compatible ? 1 : 0);
|
values.put(Cols.IS_COMPATIBLE, compatible ? 1 : 0);
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,8 @@ import android.util.Log;
|
|||||||
|
|
||||||
import org.fdroid.fdroid.R;
|
import org.fdroid.fdroid.R;
|
||||||
import org.fdroid.fdroid.Utils;
|
import org.fdroid.fdroid.Utils;
|
||||||
|
import org.fdroid.fdroid.data.Schema.AntiFeatureTable;
|
||||||
|
import org.fdroid.fdroid.data.Schema.ApkAntiFeatureJoinTable;
|
||||||
import org.fdroid.fdroid.data.Schema.ApkTable;
|
import org.fdroid.fdroid.data.Schema.ApkTable;
|
||||||
import org.fdroid.fdroid.data.Schema.CatJoinTable;
|
import org.fdroid.fdroid.data.Schema.CatJoinTable;
|
||||||
import org.fdroid.fdroid.data.Schema.PackageTable;
|
import org.fdroid.fdroid.data.Schema.PackageTable;
|
||||||
@ -107,8 +109,7 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
+ ApkTable.Cols.HASH_TYPE + " string, "
|
+ ApkTable.Cols.HASH_TYPE + " string, "
|
||||||
+ ApkTable.Cols.ADDED_DATE + " string, "
|
+ ApkTable.Cols.ADDED_DATE + " string, "
|
||||||
+ ApkTable.Cols.IS_COMPATIBLE + " int not null, "
|
+ ApkTable.Cols.IS_COMPATIBLE + " int not null, "
|
||||||
+ ApkTable.Cols.INCOMPATIBLE_REASONS + " text, "
|
+ ApkTable.Cols.INCOMPATIBLE_REASONS + " text"
|
||||||
+ ApkTable.Cols.ANTI_FEATURES + " string"
|
|
||||||
+ ");";
|
+ ");";
|
||||||
|
|
||||||
static final String CREATE_TABLE_APP_METADATA = "CREATE TABLE " + AppMetadataTable.NAME
|
static final String CREATE_TABLE_APP_METADATA = "CREATE TABLE " + AppMetadataTable.NAME
|
||||||
@ -194,7 +195,19 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
+ InstalledAppTable.Cols.HASH + " TEXT NOT NULL"
|
+ InstalledAppTable.Cols.HASH + " TEXT NOT NULL"
|
||||||
+ " );";
|
+ " );";
|
||||||
|
|
||||||
protected static final int DB_VERSION = 74;
|
private static final String CREATE_TABLE_ANTI_FEATURE = "CREATE TABLE " + AntiFeatureTable.NAME
|
||||||
|
+ " ( "
|
||||||
|
+ AntiFeatureTable.Cols.NAME + " TEXT NOT NULL "
|
||||||
|
+ " );";
|
||||||
|
|
||||||
|
private static final String CREATE_TABLE_APK_ANTI_FEATURE_JOIN = "CREATE TABLE " + ApkAntiFeatureJoinTable.NAME
|
||||||
|
+ " ( "
|
||||||
|
+ ApkAntiFeatureJoinTable.Cols.APK_ID + " INT NOT NULL, "
|
||||||
|
+ ApkAntiFeatureJoinTable.Cols.ANTI_FEATURE_ID + " INT NOT NULL, "
|
||||||
|
+ "primary key(" + ApkAntiFeatureJoinTable.Cols.APK_ID + ", " + ApkAntiFeatureJoinTable.Cols.ANTI_FEATURE_ID + ") "
|
||||||
|
+ " );";
|
||||||
|
|
||||||
|
protected static final int DB_VERSION = 75;
|
||||||
|
|
||||||
private final Context context;
|
private final Context context;
|
||||||
|
|
||||||
@ -214,6 +227,8 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
db.execSQL(CREATE_TABLE_INSTALLED_APP);
|
db.execSQL(CREATE_TABLE_INSTALLED_APP);
|
||||||
db.execSQL(CREATE_TABLE_REPO);
|
db.execSQL(CREATE_TABLE_REPO);
|
||||||
db.execSQL(CREATE_TABLE_APP_PREFS);
|
db.execSQL(CREATE_TABLE_APP_PREFS);
|
||||||
|
db.execSQL(CREATE_TABLE_ANTI_FEATURE);
|
||||||
|
db.execSQL(CREATE_TABLE_APK_ANTI_FEATURE_JOIN);
|
||||||
ensureIndexes(db);
|
ensureIndexes(db);
|
||||||
|
|
||||||
String[] defaultRepos = context.getResources().getStringArray(R.array.default_repos);
|
String[] defaultRepos = context.getResources().getStringArray(R.array.default_repos);
|
||||||
@ -283,6 +298,16 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
addPreferredSignerToApp(db, oldVersion);
|
addPreferredSignerToApp(db, oldVersion);
|
||||||
updatePreferredSignerIfEmpty(db, oldVersion);
|
updatePreferredSignerIfEmpty(db, oldVersion);
|
||||||
addIsAppToApp(db, oldVersion);
|
addIsAppToApp(db, oldVersion);
|
||||||
|
addApkAntiFeatures(db, oldVersion);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addApkAntiFeatures(SQLiteDatabase db, int oldVersion) {
|
||||||
|
if (oldVersion >= 74) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.i(TAG, "Adding anti features on a per-apk basis.");
|
||||||
|
resetTransient(db);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addIsAppToApp(SQLiteDatabase db, int oldVersion) {
|
private void addIsAppToApp(SQLiteDatabase db, int oldVersion) {
|
||||||
@ -436,11 +461,6 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
Utils.debugLog(TAG, "Adding " + RepoTable.Cols.MIRRORS + " field to " + RepoTable.NAME + " table in db.");
|
Utils.debugLog(TAG, "Adding " + RepoTable.Cols.MIRRORS + " field to " + RepoTable.NAME + " table in db.");
|
||||||
db.execSQL("alter table " + RepoTable.NAME + " add column " + RepoTable.Cols.MIRRORS + " string;");
|
db.execSQL("alter table " + RepoTable.NAME + " add column " + RepoTable.Cols.MIRRORS + " string;");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!columnExists(db, ApkTable.NAME, ApkTable.Cols.ANTI_FEATURES)) {
|
|
||||||
Utils.debugLog(TAG, "Adding " + ApkTable.Cols.ANTI_FEATURES + " field to " + ApkTable.NAME + " table in db.");
|
|
||||||
db.execSQL("alter table " + ApkTable.NAME + " add column " + ApkTable.Cols.ANTI_FEATURES + " string;");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1059,6 +1079,14 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
db.execSQL("DROP TABLE " + PackageTable.NAME);
|
db.execSQL("DROP TABLE " + PackageTable.NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tableExists(db, AntiFeatureTable.NAME)) {
|
||||||
|
db.execSQL("DROP TABLE " + AntiFeatureTable.NAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tableExists(db, ApkAntiFeatureJoinTable.NAME)) {
|
||||||
|
db.execSQL("DROP TABLE " + ApkAntiFeatureJoinTable.NAME);
|
||||||
|
}
|
||||||
|
|
||||||
db.execSQL("DROP TABLE " + AppMetadataTable.NAME);
|
db.execSQL("DROP TABLE " + AppMetadataTable.NAME);
|
||||||
db.execSQL("DROP TABLE " + ApkTable.NAME);
|
db.execSQL("DROP TABLE " + ApkTable.NAME);
|
||||||
|
|
||||||
@ -1067,6 +1095,8 @@ class DBHelper extends SQLiteOpenHelper {
|
|||||||
db.execSQL(CREATE_TABLE_APK);
|
db.execSQL(CREATE_TABLE_APK);
|
||||||
db.execSQL(CREATE_TABLE_CATEGORY);
|
db.execSQL(CREATE_TABLE_CATEGORY);
|
||||||
db.execSQL(CREATE_TABLE_CAT_JOIN);
|
db.execSQL(CREATE_TABLE_CAT_JOIN);
|
||||||
|
db.execSQL(CREATE_TABLE_ANTI_FEATURE);
|
||||||
|
db.execSQL(CREATE_TABLE_APK_ANTI_FEATURE_JOIN);
|
||||||
clearRepoEtags(db);
|
clearRepoEtags(db);
|
||||||
ensureIndexes(db);
|
ensureIndexes(db);
|
||||||
db.setTransactionSuccessful();
|
db.setTransactionSuccessful();
|
||||||
|
@ -106,6 +106,47 @@ public interface Schema {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface AntiFeatureTable {
|
||||||
|
|
||||||
|
String NAME = "fdroid_antiFeature";
|
||||||
|
|
||||||
|
interface Cols {
|
||||||
|
String ROW_ID = "rowid";
|
||||||
|
String NAME = "name";
|
||||||
|
|
||||||
|
String[] ALL = {ROW_ID, NAME};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An entry in this table signifies that an apk has a particular anti feature.
|
||||||
|
* @see AntiFeatureTable
|
||||||
|
* @see ApkTable
|
||||||
|
*/
|
||||||
|
interface ApkAntiFeatureJoinTable {
|
||||||
|
|
||||||
|
String NAME = "fdroid_apkAntiFeatureJoin";
|
||||||
|
|
||||||
|
interface Cols {
|
||||||
|
/**
|
||||||
|
* Foreign key to {@link ApkTable}.
|
||||||
|
* @see ApkTable
|
||||||
|
*/
|
||||||
|
String APK_ID = "apkId";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Foreign key to {@link AntiFeatureTable}.
|
||||||
|
* @see AntiFeatureTable
|
||||||
|
*/
|
||||||
|
String ANTI_FEATURE_ID = "antiFeatureId";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see AppMetadataTable.Cols#ALL_COLS
|
||||||
|
*/
|
||||||
|
String[] ALL_COLS = {APK_ID, ANTI_FEATURE_ID};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
interface AppMetadataTable {
|
interface AppMetadataTable {
|
||||||
|
|
||||||
String NAME = "fdroid_app";
|
String NAME = "fdroid_app";
|
||||||
@ -258,7 +299,6 @@ public interface Schema {
|
|||||||
String ADDED_DATE = "added";
|
String ADDED_DATE = "added";
|
||||||
String IS_COMPATIBLE = "compatible";
|
String IS_COMPATIBLE = "compatible";
|
||||||
String INCOMPATIBLE_REASONS = "incompatibleReasons";
|
String INCOMPATIBLE_REASONS = "incompatibleReasons";
|
||||||
String ANTI_FEATURES = "antiFeatures";
|
|
||||||
|
|
||||||
interface Repo {
|
interface Repo {
|
||||||
String VERSION = "repoVersion";
|
String VERSION = "repoVersion";
|
||||||
@ -269,6 +309,10 @@ public interface Schema {
|
|||||||
String PACKAGE_NAME = "package_packageName";
|
String PACKAGE_NAME = "package_packageName";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface AntiFeatures {
|
||||||
|
String ANTI_FEATURES = "antiFeatures_commaSeparated";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see AppMetadataTable.Cols#ALL_COLS
|
* @see AppMetadataTable.Cols#ALL_COLS
|
||||||
*/
|
*/
|
||||||
@ -277,7 +321,7 @@ public interface Schema {
|
|||||||
SIZE, SIGNATURE, SOURCE_NAME, MIN_SDK_VERSION, TARGET_SDK_VERSION, MAX_SDK_VERSION,
|
SIZE, SIGNATURE, SOURCE_NAME, MIN_SDK_VERSION, TARGET_SDK_VERSION, MAX_SDK_VERSION,
|
||||||
OBB_MAIN_FILE, OBB_MAIN_FILE_SHA256, OBB_PATCH_FILE, OBB_PATCH_FILE_SHA256,
|
OBB_MAIN_FILE, OBB_MAIN_FILE_SHA256, OBB_PATCH_FILE, OBB_PATCH_FILE_SHA256,
|
||||||
REQUESTED_PERMISSIONS, FEATURES, NATIVE_CODE, HASH_TYPE, ADDED_DATE,
|
REQUESTED_PERMISSIONS, FEATURES, NATIVE_CODE, HASH_TYPE, ADDED_DATE,
|
||||||
IS_COMPATIBLE, INCOMPATIBLE_REASONS, ANTI_FEATURES,
|
IS_COMPATIBLE, INCOMPATIBLE_REASONS,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -289,7 +333,7 @@ public interface Schema {
|
|||||||
OBB_MAIN_FILE, OBB_MAIN_FILE_SHA256, OBB_PATCH_FILE, OBB_PATCH_FILE_SHA256,
|
OBB_MAIN_FILE, OBB_MAIN_FILE_SHA256, OBB_PATCH_FILE, OBB_PATCH_FILE_SHA256,
|
||||||
REQUESTED_PERMISSIONS, FEATURES, NATIVE_CODE, HASH_TYPE, ADDED_DATE,
|
REQUESTED_PERMISSIONS, FEATURES, NATIVE_CODE, HASH_TYPE, ADDED_DATE,
|
||||||
IS_COMPATIBLE, Repo.VERSION, Repo.ADDRESS, INCOMPATIBLE_REASONS,
|
IS_COMPATIBLE, Repo.VERSION, Repo.ADDRESS, INCOMPATIBLE_REASONS,
|
||||||
ANTI_FEATURES,
|
AntiFeatures.ANTI_FEATURES,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user