From c1f1681bc000ce4940b853d6b49bb88d51c69237 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Mon, 14 Jan 2013 16:41:32 -0800 Subject: [PATCH] Simplified UUID generation, no more proof text --- .../com/todoroo/astrid/data/RemoteModel.java | 6 -- api/src/com/todoroo/astrid/data/TagData.java | 4 -- api/src/com/todoroo/astrid/data/Task.java | 4 -- api/src/com/todoroo/astrid/data/Update.java | 4 -- .../astrid/actfm/sync/messages/NameMaps.java | 2 - .../astrid/tags/AstridNewSyncMigrator.java | 5 +- .../src/com/todoroo/astrid/dao/Database.java | 3 - .../todoroo/astrid/dao/RemoteModelDao.java | 5 +- .../src/com/todoroo/astrid/dao/TaskDao.java | 1 - .../com/todoroo/astrid/helper/UUIDHelper.java | 72 +------------------ .../astrid/service/StartupService.java | 4 -- .../todoroo/astrid/service/TaskService.java | 2 - .../todoroo/astrid/sync/SyncModelTest.java | 30 +------- 13 files changed, 6 insertions(+), 136 deletions(-) diff --git a/api/src/com/todoroo/astrid/data/RemoteModel.java b/api/src/com/todoroo/astrid/data/RemoteModel.java index 277ead681..2794ccdec 100644 --- a/api/src/com/todoroo/astrid/data/RemoteModel.java +++ b/api/src/com/todoroo/astrid/data/RemoteModel.java @@ -35,12 +35,6 @@ abstract public class RemoteModel extends AbstractModel { /** user json property */ public static final StringProperty USER_JSON_PROPERTY = new StringProperty(null, USER_JSON_PROPERTY_NAME); - /** proof text property name */ - protected static final String PROOF_TEXT_PROPERTY_NAME = "proofText"; //$NON-NLS-1$ - - /** proof text property */ - public static final StringProperty PROOF_TEXT_PROPERTY = new StringProperty(null, PROOF_TEXT_PROPERTY_NAME); - /** pushed at date property name */ public static final String PUSHED_AT_PROPERTY_NAME = "pushedAt"; //$NON-NLS-1$ diff --git a/api/src/com/todoroo/astrid/data/TagData.java b/api/src/com/todoroo/astrid/data/TagData.java index 2468fe0d4..9c50b4d7b 100644 --- a/api/src/com/todoroo/astrid/data/TagData.java +++ b/api/src/com/todoroo/astrid/data/TagData.java @@ -117,10 +117,6 @@ public final class TagData extends RemoteModel { public static final StringProperty TAG_DESCRIPTION = new StringProperty( TABLE, "tagDescription"); - /** UUID proof text */ - public static final StringProperty PROOF_TEXT = new StringProperty( - TABLE, PROOF_TEXT_PROPERTY_NAME); - /** Pushed at date */ public static final LongProperty PUSHED_AT = new LongProperty( TABLE, PUSHED_AT_PROPERTY_NAME); diff --git a/api/src/com/todoroo/astrid/data/Task.java b/api/src/com/todoroo/astrid/data/Task.java index d97826762..b95d380c4 100644 --- a/api/src/com/todoroo/astrid/data/Task.java +++ b/api/src/com/todoroo/astrid/data/Task.java @@ -167,10 +167,6 @@ public final class Task extends RemoteModel { public static final LongProperty LAST_SYNC = new LongProperty( TABLE, "lastSync"); - /** UUID proof text */ - public static final StringProperty PROOF_TEXT = new StringProperty( - TABLE, PROOF_TEXT_PROPERTY_NAME); - /** Pushed at date */ public static final LongProperty PUSHED_AT = new LongProperty( TABLE, PUSHED_AT_PROPERTY_NAME); diff --git a/api/src/com/todoroo/astrid/data/Update.java b/api/src/com/todoroo/astrid/data/Update.java index 46954672d..6f69c6c59 100644 --- a/api/src/com/todoroo/astrid/data/Update.java +++ b/api/src/com/todoroo/astrid/data/Update.java @@ -106,10 +106,6 @@ public class Update extends RemoteModel { public static final LongProperty CREATION_DATE = new LongProperty( TABLE, "created"); - /** UUID proof text */ - public static final StringProperty PROOF_TEXT = new StringProperty( - TABLE, PROOF_TEXT_PROPERTY_NAME); - /** Pushed at date */ public static final LongProperty PUSHED_AT = new LongProperty( TABLE, PUSHED_AT_PROPERTY_NAME); diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/NameMaps.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/NameMaps.java index 97cfffe67..be84ed7fd 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/NameMaps.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/NameMaps.java @@ -88,7 +88,6 @@ public class NameMaps { putPropertyToServerName(Task.USER, "user", TASK_PROPERTIES_LOCAL_TO_SERVER, TASK_COLUMN_NAMES_TO_PROPERTIES, TASK_COLUMNS_LOCAL_TO_SERVER, TASK_PROPERTIES_EXCLUDED, true); putPropertyToServerName(Task.CREATOR_ID, "creator_id", TASK_PROPERTIES_LOCAL_TO_SERVER, TASK_COLUMN_NAMES_TO_PROPERTIES, TASK_COLUMNS_LOCAL_TO_SERVER, TASK_PROPERTIES_EXCLUDED, true); putPropertyToServerName(Task.UUID, "uuid", TASK_PROPERTIES_LOCAL_TO_SERVER, TASK_COLUMN_NAMES_TO_PROPERTIES, TASK_COLUMNS_LOCAL_TO_SERVER, TASK_PROPERTIES_EXCLUDED, true); - putPropertyToServerName(Task.PROOF_TEXT, "proof_text", TASK_PROPERTIES_LOCAL_TO_SERVER, TASK_COLUMN_NAMES_TO_PROPERTIES, TASK_COLUMNS_LOCAL_TO_SERVER, TASK_PROPERTIES_EXCLUDED, false); putPropertyToServerName(Task.PUSHED_AT, "pushed_at", TASK_PROPERTIES_LOCAL_TO_SERVER, TASK_COLUMN_NAMES_TO_PROPERTIES, TASK_COLUMNS_LOCAL_TO_SERVER, TASK_PROPERTIES_EXCLUDED, true); TASK_PROPERTIES_SERVER_TO_LOCAL = AndroidUtilities.reverseMap(TASK_PROPERTIES_LOCAL_TO_SERVER); @@ -116,7 +115,6 @@ public class NameMaps { putPropertyToServerName(TagData.CREATION_DATE, "created_at", TAG_DATA_PROPERTIES_LOCAL_TO_SERVER, TAG_DATA_COLUMN_NAMES_TO_PROPERTIES, TAG_DATA_COLUMNS_LOCAL_TO_SERVER, TAG_PROPERTIES_EXCLUDED, false); putPropertyToServerName(TagData.DELETION_DATE, "deleted_at", TAG_DATA_PROPERTIES_LOCAL_TO_SERVER, TAG_DATA_COLUMN_NAMES_TO_PROPERTIES, TAG_DATA_COLUMNS_LOCAL_TO_SERVER, TAG_PROPERTIES_EXCLUDED, false); putPropertyToServerName(TagData.UUID, "uuid", TAG_DATA_PROPERTIES_LOCAL_TO_SERVER, TAG_DATA_COLUMN_NAMES_TO_PROPERTIES, TAG_DATA_COLUMNS_LOCAL_TO_SERVER, TAG_PROPERTIES_EXCLUDED, true); - putPropertyToServerName(TagData.PROOF_TEXT, "proof_text", TAG_DATA_PROPERTIES_LOCAL_TO_SERVER, TAG_DATA_COLUMN_NAMES_TO_PROPERTIES, TAG_DATA_COLUMNS_LOCAL_TO_SERVER, TAG_PROPERTIES_EXCLUDED, false); putPropertyToServerName(TagData.TAG_ORDERING, "tag_ordering", TAG_DATA_PROPERTIES_LOCAL_TO_SERVER, TAG_DATA_COLUMN_NAMES_TO_PROPERTIES, TAG_DATA_COLUMNS_LOCAL_TO_SERVER, TAG_PROPERTIES_EXCLUDED, false); //TODO: NOT CORRECT putPropertyToServerName(TagData.PUSHED_AT, "pushed_at", TAG_DATA_PROPERTIES_LOCAL_TO_SERVER, TAG_DATA_COLUMN_NAMES_TO_PROPERTIES, TAG_DATA_COLUMNS_LOCAL_TO_SERVER, TAG_PROPERTIES_EXCLUDED, true); diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/AstridNewSyncMigrator.java b/astrid/plugin-src/com/todoroo/astrid/tags/AstridNewSyncMigrator.java index 1890d5ebe..e622b7e4c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/AstridNewSyncMigrator.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/AstridNewSyncMigrator.java @@ -9,7 +9,6 @@ import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.DateUtilities; -import com.todoroo.andlib.utility.Pair; import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; import com.todoroo.astrid.dao.TagDataDao; @@ -150,9 +149,7 @@ public class AstridNewSyncMigrator { instance.readPropertiesFromCursor(cursor); if (!instance.containsNonNullValue(RemoteModel.REMOTE_ID_PROPERTY) || instance.getValue(RemoteModel.REMOTE_ID_PROPERTY) == 0) { // No remote id exists, just create a UUID - Pair uuidPair = UUIDHelper.newUUID(); - instance.setValue(RemoteModel.UUID_PROPERTY, uuidPair.getLeft()); - instance.setValue(RemoteModel.PROOF_TEXT_PROPERTY, uuidPair.getRight()); + instance.setValue(RemoteModel.UUID_PROPERTY, UUIDHelper.newUUID()); } else { // Migrate remote id to uuid field instance.setValue(RemoteModel.UUID_PROPERTY, Long.toString(instance.getValue(RemoteModel.REMOTE_ID_PROPERTY))); diff --git a/astrid/src/com/todoroo/astrid/dao/Database.java b/astrid/src/com/todoroo/astrid/dao/Database.java index bf8e2bfc2..7555731ca 100644 --- a/astrid/src/com/todoroo/astrid/dao/Database.java +++ b/astrid/src/com/todoroo/astrid/dao/Database.java @@ -360,13 +360,10 @@ public class Database extends AbstractDatabase { database.execSQL(createTableSql(visitor, TaskOutstanding.TABLE.name, TaskOutstanding.PROPERTIES)); database.execSQL(createTableSql(visitor, TagOutstanding.TABLE.name, TagOutstanding.PROPERTIES)); - database.execSQL(addColumnSql(Task.TABLE, Task.PROOF_TEXT, visitor, null)); database.execSQL(addColumnSql(Task.TABLE, Task.PUSHED_AT, visitor, null)); database.execSQL(addColumnSql(Task.TABLE, Task.UUID, visitor, null)); - database.execSQL(addColumnSql(TagData.TABLE, TagData.PROOF_TEXT, visitor, null)); database.execSQL(addColumnSql(TagData.TABLE, TagData.PUSHED_AT, visitor, null)); database.execSQL(addColumnSql(TagData.TABLE, TagData.UUID, visitor, null)); - database.execSQL(addColumnSql(Update.TABLE, Update.PROOF_TEXT, visitor, null)); database.execSQL(addColumnSql(Update.TABLE, Update.PUSHED_AT, visitor, null)); database.execSQL(addColumnSql(Update.TABLE, Update.UUID, visitor, null)); database.execSQL(addColumnSql(Update.TABLE, Update.TASK_UUID, visitor, null)); diff --git a/astrid/src/com/todoroo/astrid/dao/RemoteModelDao.java b/astrid/src/com/todoroo/astrid/dao/RemoteModelDao.java index 2d4376f41..ef7d9992a 100644 --- a/astrid/src/com/todoroo/astrid/dao/RemoteModelDao.java +++ b/astrid/src/com/todoroo/astrid/dao/RemoteModelDao.java @@ -1,7 +1,6 @@ package com.todoroo.astrid.dao; import com.todoroo.andlib.data.DatabaseDao; -import com.todoroo.andlib.utility.Pair; import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.helper.UUIDHelper; @@ -23,9 +22,7 @@ public class RemoteModelDao extends DatabaseDao uuidPair = UUIDHelper.newUUID(); - item.setValue(RemoteModel.UUID_PROPERTY, uuidPair.getLeft()); - item.setValue(RemoteModel.PROOF_TEXT_PROPERTY, uuidPair.getRight()); + item.setValue(RemoteModel.UUID_PROPERTY, UUIDHelper.newUUID()); } return super.createNew(item); }; diff --git a/astrid/src/com/todoroo/astrid/dao/TaskDao.java b/astrid/src/com/todoroo/astrid/dao/TaskDao.java index 4b8b05939..9aab29228 100644 --- a/astrid/src/com/todoroo/astrid/dao/TaskDao.java +++ b/astrid/src/com/todoroo/astrid/dao/TaskDao.java @@ -341,7 +341,6 @@ public class TaskDao extends RemoteModelDao { if (existing.getValue(Task.CREATION_DATE).equals(newConflict.getValue(Task.CREATION_DATE))) newConflict.setValue(Task.CREATION_DATE, newConflict.getValue(Task.CREATION_DATE) + 1000L); newConflict.clearValue(Task.UUID); - newConflict.clearValue(Task.PROOF_TEXT); saveExisting(newConflict); } else { delete(newConflict.getId()); diff --git a/astrid/src/com/todoroo/astrid/helper/UUIDHelper.java b/astrid/src/com/todoroo/astrid/helper/UUIDHelper.java index d4bb437af..9b002b91d 100644 --- a/astrid/src/com/todoroo/astrid/helper/UUIDHelper.java +++ b/astrid/src/com/todoroo/astrid/helper/UUIDHelper.java @@ -1,86 +1,20 @@ package com.todoroo.astrid.helper; -import java.security.SecureRandom; import java.util.UUID; -import com.todoroo.andlib.utility.Pair; -import com.todoroo.andlib.utility.Preferences; -import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; - public class UUIDHelper { - private static final String PREF_DEVICE_ID = "pref_device_id"; //$NON-NLS-1$ - - private static final String PREF_LAST_KNOWN_USER = "pref_last_known_user"; //$NON-NLS-1$ - - public static String getDeviceId() { - long lastUser = Preferences.getLong(PREF_LAST_KNOWN_USER, 0); - long currentUser = ActFmPreferenceService.userId(); - if (currentUser > 0 && lastUser > 0 && currentUser != lastUser) { // User has changed - Preferences.clear(PREF_DEVICE_ID); - Preferences.setLong(PREF_LAST_KNOWN_USER, currentUser); - } else if (currentUser > 0 && lastUser <= 0) { - Preferences.setLong(PREF_LAST_KNOWN_USER, currentUser); - } - - String saved = Preferences.getStringValue(PREF_DEVICE_ID); - if (saved != null) - return saved; - - saved = UUID.randomUUID().toString(); - Preferences.setString(PREF_DEVICE_ID, saved); - return saved; - } - - private static final SecureRandom RANDOM = new SecureRandom(); private static final long MIN_UUID = 100000000; /** * @return a pair consisting of the newly * generated uuid and the corresponding proof text */ - public static Pair newUUID() { + public static String newUUID() { long uuid = 0; - String proofText = ""; //$NON-NLS-1$ do { - String hexDigits = "0123456789abcdef"; //$NON-NLS-1$ - char[] chars = new char[80]; - for (int i = 0; i < chars.length; i++) { - chars[i] = hexDigits.charAt(RANDOM.nextInt(hexDigits.length())); - } - String s = new String(chars); - String d = getDeviceId(); - - proofText = d + "," + s; //$NON-NLS-1$ - uuid = bcryptToLong(proofText); + uuid = UUID.randomUUID().getLeastSignificantBits() & 0x7fffffffffffffffL;; } while (uuid < MIN_UUID); - return Pair.create(Long.toString(uuid), proofText); + return Long.toString(uuid); } - - private static final String SALT = "$2a$10$2RHhxhKaPb4VXlQUJyBU/O"; //$NON-NLS-1$ - private static final String BASE_64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./"; //$NON-NLS-1$ - - - private static long bcryptToLong(String proofText) { - String a = BCrypt.hashpw(proofText, SALT); - int start = 29; - int endPlusOne = 60; - String b = a.substring(start, endPlusOne); - long result = 1; - for (int i = 0; i < b.length(); i++) { - result = 31 * result + iOf(b.charAt(i)); - } - - return result; - } - - @SuppressWarnings("nls") - private static int iOf(char c) { - int index = BASE_64_CHARS.indexOf(c); - if (index < 0) - throw new RuntimeException("Base64Chars is wrong! No character " + c + " found. Probably needs to be replaces with something else"); - return index; - - } - } diff --git a/astrid/src/com/todoroo/astrid/service/StartupService.java b/astrid/src/com/todoroo/astrid/service/StartupService.java index 160698c4a..b34c7f91a 100644 --- a/astrid/src/com/todoroo/astrid/service/StartupService.java +++ b/astrid/src/com/todoroo/astrid/service/StartupService.java @@ -55,7 +55,6 @@ import com.todoroo.astrid.gcal.CalendarStartupReceiver; import com.todoroo.astrid.gtasks.GtasksMetadata; import com.todoroo.astrid.gtasks.GtasksPreferenceService; import com.todoroo.astrid.gtasks.sync.GtasksSyncService; -import com.todoroo.astrid.helper.UUIDHelper; import com.todoroo.astrid.opencrx.OpencrxCoreUtils; import com.todoroo.astrid.producteev.ProducteevUtilities; import com.todoroo.astrid.reminders.ReengagementService; @@ -158,9 +157,6 @@ public class StartupService { Toast.makeText(context, R.string.TLA_notification_volume_low, Toast.LENGTH_LONG).show(); } - // Initializes the device id - UUIDHelper.getDeviceId(); - // read current version int latestSetVersion = 0; try { diff --git a/astrid/src/com/todoroo/astrid/service/TaskService.java b/astrid/src/com/todoroo/astrid/service/TaskService.java index bf5250796..b65927ba8 100644 --- a/astrid/src/com/todoroo/astrid/service/TaskService.java +++ b/astrid/src/com/todoroo/astrid/service/TaskService.java @@ -172,7 +172,6 @@ public class TaskService { return new Task(); newTask.clearValue(Task.ID); newTask.clearValue(Task.UUID); - newTask.clearValue(Task.PROOF_TEXT); TodorooCursor cursor = metadataDao.query( Query.select(Metadata.PROPERTIES).where(MetadataCriteria.byTask(task.getId()))); try { @@ -216,7 +215,6 @@ public class TaskService { return new Task(); newTask.clearValue(Task.ID); newTask.clearValue(Task.UUID); - newTask.clearValue(Task.PROOF_TEXT); newTask.clearValue(Task.USER); newTask.clearValue(Task.USER_ID); diff --git a/tests-sync/src/com/todoroo/astrid/sync/SyncModelTest.java b/tests-sync/src/com/todoroo/astrid/sync/SyncModelTest.java index bd2d35e37..12025a5d1 100644 --- a/tests-sync/src/com/todoroo/astrid/sync/SyncModelTest.java +++ b/tests-sync/src/com/todoroo/astrid/sync/SyncModelTest.java @@ -17,39 +17,11 @@ public class SyncModelTest extends NewSyncTestCase { public void testCreateTaskMakesUuid() { Task task = createTask(); assertFalse(RemoteModel.NO_UUID.equals(task.getValue(Task.UUID))); - assertFalse(TextUtils.isEmpty(task.getValue(Task.PROOF_TEXT))); } public void testCreateTagMakesUuid() { TagData tag = createTagData(); - assertFalse(RemoteModel.NO_UUID.equals(tag.getValue(TagData.UUID))); - assertFalse(TextUtils.isEmpty(tag.getValue(TagData.PROOF_TEXT))); - } - - public void testCreateTaskMakesOutstandingProofText() { - Task task = createTask(); - TodorooCursor cursor = taskOutstandingDao.query( - Query.select(TaskOutstanding.PROPERTIES) - .where(Criterion.and(TaskOutstanding.TASK_ID.eq(task.getId()), - TaskOutstanding.COLUMN_STRING.eq(RemoteModel.PROOF_TEXT_PROPERTY.name)))); - try { - assertTrue(cursor.getCount() > 0); - } finally { - cursor.close(); - } - } - - public void testCreateTagMakesOutstandingProofText() { - TagData tag = createTagData(); - TodorooCursor cursor = tagOutstandingDao.query( - Query.select(TagOutstanding.PROPERTIES) - .where(Criterion.and(TagOutstanding.TAG_DATA_ID.eq(tag.getId()), - TagOutstanding.COLUMN_STRING.eq(RemoteModel.PROOF_TEXT_PROPERTY.name)))); - try { - assertTrue(cursor.getCount() > 0); - } finally { - cursor.close(); - } + assertFalse(RemoteModel.NO_UUID.equals(tag.getValue(TagData.UUID))); } public void testChangeTaskMakesOutstandingEntries() {