From e83f1e7b3af18e66c9f530bc6ad72f71c103f561 Mon Sep 17 00:00:00 2001 From: Thialfihar Date: Tue, 25 May 2010 19:34:56 +0000 Subject: first steps towards better low-level key management, database upgrade to use KeyRing, Key, and UserId tables --- .../android/apg/provider/DataProvider.java | 41 ++-------------------- 1 file changed, 2 insertions(+), 39 deletions(-) (limited to 'src/org/thialfihar/android/apg/provider/DataProvider.java') diff --git a/src/org/thialfihar/android/apg/provider/DataProvider.java b/src/org/thialfihar/android/apg/provider/DataProvider.java index fbc1be047..21d6b77c3 100644 --- a/src/org/thialfihar/android/apg/provider/DataProvider.java +++ b/src/org/thialfihar/android/apg/provider/DataProvider.java @@ -34,9 +34,6 @@ import android.text.TextUtils; public class DataProvider extends ContentProvider { public static final String AUTHORITY = "org.thialfihar.android.apg.provider"; - private static final String DATABASE_NAME = "apg"; - private static final int DATABASE_VERSION = 1; - private static final int PUBLIC_KEYS = 101; private static final int PUBLIC_KEY_ID = 102; private static final int PUBLIC_KEY_BY_KEY_ID = 103; @@ -53,7 +50,7 @@ public class DataProvider extends ContentProvider { private static final HashMap mSecretKeysProjectionMap; private static final HashMap mAccountsProjectionMap; - private DatabaseHelper mdbHelper; + private Database mdbHelper; static { mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); @@ -85,43 +82,9 @@ public class DataProvider extends ContentProvider { mAccountsProjectionMap.put(Accounts.NAME, Accounts.NAME); } - /** - * This class helps open, create, and upgrade the database file. - */ - private static class DatabaseHelper extends SQLiteOpenHelper { - - DatabaseHelper(Context context) { - super(context, DATABASE_NAME, null, DATABASE_VERSION); - } - - @Override - public void onCreate(SQLiteDatabase db) { - db.execSQL("CREATE TABLE " + PublicKeys.TABLE_NAME + " (" + - PublicKeys._ID + " " + PublicKeys._ID_type + "," + - PublicKeys.KEY_ID + " " + PublicKeys.KEY_ID_type + ", " + - PublicKeys.KEY_DATA + " " + PublicKeys.KEY_DATA_type + ", " + - PublicKeys.WHO_ID + " " + PublicKeys.WHO_ID_type + ");"); - - db.execSQL("CREATE TABLE " + SecretKeys.TABLE_NAME + " (" + - SecretKeys._ID + " " + SecretKeys._ID_type + "," + - SecretKeys.KEY_ID + " " + SecretKeys.KEY_ID_type + ", " + - SecretKeys.KEY_DATA + " " + SecretKeys.KEY_DATA_type + ", " + - SecretKeys.WHO_ID + " " + SecretKeys.WHO_ID_type + ");"); - - db.execSQL("CREATE TABLE " + Accounts.TABLE_NAME + " (" + - Accounts._ID + " " + Accounts._ID_type + "," + - Accounts.NAME + " " + Accounts.NAME_type + ");"); - } - - @Override - public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - // TODO: upgrade db if necessary, and do that in a clever way - } - } - @Override public boolean onCreate() { - mdbHelper = new DatabaseHelper(getContext()); + mdbHelper = new Database(getContext()); return true; } -- cgit v1.2.3 From 6f28f5ee4e3200fbc36335f5670fe1084471afef Mon Sep 17 00:00:00 2001 From: Thialfihar Date: Wed, 26 May 2010 00:33:26 +0000 Subject: key lists somewhat wrapped into one, using the new database stuff, Apg cleaned up a bit, preparing to use the database there as well --- src/org/thialfihar/android/apg/provider/DataProvider.java | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/org/thialfihar/android/apg/provider/DataProvider.java') diff --git a/src/org/thialfihar/android/apg/provider/DataProvider.java b/src/org/thialfihar/android/apg/provider/DataProvider.java index 21d6b77c3..ee63d76f4 100644 --- a/src/org/thialfihar/android/apg/provider/DataProvider.java +++ b/src/org/thialfihar/android/apg/provider/DataProvider.java @@ -21,12 +21,10 @@ import java.util.HashMap; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; -import android.content.Context; import android.content.UriMatcher; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; import android.text.TextUtils; -- cgit v1.2.3 From 570b7a6d8eaeeede6421070578485444e8b632ca Mon Sep 17 00:00:00 2001 From: Thialfihar Date: Thu, 27 May 2010 20:09:26 +0000 Subject: added revocation and creation/expire time info to key table, use both for public and secret key selection --- src/org/thialfihar/android/apg/provider/DataProvider.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/org/thialfihar/android/apg/provider/DataProvider.java') diff --git a/src/org/thialfihar/android/apg/provider/DataProvider.java b/src/org/thialfihar/android/apg/provider/DataProvider.java index ee63d76f4..6b56e0bd9 100644 --- a/src/org/thialfihar/android/apg/provider/DataProvider.java +++ b/src/org/thialfihar/android/apg/provider/DataProvider.java @@ -18,6 +18,8 @@ package org.thialfihar.android.apg.provider; import java.util.HashMap; +import org.thialfihar.android.apg.Apg; + import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; @@ -82,7 +84,9 @@ public class DataProvider extends ContentProvider { @Override public boolean onCreate() { - mdbHelper = new Database(getContext()); + //mdbHelper = new Database(getContext()); + Apg.initialize(getContext()); + mdbHelper = Apg.getDatabase(); return true; } -- cgit v1.2.3 From eed42b2e34d6ba7e6eda43640eb3bb1555d9e24f Mon Sep 17 00:00:00 2001 From: Thialfihar Date: Fri, 28 May 2010 07:04:01 +0000 Subject: fully removed old DataProvider for now, manage queries, clean up old database stuff --- .../android/apg/provider/DataProvider.java | 452 --------------------- 1 file changed, 452 deletions(-) delete mode 100644 src/org/thialfihar/android/apg/provider/DataProvider.java (limited to 'src/org/thialfihar/android/apg/provider/DataProvider.java') diff --git a/src/org/thialfihar/android/apg/provider/DataProvider.java b/src/org/thialfihar/android/apg/provider/DataProvider.java deleted file mode 100644 index 6b56e0bd9..000000000 --- a/src/org/thialfihar/android/apg/provider/DataProvider.java +++ /dev/null @@ -1,452 +0,0 @@ -/* - * Copyright (C) 2010 Thialfihar - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.thialfihar.android.apg.provider; - -import java.util.HashMap; - -import org.thialfihar.android.apg.Apg; - -import android.content.ContentProvider; -import android.content.ContentUris; -import android.content.ContentValues; -import android.content.UriMatcher; -import android.database.Cursor; -import android.database.SQLException; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteQueryBuilder; -import android.net.Uri; -import android.text.TextUtils; - -public class DataProvider extends ContentProvider { - public static final String AUTHORITY = "org.thialfihar.android.apg.provider"; - - private static final int PUBLIC_KEYS = 101; - private static final int PUBLIC_KEY_ID = 102; - private static final int PUBLIC_KEY_BY_KEY_ID = 103; - - private static final int SECRET_KEYS = 201; - private static final int SECRET_KEY_ID = 202; - private static final int SECRET_KEY_BY_KEY_ID = 203; - - private static final int ACCOUNTS = 301; - private static final int ACCOUNT_ID = 302; - - private static final UriMatcher mUriMatcher; - private static final HashMap mPublicKeysProjectionMap; - private static final HashMap mSecretKeysProjectionMap; - private static final HashMap mAccountsProjectionMap; - - private Database mdbHelper; - - static { - mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); - mUriMatcher.addURI(DataProvider.AUTHORITY, "public_keys", PUBLIC_KEYS); - mUriMatcher.addURI(DataProvider.AUTHORITY, "public_keys/#", PUBLIC_KEY_ID); - mUriMatcher.addURI(DataProvider.AUTHORITY, "public_keys/key_id/*", PUBLIC_KEY_BY_KEY_ID); - - mUriMatcher.addURI(DataProvider.AUTHORITY, "secret_keys", SECRET_KEYS); - mUriMatcher.addURI(DataProvider.AUTHORITY, "secret_keys/#", SECRET_KEY_ID); - mUriMatcher.addURI(DataProvider.AUTHORITY, "secret_keys/key_id/*", SECRET_KEY_BY_KEY_ID); - - mUriMatcher.addURI(DataProvider.AUTHORITY, "accounts", ACCOUNTS); - mUriMatcher.addURI(DataProvider.AUTHORITY, "accounts/#", ACCOUNT_ID); - - mPublicKeysProjectionMap = new HashMap(); - mPublicKeysProjectionMap.put(PublicKeys._ID, PublicKeys._ID); - mPublicKeysProjectionMap.put(PublicKeys.KEY_ID, PublicKeys.KEY_ID); - mPublicKeysProjectionMap.put(PublicKeys.KEY_DATA, PublicKeys.KEY_DATA); - mPublicKeysProjectionMap.put(PublicKeys.WHO_ID, PublicKeys.WHO_ID); - - mSecretKeysProjectionMap = new HashMap(); - mSecretKeysProjectionMap.put(PublicKeys._ID, PublicKeys._ID); - mSecretKeysProjectionMap.put(PublicKeys.KEY_ID, PublicKeys.KEY_ID); - mSecretKeysProjectionMap.put(PublicKeys.KEY_DATA, PublicKeys.KEY_DATA); - mSecretKeysProjectionMap.put(PublicKeys.WHO_ID, PublicKeys.WHO_ID); - - mAccountsProjectionMap = new HashMap(); - mAccountsProjectionMap.put(Accounts._ID, Accounts._ID); - mAccountsProjectionMap.put(Accounts.NAME, Accounts.NAME); - } - - @Override - public boolean onCreate() { - //mdbHelper = new Database(getContext()); - Apg.initialize(getContext()); - mdbHelper = Apg.getDatabase(); - return true; - } - - @Override - public Cursor query(Uri uri, String[] projection, String selection, - String[] selectionArgs, String sortOrder) { - SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); - - switch (mUriMatcher.match(uri)) { - case PUBLIC_KEYS: { - qb.setTables(PublicKeys.TABLE_NAME); - qb.setProjectionMap(mPublicKeysProjectionMap); - break; - } - - case PUBLIC_KEY_ID: { - qb.setTables(PublicKeys.TABLE_NAME); - qb.setProjectionMap(mPublicKeysProjectionMap); - qb.appendWhere(PublicKeys._ID + "=" + uri.getPathSegments().get(1)); - break; - } - - case PUBLIC_KEY_BY_KEY_ID: { - qb.setTables(PublicKeys.TABLE_NAME); - qb.setProjectionMap(mPublicKeysProjectionMap); - qb.appendWhere(PublicKeys.KEY_ID + "=" + uri.getPathSegments().get(2)); - break; - } - - case SECRET_KEYS: { - qb.setTables(SecretKeys.TABLE_NAME); - qb.setProjectionMap(mSecretKeysProjectionMap); - break; - } - - case SECRET_KEY_ID: { - qb.setTables(SecretKeys.TABLE_NAME); - qb.setProjectionMap(mSecretKeysProjectionMap); - qb.appendWhere(SecretKeys._ID + "=" + uri.getPathSegments().get(1)); - break; - } - - case SECRET_KEY_BY_KEY_ID: { - qb.setTables(SecretKeys.TABLE_NAME); - qb.setProjectionMap(mSecretKeysProjectionMap); - qb.appendWhere(SecretKeys.KEY_ID + "=" + uri.getPathSegments().get(2)); - break; - } - - case ACCOUNTS: { - qb.setTables(Accounts.TABLE_NAME); - qb.setProjectionMap(mAccountsProjectionMap); - break; - } - - case ACCOUNT_ID: { - qb.setTables(Accounts.TABLE_NAME); - qb.setProjectionMap(mAccountsProjectionMap); - qb.appendWhere(Accounts._ID + "=" + uri.getPathSegments().get(1)); - break; - } - - default: { - throw new IllegalArgumentException("Unknown URI " + uri); - } - } - - // If no sort order is specified use the default - String orderBy; - if (TextUtils.isEmpty(sortOrder)) { - orderBy = PublicKeys.DEFAULT_SORT_ORDER; - } else { - orderBy = sortOrder; - } - - // Get the database and run the query - SQLiteDatabase db = mdbHelper.getReadableDatabase(); - Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, orderBy); - - // Tell the cursor what uri to watch, so it knows when its source data - // changes - c.setNotificationUri(getContext().getContentResolver(), uri); - return c; - } - - @Override - public String getType(Uri uri) { - switch (mUriMatcher.match(uri)) { - case PUBLIC_KEYS: { - return PublicKeys.CONTENT_TYPE; - } - - case PUBLIC_KEY_ID: { - return PublicKeys.CONTENT_ITEM_TYPE; - } - - case PUBLIC_KEY_BY_KEY_ID: { - return PublicKeys.CONTENT_ITEM_TYPE; - } - - case SECRET_KEYS: { - return SecretKeys.CONTENT_TYPE; - } - - case SECRET_KEY_ID: { - return SecretKeys.CONTENT_ITEM_TYPE; - } - - case SECRET_KEY_BY_KEY_ID: { - return SecretKeys.CONTENT_ITEM_TYPE; - } - - case ACCOUNTS: { - return Accounts.CONTENT_TYPE; - } - - case ACCOUNT_ID: { - return Accounts.CONTENT_ITEM_TYPE; - } - - default: { - throw new IllegalArgumentException("Unknown URI " + uri); - } - } - } - - @Override - public Uri insert(Uri uri, ContentValues initialValues) { - switch (mUriMatcher.match(uri)) { - case PUBLIC_KEYS: { - ContentValues values; - if (initialValues != null) { - values = new ContentValues(initialValues); - } else { - values = new ContentValues(); - } - - if (!values.containsKey(PublicKeys.WHO_ID)) { - values.put(PublicKeys.WHO_ID, ""); - } - - SQLiteDatabase db = mdbHelper.getWritableDatabase(); - long rowId = db.insert(PublicKeys.TABLE_NAME, PublicKeys.WHO_ID, values); - if (rowId > 0) { - Uri transferUri = ContentUris.withAppendedId(PublicKeys.CONTENT_URI, rowId); - getContext().getContentResolver().notifyChange(transferUri, null); - return transferUri; - } - - throw new SQLException("Failed to insert row into " + uri); - } - - case SECRET_KEYS: { - ContentValues values; - if (initialValues != null) { - values = new ContentValues(initialValues); - } else { - values = new ContentValues(); - } - - if (!values.containsKey(SecretKeys.WHO_ID)) { - values.put(SecretKeys.WHO_ID, ""); - } - - SQLiteDatabase db = mdbHelper.getWritableDatabase(); - long rowId = db.insert(SecretKeys.TABLE_NAME, SecretKeys.WHO_ID, values); - if (rowId > 0) { - Uri transferUri = ContentUris.withAppendedId(SecretKeys.CONTENT_URI, rowId); - getContext().getContentResolver().notifyChange(transferUri, null); - return transferUri; - } - - throw new SQLException("Failed to insert row into " + uri); - } - - case ACCOUNTS: { - ContentValues values; - if (initialValues != null) { - values = new ContentValues(initialValues); - } else { - values = new ContentValues(); - } - - SQLiteDatabase db = mdbHelper.getWritableDatabase(); - long rowId = db.insert(Accounts.TABLE_NAME, null, values); - if (rowId > 0) { - Uri transferUri = ContentUris.withAppendedId(Accounts.CONTENT_URI, rowId); - getContext().getContentResolver().notifyChange(transferUri, null); - return transferUri; - } - - throw new SQLException("Failed to insert row into " + uri); - } - - default: { - throw new IllegalArgumentException("Unknown URI " + uri); - } - } - } - - @Override - public int delete(Uri uri, String where, String[] whereArgs) { - SQLiteDatabase db = mdbHelper.getWritableDatabase(); - int count; - switch (mUriMatcher.match(uri)) { - case PUBLIC_KEYS: { - count = db.delete(PublicKeys.TABLE_NAME, where, whereArgs); - break; - } - - case PUBLIC_KEY_ID: { - String publicKeyId = uri.getPathSegments().get(1); - count = db.delete(PublicKeys.TABLE_NAME, - PublicKeys._ID + "=" + publicKeyId + - (!TextUtils.isEmpty(where) ? - " AND (" + where + ')' : ""), - whereArgs); - break; - } - - case PUBLIC_KEY_BY_KEY_ID: { - String publicKeyKeyId = uri.getPathSegments().get(2); - count = db.delete(PublicKeys.TABLE_NAME, - PublicKeys.KEY_ID + "=" + publicKeyKeyId + - (!TextUtils.isEmpty(where) ? - " AND (" + where + ')' : ""), - whereArgs); - break; - } - - case SECRET_KEYS: { - count = db.delete(SecretKeys.TABLE_NAME, where, whereArgs); - break; - } - - case SECRET_KEY_ID: { - String secretKeyId = uri.getPathSegments().get(1); - count = db.delete(SecretKeys.TABLE_NAME, - SecretKeys._ID + "=" + secretKeyId + - (!TextUtils.isEmpty(where) ? - " AND (" + where + ')' : ""), - whereArgs); - break; - } - - case SECRET_KEY_BY_KEY_ID: { - String secretKeyKeyId = uri.getPathSegments().get(2); - count = db.delete(SecretKeys.TABLE_NAME, - SecretKeys.KEY_ID + "=" + secretKeyKeyId + - (!TextUtils.isEmpty(where) ? - " AND (" + where + ')' : ""), - whereArgs); - break; - } - - case ACCOUNTS: { - count = db.delete(Accounts.TABLE_NAME, where, whereArgs); - break; - } - - case ACCOUNT_ID: { - String accountId = uri.getPathSegments().get(1); - count = db.delete(Accounts.TABLE_NAME, - Accounts._ID + "=" + accountId + - (!TextUtils.isEmpty(where) ? - " AND (" + where + ')' : ""), - whereArgs); - break; - } - - default: { - throw new IllegalArgumentException("Unknown URI " + uri); - } - } - - getContext().getContentResolver().notifyChange(uri, null); - return count; - } - - @Override - public int update(Uri uri, ContentValues values, String where, String[] whereArgs) { - SQLiteDatabase db = mdbHelper.getWritableDatabase(); - int count; - switch (mUriMatcher.match(uri)) { - case PUBLIC_KEYS: { - count = db.update(PublicKeys.TABLE_NAME, values, where, whereArgs); - break; - } - - case PUBLIC_KEY_ID: { - String publicKeyId = uri.getPathSegments().get(1); - - count = db.update(PublicKeys.TABLE_NAME, values, - PublicKeys._ID + "=" + publicKeyId + - (!TextUtils.isEmpty(where) ? - " AND (" + where + ')' : ""), - whereArgs); - break; - } - - case PUBLIC_KEY_BY_KEY_ID: { - String publicKeyKeyId = uri.getPathSegments().get(2); - - count = db.update(PublicKeys.TABLE_NAME, values, - PublicKeys.KEY_ID + "=" + publicKeyKeyId + - (!TextUtils.isEmpty(where) ? - " AND (" + where + ')' : ""), - whereArgs); - break; - } - - case SECRET_KEYS: { - count = db.update(SecretKeys.TABLE_NAME, values, where, whereArgs); - break; - } - - case SECRET_KEY_ID: { - String secretKeyId = uri.getPathSegments().get(1); - - count = db.update(SecretKeys.TABLE_NAME, values, - SecretKeys._ID + "=" + secretKeyId + - (!TextUtils.isEmpty(where) ? - " AND (" + where + ')' : ""), - whereArgs); - break; - } - - case SECRET_KEY_BY_KEY_ID: { - String secretKeyKeyId = uri.getPathSegments().get(2); - - count = db.update(SecretKeys.TABLE_NAME, values, - SecretKeys.KEY_ID + "=" + secretKeyKeyId + - (!TextUtils.isEmpty(where) ? - " AND (" + where + ')' : ""), - whereArgs); - break; - } - - case ACCOUNTS: { - count = db.update(Accounts.TABLE_NAME, values, where, whereArgs); - break; - } - - case ACCOUNT_ID: { - String accountId = uri.getPathSegments().get(1); - - count = db.update(Accounts.TABLE_NAME, values, - Accounts._ID + "=" + accountId + - (!TextUtils.isEmpty(where) ? - " AND (" + where + ')' : ""), - whereArgs); - break; - } - - default: { - throw new IllegalArgumentException("Unknown URI " + uri); - } - } - - getContext().getContentResolver().notifyChange(uri, null); - return count; - } -} -- cgit v1.2.3 From 7193edbba203212847dbdca575e8ae8d1ceab820 Mon Sep 17 00:00:00 2001 From: Thialfihar Date: Wed, 2 Jun 2010 14:01:18 +0000 Subject: added content provider again and read permission to grab key details --- .../android/apg/provider/DataProvider.java | 315 +++++++++++++++++++++ 1 file changed, 315 insertions(+) create mode 100644 src/org/thialfihar/android/apg/provider/DataProvider.java (limited to 'src/org/thialfihar/android/apg/provider/DataProvider.java') diff --git a/src/org/thialfihar/android/apg/provider/DataProvider.java b/src/org/thialfihar/android/apg/provider/DataProvider.java new file mode 100644 index 000000000..d01fc6c92 --- /dev/null +++ b/src/org/thialfihar/android/apg/provider/DataProvider.java @@ -0,0 +1,315 @@ +/* + * Copyright (C) 2010 Thialfihar + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.thialfihar.android.apg.provider; + +import java.util.HashMap; + +import org.thialfihar.android.apg.Id; + +import android.content.ContentProvider; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Context; +import android.content.UriMatcher; +import android.database.Cursor; +import android.database.SQLException; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.database.sqlite.SQLiteQueryBuilder; +import android.net.Uri; +import android.text.TextUtils; + +public class DataProvider extends ContentProvider { + public static final String AUTHORITY = "org.thialfihar.android.apg.provider"; + + private static final int PUBLIC_KEY_RINGS = 101; + private static final int PUBLIC_KEY_RING_ID = 102; + private static final int PUBLIC_KEY_RING_BY_KEY_ID = 103; + private static final int PUBLIC_KEY_RING_KEYS = 111; + private static final int PUBLIC_KEY_RING_KEY_RANK = 112; + private static final int PUBLIC_KEY_RING_USER_IDS = 121; + private static final int PUBLIC_KEY_RING_USER_ID_RANK = 122; + + private static final int SECRET_KEY_RINGS = 201; + private static final int SECRET_KEY_RING_ID = 202; + private static final int SECRET_KEY_RING_BY_KEY_ID = 203; + private static final int SECRET_KEY_RING_KEYS = 211; + private static final int SECRET_KEY_RING_KEY_RANK = 212; + private static final int SECRET_KEY_RING_USER_IDS = 221; + private static final int SECRET_KEY_RING_USER_ID_RANK = 222; + + private static final String PUBLIC_KEY_RING_CONTENT_DIR_TYPE = + "vnd.android.cursor.dir/vnd.thialfihar.apg.public.key_ring"; + private static final String PUBLIC_KEY_RING_CONTENT_ITEM_TYPE = + "vnd.android.cursor.item/vnd.thialfihar.apg.public.key_ring"; + + private static final String PUBLIC_KEY_CONTENT_DIR_TYPE = + "vnd.android.cursor.dir/vnd.thialfihar.apg.public.key"; + private static final String PUBLIC_KEY_CONTENT_ITEM_TYPE = + "vnd.android.cursor.item/vnd.thialfihar.apg.public.key"; + + private static final String SECRET_KEY_RING_CONTENT_DIR_TYPE = + "vnd.android.cursor.dir/vnd.thialfihar.apg.secret.key_ring"; + private static final String SECRET_KEY_RING_CONTENT_ITEM_TYPE = + "vnd.android.cursor.item/vnd.thialfihar.apg.secret.key_ring"; + + private static final String SECRET_KEY_CONTENT_DIR_TYPE = + "vnd.android.cursor.dir/vnd.thialfihar.apg.secret.key"; + private static final String SECRET_KEY_CONTENT_ITEM_TYPE = + "vnd.android.cursor.item/vnd.thialfihar.apg.secret.key"; + + private static final String USER_ID_CONTENT_DIR_TYPE = + "vnd.android.cursor.dir/vnd.thialfihar.apg.user_id"; + private static final String USER_ID_CONTENT_ITEM_TYPE = + "vnd.android.cursor.item/vnd.thialfihar.apg.user_id"; + + public static final String MASTER_KEY_ID = "master_key_id"; + public static final String KEY_ID = "key_id"; + public static final String USER_ID = "user_id"; + + private static final UriMatcher mUriMatcher; + + private Database mDb; + + static { + mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); + mUriMatcher.addURI(AUTHORITY, "key_rings/public/key_id/*", PUBLIC_KEY_RING_BY_KEY_ID); + + mUriMatcher.addURI(AUTHORITY, "key_rings/public/*/keys", PUBLIC_KEY_RING_KEYS); + mUriMatcher.addURI(AUTHORITY, "key_rings/public/*/keys/#", PUBLIC_KEY_RING_KEY_RANK); + + mUriMatcher.addURI(AUTHORITY, "key_rings/public/*/user_ids", PUBLIC_KEY_RING_USER_IDS); + mUriMatcher.addURI(AUTHORITY, "key_rings/public/*/user_ids/#", PUBLIC_KEY_RING_USER_ID_RANK); + + mUriMatcher.addURI(AUTHORITY, "key_rings/public", PUBLIC_KEY_RINGS); + mUriMatcher.addURI(AUTHORITY, "key_rings/public/*", PUBLIC_KEY_RING_ID); + + mUriMatcher.addURI(AUTHORITY, "key_rings/secret/key_id/*", SECRET_KEY_RING_BY_KEY_ID); + + mUriMatcher.addURI(AUTHORITY, "key_rings/secret/*/keys", SECRET_KEY_RING_KEYS); + mUriMatcher.addURI(AUTHORITY, "key_rings/secret/*/keys/#", SECRET_KEY_RING_KEY_RANK); + + mUriMatcher.addURI(AUTHORITY, "key_rings/secret/*/user_ids", SECRET_KEY_RING_USER_IDS); + mUriMatcher.addURI(AUTHORITY, "key_rings/secret/*/user_ids/#", SECRET_KEY_RING_USER_ID_RANK); + + mUriMatcher.addURI(AUTHORITY, "key_rings/secret", SECRET_KEY_RINGS); + mUriMatcher.addURI(AUTHORITY, "key_rings/secret/*", SECRET_KEY_RING_ID); + } + + @Override + public boolean onCreate() { + mDb = new Database(getContext()); + return true; + } + + @Override + public Cursor query(Uri uri, String[] projection, String selection, + String[] selectionArgs, String sortOrder) { + SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); + HashMap projectionMap = new HashMap(); + int match = mUriMatcher.match(uri); + int type; + switch (match) { + case PUBLIC_KEY_RINGS: + case PUBLIC_KEY_RING_ID: + case PUBLIC_KEY_RING_BY_KEY_ID: + case PUBLIC_KEY_RING_KEYS: + case PUBLIC_KEY_RING_KEY_RANK: + case PUBLIC_KEY_RING_USER_IDS: + case PUBLIC_KEY_RING_USER_ID_RANK: + type = Id.database.type_public; + break; + + case SECRET_KEY_RINGS: + case SECRET_KEY_RING_ID: + case SECRET_KEY_RING_BY_KEY_ID: + case SECRET_KEY_RING_KEYS: + case SECRET_KEY_RING_KEY_RANK: + case SECRET_KEY_RING_USER_IDS: + case SECRET_KEY_RING_USER_ID_RANK: + type = Id.database.type_secret; + break; + + default: { + throw new IllegalArgumentException("Unknown URI " + uri); + } + } + + qb.appendWhere(KeyRings.TABLE_NAME + "." + KeyRings.TYPE + " = " + type); + + switch (match) { + case PUBLIC_KEY_RINGS: + case SECRET_KEY_RINGS: { + qb.setTables(KeyRings.TABLE_NAME + " INNER JOIN " + Keys.TABLE_NAME + " ON " + + "(" + KeyRings.TABLE_NAME + "." + KeyRings._ID + " = " + + Keys.TABLE_NAME + "." + Keys.KEY_RING_ID + " AND " + + Keys.TABLE_NAME + "." + Keys.IS_MASTER_KEY + " = '1'" + + ") " + + " INNER JOIN " + UserIds.TABLE_NAME + " ON " + + "(" + Keys.TABLE_NAME + "." + Keys._ID + " = " + + UserIds.TABLE_NAME + "." + UserIds.KEY_ID + " AND " + + UserIds.TABLE_NAME + "." + UserIds.RANK + " = '0') "); + + projectionMap.put(MASTER_KEY_ID, + KeyRings.TABLE_NAME + "." + KeyRings.MASTER_KEY_ID); + projectionMap.put(USER_ID, + UserIds.TABLE_NAME + "." + UserIds.USER_ID); + + break; + } + + case PUBLIC_KEY_RING_ID: + case SECRET_KEY_RING_ID: { + qb.setTables(KeyRings.TABLE_NAME + " INNER JOIN " + Keys.TABLE_NAME + " ON " + + "(" + KeyRings.TABLE_NAME + "." + KeyRings._ID + " = " + + Keys.TABLE_NAME + "." + Keys.KEY_RING_ID + " AND " + + Keys.TABLE_NAME + "." + Keys.IS_MASTER_KEY + " = '1'" + + ") " + + " INNER JOIN " + UserIds.TABLE_NAME + " ON " + + "(" + Keys.TABLE_NAME + "." + Keys._ID + " = " + + UserIds.TABLE_NAME + "." + UserIds.KEY_ID + " AND " + + UserIds.TABLE_NAME + "." + UserIds.RANK + " = '0') "); + + projectionMap.put(MASTER_KEY_ID, + KeyRings.TABLE_NAME + "." + KeyRings.MASTER_KEY_ID); + projectionMap.put(USER_ID, + UserIds.TABLE_NAME + "." + UserIds.USER_ID); + + qb.appendWhere(" AND " + + KeyRings.TABLE_NAME + "." + KeyRings.MASTER_KEY_ID + " = "); + qb.appendWhereEscapeString(uri.getPathSegments().get(2)); + break; + } + + case SECRET_KEY_RING_BY_KEY_ID: + case PUBLIC_KEY_RING_BY_KEY_ID: { + qb.setTables(Keys.TABLE_NAME + " AS tmp INNER JOIN " + + KeyRings.TABLE_NAME + " ON (" + + KeyRings.TABLE_NAME + "." + KeyRings._ID + " = " + + "tmp." + Keys.KEY_RING_ID + ")" + + " INNER JOIN " + Keys.TABLE_NAME + " ON " + + "(" + KeyRings.TABLE_NAME + "." + KeyRings._ID + " = " + + Keys.TABLE_NAME + "." + Keys.KEY_RING_ID + " AND " + + Keys.TABLE_NAME + "." + Keys.IS_MASTER_KEY + " = '1'" + + ") " + + " INNER JOIN " + UserIds.TABLE_NAME + " ON " + + "(" + Keys.TABLE_NAME + "." + Keys._ID + " = " + + UserIds.TABLE_NAME + "." + UserIds.KEY_ID + " AND " + + UserIds.TABLE_NAME + "." + UserIds.RANK + " = '0') "); + + projectionMap.put(MASTER_KEY_ID, + KeyRings.TABLE_NAME + "." + KeyRings.MASTER_KEY_ID); + projectionMap.put(USER_ID, + UserIds.TABLE_NAME + "." + UserIds.USER_ID); + + qb.appendWhere(" AND tmp." + Keys.KEY_ID + " = "); + qb.appendWhereEscapeString(uri.getPathSegments().get(3)); + + break; + } + + default: { + throw new IllegalArgumentException("Unknown URI " + uri); + } + } + + qb.setProjectionMap(projectionMap); + + // If no sort order is specified use the default + String orderBy; + if (TextUtils.isEmpty(sortOrder)) { + orderBy = null; + } else { + orderBy = sortOrder; + } + + //System.out.println(qb.buildQuery(projection, selection, selectionArgs, null, null, sortOrder, null).replace("WHERE", "WHERE\n")); + Cursor c = qb.query(mDb.db(), projection, selection, selectionArgs, null, null, orderBy); + + // Tell the cursor what uri to watch, so it knows when its source data changes + c.setNotificationUri(getContext().getContentResolver(), uri); + return c; + } + + @Override + public String getType(Uri uri) { + switch (mUriMatcher.match(uri)) { + case PUBLIC_KEY_RINGS: + return PUBLIC_KEY_RING_CONTENT_DIR_TYPE; + + case PUBLIC_KEY_RING_ID: + return PUBLIC_KEY_RING_CONTENT_ITEM_TYPE; + + case PUBLIC_KEY_RING_BY_KEY_ID: + return PUBLIC_KEY_RING_CONTENT_ITEM_TYPE; + + case PUBLIC_KEY_RING_KEYS: + return PUBLIC_KEY_CONTENT_DIR_TYPE; + + case PUBLIC_KEY_RING_KEY_RANK: + return PUBLIC_KEY_CONTENT_ITEM_TYPE; + + case PUBLIC_KEY_RING_USER_IDS: + return USER_ID_CONTENT_DIR_TYPE; + + case PUBLIC_KEY_RING_USER_ID_RANK: + return USER_ID_CONTENT_ITEM_TYPE; + + case SECRET_KEY_RINGS: + return SECRET_KEY_RING_CONTENT_DIR_TYPE; + + case SECRET_KEY_RING_ID: + return SECRET_KEY_RING_CONTENT_ITEM_TYPE; + + case SECRET_KEY_RING_BY_KEY_ID: + return SECRET_KEY_RING_CONTENT_ITEM_TYPE; + + case SECRET_KEY_RING_KEYS: + return SECRET_KEY_CONTENT_DIR_TYPE; + + case SECRET_KEY_RING_KEY_RANK: + return SECRET_KEY_CONTENT_ITEM_TYPE; + + case SECRET_KEY_RING_USER_IDS: + return USER_ID_CONTENT_DIR_TYPE; + + case SECRET_KEY_RING_USER_ID_RANK: + return USER_ID_CONTENT_ITEM_TYPE; + + default: + throw new IllegalArgumentException("Unknown URI " + uri); + } + } + + @Override + public Uri insert(Uri uri, ContentValues initialValues) { + // not supported + return null; + } + + @Override + public int delete(Uri uri, String where, String[] whereArgs) { + // not supported + return 0; + } + + @Override + public int update(Uri uri, ContentValues values, String where, String[] whereArgs) { + // not supported + return 0; + } +} -- cgit v1.2.3 From 9ad474e95b8d5ddf90353122603ad69b7ad432c7 Mon Sep 17 00:00:00 2001 From: Thialfihar Date: Wed, 2 Jun 2010 19:10:48 +0000 Subject: trivial --- src/org/thialfihar/android/apg/provider/DataProvider.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'src/org/thialfihar/android/apg/provider/DataProvider.java') diff --git a/src/org/thialfihar/android/apg/provider/DataProvider.java b/src/org/thialfihar/android/apg/provider/DataProvider.java index d01fc6c92..8a3fefdff 100644 --- a/src/org/thialfihar/android/apg/provider/DataProvider.java +++ b/src/org/thialfihar/android/apg/provider/DataProvider.java @@ -21,14 +21,9 @@ import java.util.HashMap; import org.thialfihar.android.apg.Id; import android.content.ContentProvider; -import android.content.ContentUris; import android.content.ContentValues; -import android.content.Context; import android.content.UriMatcher; import android.database.Cursor; -import android.database.SQLException; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; import android.text.TextUtils; @@ -119,6 +114,7 @@ public class DataProvider extends ContentProvider { @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { + // TODO: implement the others, then use them for the lists SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); HashMap projectionMap = new HashMap(); int match = mUriMatcher.match(uri); -- cgit v1.2.3