diff --git a/APP/app/src/androidTest/java/javinator9889/securepass/DatabaseTest.java b/APP/app/src/androidTest/java/javinator9889/securepass/DatabaseTest.java new file mode 100644 index 0000000..3d19f41 --- /dev/null +++ b/APP/app/src/androidTest/java/javinator9889/securepass/DatabaseTest.java @@ -0,0 +1,88 @@ +package javinator9889.securepass; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.Arrays; +import java.util.Map; + +import javinator9889.securepass.io.database.DatabaseManager; +import javinator9889.securepass.io.database.DatabaseOperations; + +/** + * Created by Javinator9889 on 20/05/2018. + */ +@RunWith(AndroidJUnit4.class) +public class DatabaseTest { + private Context context = InstrumentationRegistry.getTargetContext(); + + private DatabaseOperations op; + + @Before + public void initParams() { + DatabaseManager manager = DatabaseManager.newInstance(context, "1234"); + this.op = DatabaseOperations.newInstance(manager); + } + + @Test + public void insertIntoDB() { + long defaultCategoryId = op.registerDefaultCategory(); + long newAccountId = op.registerNewAccount("cuenta", "password", + "icono", "descripciĆ³n", defaultCategoryId); + long newCategoryId = op.registerNewCategory("cat2"); + long newQRCodeId = op.registerQRCode(newAccountId, "qr1", "desc", + "1234"); + long newSecurityCodeId = op.registerNewSecurityCodeSource("sec1"); + long newFieldForSecCodeId = op.registerNewFieldForSecurityCodeSource("12345", + false, + newSecurityCodeId); + op.updateInformationForCategory("cat3", newCategoryId); + op.updateInformationForEntry("cuent", "pass", "icon", + "desc", newCategoryId, newAccountId); + op.updateInformationForQRCode(newAccountId, "qr1,2", "descq", "data", + newQRCodeId); + op.updateInformationForSecurityCode("secCode", newSecurityCodeId); + op.updateInformationForField("12321", true, newFieldForSecCodeId, + newSecurityCodeId); + printer(); + op.registerNewAccount("cuenta", "password", "icono", + "descripciĆ³n", defaultCategoryId); + op.registerNewCategory("cat2"); + op.registerQRCode(newAccountId, "qr1", "desc", + "1234"); + op.registerNewSecurityCodeSource("sec1"); + op.registerNewFieldForSecurityCodeSource("12345",false, + newSecurityCodeId); + printer(); + op.deleteCategory(newCategoryId); + op.deleteAccount(newAccountId); + op.deleteQRCode(newQRCodeId); + op.deleteSecurityCode(newSecurityCodeId); + op.deleteField(newFieldForSecCodeId); + printer(); + } + + private void printer() { + for (Map objectMap : op.getAllCategories()) + System.out.println(objectMap); + for (Map objectMap : op.getAllEntries()) + System.out.println(objectMap); + for (Map objectMap : op.getAllQRCodes()) + System.out.println(objectMap); + for (Map objectMap : op.getAllSecurityCodes()) + System.out.println(objectMap); + for (Map objectMap : op.getAllFields()) + System.out.println(objectMap); + } + + @After + public void closeConnection() { + op.finishConnection(); + } +} diff --git a/APP/app/src/main/java/javinator9889/securepass/backup/GoogleDriveActivity.java b/APP/app/src/main/java/javinator9889/securepass/backup/GoogleDriveActivity.java deleted file mode 100644 index dc7a7f3..0000000 --- a/APP/app/src/main/java/javinator9889/securepass/backup/GoogleDriveActivity.java +++ /dev/null @@ -1,86 +0,0 @@ -package javinator9889.securepass.backup; - -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.util.Log; -import android.widget.Toast; - -import com.google.android.gms.auth.api.signin.GoogleSignIn; -import com.google.android.gms.auth.api.signin.GoogleSignInClient; -import com.google.android.gms.auth.api.signin.GoogleSignInOptions; -import com.google.android.gms.drive.Drive; -import com.google.android.gms.drive.DriveClient; -import com.google.android.gms.drive.DriveResourceClient; - -import javinator9889.securepass.R; - -/** - * Created by Javinator9889 on 22/04/2018. - */ -public class GoogleDriveActivity extends AppCompatActivity { - private static final String TAG = "drive-quickstart"; - private static final int REQUEST_CODE_SIGN_IN = 0; - private static final int REQUEST_CODE_CAPTURE_IMAGE = 1; - private static final int REQUEST_CODE_CREATOR = 2; - - private GoogleSignInClient mGoogleSignInClient; - private DriveClient mDriveClient; - private DriveResourceClient mDriveResourceClient; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.drive_client); - mGoogleSignInClient = buildGoogleSignInClient(); - Toast.makeText(this, "SignIn obtained", Toast.LENGTH_LONG).show(); - startActivityForResult(mGoogleSignInClient.getSignInIntent(), REQUEST_CODE_SIGN_IN); - } - - private GoogleSignInClient buildGoogleSignInClient() { - GoogleSignInOptions signInOptions = - new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) - .requestScopes(Drive.SCOPE_FILE) - .build(); - return GoogleSignIn.getClient(this, signInOptions); - } - - @Override - protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { - Toast.makeText(this, "Paso 1", Toast.LENGTH_LONG).show(); - super.onActivityResult(requestCode, resultCode, data); - switch (requestCode) { - case REQUEST_CODE_SIGN_IN: - Toast.makeText(this, "Paso 2", Toast.LENGTH_LONG).show(); - Log.i(TAG, "Sign in request code"); - // Called after user is signed in. - if (resultCode == RESULT_OK) { - Toast.makeText(this, "Paso 3", Toast.LENGTH_LONG).show(); - Log.i(TAG, "Signed in successfully."); - // Use the last signed in account here since it already have a Drive scope. - mDriveClient = Drive.getDriveClient(this, GoogleSignIn.getLastSignedInAccount(this)); - // Build a drive resource client. - mDriveResourceClient = - Drive.getDriveResourceClient(this, GoogleSignIn.getLastSignedInAccount(this)); - Toast.makeText(this, "Paso 4", Toast.LENGTH_LONG).show(); - // Start camera. - } - break; - case REQUEST_CODE_CAPTURE_IMAGE: - Log.i(TAG, "capture image request code"); - // Called after a photo has been taken. - if (resultCode == Activity.RESULT_OK) { - - } - break; - case REQUEST_CODE_CREATOR: - Log.i(TAG, "creator request code"); - // Called after a file is saved to Drive. - if (resultCode == RESULT_OK) { - - } - break; - } - } -} diff --git a/APP/app/src/main/java/javinator9889/securepass/data/container/ClassContainer.java b/APP/app/src/main/java/javinator9889/securepass/data/container/ClassContainer.java index ced9bec..1ddd6c4 100644 --- a/APP/app/src/main/java/javinator9889/securepass/data/container/ClassContainer.java +++ b/APP/app/src/main/java/javinator9889/securepass/data/container/ClassContainer.java @@ -81,17 +81,18 @@ public void storeDataInDB() { entry.getAccountPassword(), entry.getIcon(), entry.getDescription(), - entry.getCategory()); + entry.getCategory().getId()); for (QRCode qrCode : qrCodes) operations.registerQRCode( - qrCode.getEntry(), + qrCode.getEntry().getId(), qrCode.getName(), qrCode.getDescription(), qrCode.getQrData()); for (SecurityCode code : securityCodes) - operations.registerNewSecurityCodeSource(code); + operations.registerNewSecurityCodeSource(code.getAccountName()); for (Field field : fields) - operations.registerNewFieldForSecurityCodeSource(field); + operations.registerNewFieldForSecurityCodeSource(field.getCode(), field.isCodeUsed(), + field.getSecurityCodeID()); operations.finishConnection(); } diff --git a/APP/app/src/main/java/javinator9889/securepass/io/IOManager.java b/APP/app/src/main/java/javinator9889/securepass/io/IOManager.java index 49fa854..2c64701 100644 --- a/APP/app/src/main/java/javinator9889/securepass/io/IOManager.java +++ b/APP/app/src/main/java/javinator9889/securepass/io/IOManager.java @@ -16,6 +16,8 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; +import java.util.ArrayList; +import java.util.List; import javinator9889.securepass.R; import javinator9889.securepass.util.cipher.PasswordCipher; @@ -28,14 +30,11 @@ public class IOManager { private Context activityContext; - private InputStream sqlScriptInputFile; - private File filesDir; + private File filesCache; private IOManager(@NonNull Context activityContext) { this.activityContext = activityContext; - this.filesDir = activityContext.getFilesDir(); - int sqlScript = R.raw.database_script; - this.sqlScriptInputFile = activityContext.getResources().openRawResource(sqlScript); + this.filesCache = activityContext.getCacheDir(); } @NonNull @@ -43,14 +42,22 @@ public static IOManager newInstance(Context activityContext) { return new IOManager(activityContext); } - public String loadSQLScript() throws IOException { - BufferedReader sqlStringsInFile = new BufferedReader( - new InputStreamReader(sqlScriptInputFile)); - StringBuilder completeFileRead = new StringBuilder(); - String currentLine; - while ((currentLine = sqlStringsInFile.readLine()) != null) - completeFileRead.append(currentLine).append("\n"); - return completeFileRead.toString(); + public List loadSQLScript() throws IOException { + List result = new ArrayList<>(5); + int[] sqlScripts = new int[]{R.raw.create_category, R.raw.create_entry, R.raw.create_qrcode, + R.raw.create_security_code, R.raw.create_field}; + for (int sqlScript : sqlScripts) { + InputStream sqlScriptInputFile = this.activityContext.getResources() + .openRawResource(sqlScript); + StringBuilder builder = new StringBuilder(); + BufferedReader sqlStringsInFile = new BufferedReader( + new InputStreamReader(sqlScriptInputFile)); + String currentLine; + while ((currentLine = sqlStringsInFile.readLine()) != null) + builder.append(currentLine).append("\n"); + result.add(builder.toString()); + } + return result; } public void storePassword(@NonNull String userPassword) { @@ -65,7 +72,7 @@ public String readPassword() { } public void writeDownloadedClass(@NonNull InputStream from) { - String filename = filesDir.getAbsolutePath() + "/class.bck"; + String filename = filesCache.getAbsolutePath() + "/class.bck"; try { OutputStream to = new FileOutputStream(filename); IOUtils.copyStream(from, to); @@ -76,7 +83,7 @@ public void writeDownloadedClass(@NonNull InputStream from) { } public InputStream readDownloadedClass() { - String filename = filesDir.getAbsolutePath() + "/class.bck"; + String filename = filesCache.getAbsolutePath() + "/class.bck"; try { return new FileInputStream(filename); } catch (FileNotFoundException e) { @@ -86,7 +93,7 @@ public InputStream readDownloadedClass() { } public void deleteDownloadedClass() { - String filename = filesDir.getAbsolutePath() + "/class.bck"; + String filename = filesCache.getAbsolutePath() + "/class.bck"; File fileToDelete = new File(filename); if (!fileToDelete.delete()) diff --git a/APP/app/src/main/java/javinator9889/securepass/io/database/DatabaseManager.java b/APP/app/src/main/java/javinator9889/securepass/io/database/DatabaseManager.java index 141843b..b776d65 100644 --- a/APP/app/src/main/java/javinator9889/securepass/io/database/DatabaseManager.java +++ b/APP/app/src/main/java/javinator9889/securepass/io/database/DatabaseManager.java @@ -8,6 +8,7 @@ import java.io.File; import java.io.IOException; +import java.util.List; import javinator9889.securepass.io.IOManager; import javinator9889.securepass.util.resources.ISharedPreferencesManager; @@ -45,31 +46,32 @@ private void initDB() { @Override public void run() { SQLiteDatabase.loadLibs(databaseContext); - File tempDatabaseFile = databaseContext.getDatabasePath(Constants.SQL.DB_FILENAME); + databaseFile = databaseContext + .getDatabasePath(Constants.SQL.DB_FILENAME); try { - tempDatabaseFile.createNewFile(); + databaseFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } - //tempDatabaseFile.mkdirs(); SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase( - tempDatabaseFile, + databaseFile, databasePassword, null); - String databaseScript; + List databaseScripts; ISharedPreferencesManager preferencesManager = SharedPreferencesManager .newInstance(); try { if (!preferencesManager.isDatabaseInitialized()) { - databaseScript = IOManager.newInstance(databaseContext).loadSQLScript(); - database.execSQL(databaseScript); - database.execSQL(Constants.SQL.DB_DEFAULT_CATEGORY, new Object[]{"Global"}); + databaseScripts = IOManager.newInstance(databaseContext).loadSQLScript(); + for (String script : databaseScripts) { + database.execSQL(script); + } + DatabaseManager.this.createDefaultCategory(); } } catch (IOException e) { throw new RuntimeException(e.getCause()); } finally { database.close(); - DatabaseManager.this.databaseFile = tempDatabaseFile; } } }); @@ -88,7 +90,6 @@ public Thread getDatabaseInitializer() { } private class ThreadExceptionHandler implements Thread.UncaughtExceptionHandler { - @Override public void uncaughtException(Thread t, Throwable e) { Log.e(t.getName(), "Exception in thread \"" + t.getName() + "\" with " + @@ -96,4 +97,11 @@ public void uncaughtException(Thread t, Throwable e) { e.printStackTrace(); } } + + private void createDefaultCategory() { + DatabaseOperations operations = DatabaseOperations.newInstance(this); + long id = operations.registerDefaultCategory(); + Log.d("DB", "Category ID: " + id); + operations.finishConnection(); + } } diff --git a/APP/app/src/main/java/javinator9889/securepass/io/database/DatabaseOperations.java b/APP/app/src/main/java/javinator9889/securepass/io/database/DatabaseOperations.java index f988fe7..ef601d9 100644 --- a/APP/app/src/main/java/javinator9889/securepass/io/database/DatabaseOperations.java +++ b/APP/app/src/main/java/javinator9889/securepass/io/database/DatabaseOperations.java @@ -1,5 +1,6 @@ package javinator9889.securepass.io.database; +import android.content.ContentValues; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.Log; @@ -8,14 +9,12 @@ import net.sqlcipher.database.SQLiteDatabase; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; -import javinator9889.securepass.data.entry.Category; -import javinator9889.securepass.data.entry.Entry; -import javinator9889.securepass.data.entry.QRCode; -import javinator9889.securepass.data.secret.Field; -import javinator9889.securepass.data.secret.SecurityCode; import javinator9889.securepass.util.values.Constants.SQL; +import javinator9889.securepass.util.values.DatabaseTables; /** * Created by Javinator9889 on 29/03/2018. @@ -38,197 +37,318 @@ public static DatabaseOperations newInstance(DatabaseManager databaseManagerInst return new DatabaseOperations(databaseManagerInstance); } - public void registerNewAccount(@NonNull String accountName, @NonNull String accountPassword, + public long registerDefaultCategory() { +// ContentValues params = setParams(DatabaseTables.CATEGORY, "Global"); + ContentValues params = new ContentValues(); + params.put(SQL.CATEGORY.C_ID, 1); + params.put(SQL.CATEGORY.C_NAME, "Global"); + return database.insertWithOnConflict(SQL.CATEGORY.NAME, null, params, + SQLiteDatabase.CONFLICT_IGNORE); + } + + public long registerNewAccount(@NonNull String accountName, @NonNull String accountPassword, @NonNull String icon, @Nullable String description, - @NonNull Category entryCategory) { - Object[] params = new Object[]{ + long entryParentCategoryId) { + ContentValues params = setParams(DatabaseTables.ENTRY, accountName, accountPassword, icon, + description, entryParentCategoryId); + return database.insert(SQL.ENTRY.NAME, null, params); + } + + public long registerNewCategory(@NonNull String name) { + ContentValues params = setParams(DatabaseTables.CATEGORY, name); + return database.insert(SQL.CATEGORY.NAME, null, params); + } + + public long registerQRCode(long sourceEntryId, @NonNull String name, + @Nullable String description, @NonNull String qrData) { + ContentValues params = setParams(DatabaseTables.QR_CODE, name, description, qrData, + sourceEntryId); + return database.insert(SQL.QR_CODE.NAME, null, params); + } + + public long registerNewSecurityCodeSource(@NonNull String securityCodeName) { + ContentValues params = setParams(DatabaseTables.SECURITY_CODE, + securityCodeName); + return database.insert(SQL.SECURITY_CODE.NAME, null, params); + } + + public long registerNewFieldForSecurityCodeSource(@NonNull String fieldCode, + boolean isCodeUsed, + long parentSecurityCodeId) { + ContentValues params = setParams(DatabaseTables.FIELD, + fieldCode, isCodeUsed, parentSecurityCodeId); + return database.insert(SQL.FIELD.NAME, null, params); + } + + public void deleteAccount(long accountID) { + String[] selectionArgs = setSelectionArgs(accountID); + database.delete(SQL.ENTRY.NAME, SQL.DB_DELETE_ENTRY_WHERE_CLAUSE, selectionArgs); + } + + public void deleteCategory(long categoryID) { + String[] selectionArgs = setSelectionArgs(categoryID); + ContentValues entryUpdatedValues = new ContentValues(); + entryUpdatedValues.put(SQL.ENTRY.E_PARENT_CATEGORY, 0); + database.update( + SQL.ENTRY.NAME, entryUpdatedValues, + SQL.DB_UPDATE_FOR_DELETED_CATEGORY_WHERE_CLAUSE, + selectionArgs); + database.delete(SQL.CATEGORY.NAME, SQL.DB_DELETE_CATEGORY_WHERE_CLAUSE, selectionArgs); + } + + public void deleteQRCode(long qrID) { + String[] selectionArgs = setSelectionArgs(qrID); + database.delete(SQL.QR_CODE.NAME, SQL.DB_DELETE_QR_CODE_WHERE_CLAUSE, selectionArgs); + } + + public void deleteSecurityCode(long securityCodeID) { + String[] selectionArgs = setSelectionArgs(securityCodeID); + database.delete(SQL.FIELD.NAME, + SQL.DB_DELETE_FIELD_FROM_SECURITY_CODE_WHERE_CLAUSE, selectionArgs); + database.delete(SQL.SECURITY_CODE.NAME, SQL.DB_DELETE_SECURITY_CODE_WHERE_CLAUSE, + selectionArgs); + } + + public void deleteField(long fieldCodeID) { + String[] selectionArgs = setSelectionArgs(fieldCodeID); + database.delete(SQL.FIELD.NAME, SQL.DB_DELETE_FIELD_WHERE_CLAUSE, selectionArgs); + } + + public void updateInformationForEntry(@NonNull String accountName, + @NonNull String accountPassword, + @NonNull String icon, + @Nullable String description, + long parentEntryCategoryId, + long entryId) { + ContentValues params = setParams(DatabaseTables.ENTRY, accountName, accountPassword, icon, description, - entryCategory.getId() - }; - database.execSQL(SQL.DB_NEW_ENTRY, params); + parentEntryCategoryId); + String[] selectionArgs = setSelectionArgs(entryId); + database.update(SQL.ENTRY.NAME, params, SQL.DB_UPDATE_ENTRY_WHERE_CLAUSE, selectionArgs); } - public void registerNewCategory(@NonNull String name) { - Object[] params = new Object[]{name}; - database.execSQL(SQL.DB_NEW_CATEGORY, params); + public void updateInformationForCategory(@NonNull String categoryName, long categoryId) { + ContentValues params = setParams(DatabaseTables.CATEGORY, categoryName); + String[] selectionArgs = setSelectionArgs(categoryId); + database.update(SQL.CATEGORY.NAME, params, SQL.DB_UPDATE_CATEGORY_WHERE_CLAUSE, + selectionArgs); } - public void registerQRCode(@NonNull Entry sourceEntry, @NonNull String name, - @Nullable String description, @NonNull String qrData) { - Object[] params = new Object[]{ - name, + public void updateInformationForQRCode(long sourceEntryId, @NonNull String name, + @Nullable String description, @NonNull String qrData, + long qrCodeId) { + ContentValues params = setParams(DatabaseTables.QR_CODE, name, description, qrData, - sourceEntry.getId() - }; - database.execSQL(SQL.DB_NEW_QR, params); + sourceEntryId); + String[] selectionArgs = setSelectionArgs(qrCodeId); + database.update(SQL.QR_CODE.NAME, params, SQL.DB_UPDATE_QR_CODE_WHERE_CLAUSE, + selectionArgs); + } + + public void updateInformationForSecurityCode(@NonNull String newSecurityCodeName, + long securityCodeId) { + ContentValues params = setParams(DatabaseTables.SECURITY_CODE, + newSecurityCodeName); + String[] selectionArgs = setSelectionArgs(securityCodeId); + database.update(SQL.SECURITY_CODE.NAME, params, SQL.DB_UPDATE_SECURITY_CODE_WHERE_CLAUSE, + selectionArgs); + } + + public void updateInformationForField(@NonNull String newFieldCode, + boolean isCodeUsed, + long fieldId, long securityCodeId) { + ContentValues params = setParams(DatabaseTables.FIELD, newFieldCode, + isCodeUsed, securityCodeId); + String[] selectionArgs = setSelectionArgs(fieldId); + database.update(SQL.FIELD.NAME, params, SQL.DB_UPDATE_FIELD_WHERE_CLAUSE, selectionArgs); } - public void registerNewSecurityCodeSource(@NonNull SecurityCode securityCodeSource) { - Object[] params = new Object[]{ - securityCodeSource.getAccountName() - }; - database.execSQL(SQL.DB_NEW_SECURITY_CODE, params); - } - - public void registerNewFieldForSecurityCodeSource(@NonNull Field newField) { - Object[] params = new Object[]{ - newField.getCode(), - newField.isCodeUsed(), - newField.getSecurityCodeID() - }; - database.execSQL(SQL.DB_NEW_FIELD, params); - } - - public void deleteAccount(int accountID) { - Object[] params = new Object[]{accountID}; - database.execSQL(SQL.DB_DELETE_ENTRY, params); - } - - public void deleteCategory(int categoryID) { - Object[] params = new Object[]{categoryID}; - database.execSQL(SQL.DB_UPDATE_FOR_DELETED_CATEGORY, params); - database.execSQL(SQL.DB_DELETE_CATEGORY, params); - } - - public void deleteQRCode(int qrID) { - Object[] params = new Object[]{qrID}; - database.execSQL(SQL.DB_DELETE_QR_CODE, params); - } - - public void deleteSecurityCode(int securityCodeID) { - Object[] params = new Object[]{securityCodeID}; - database.execSQL(SQL.DB_DELETE_FIELD_FROM_SECURITY_CODE, params); - database.execSQL(SQL.DB_DELETE_SECURITY_CODE, params); - } - - public void deleteField(@NonNull String fieldCode) { - Object[] params = new Object[]{fieldCode}; - database.execSQL(SQL.DB_DELETE_FIELD, params); - } - - public void updateInformationForEntry(@NonNull Entry modifiedEntry) { - Object[] params = new Object[]{ - modifiedEntry.getAccountName(), - modifiedEntry.getAccountPassword(), - modifiedEntry.getIcon(), - modifiedEntry.getDescription(), - modifiedEntry.getCategory().getId(), - modifiedEntry.getId() - }; - database.execSQL(SQL.DB_UPDATE_ENTRY, params); - } - - public void updateInformationForCategory(@NonNull Category modifiedCategory) { - Object[] params = new Object[]{ - modifiedCategory.getName(), - modifiedCategory.getId() - }; - database.execSQL(SQL.DB_UPDATE_CATEGORY, params); - } - - public void updateInformationForQRCode(@NonNull QRCode modifiedQRCode) { - Object[] params = new Object[]{ - modifiedQRCode.getName(), - modifiedQRCode.getDescription(), - modifiedQRCode.getQrData(), - modifiedQRCode.getEntry().getId(), - modifiedQRCode.getId() - }; - database.execSQL(SQL.DB_UPDATE_QR_CODE, params); - } - - public void updateInformationForSecurityCode(@NonNull SecurityCode modifiedSecurityCode) { - Object[] params = new Object[]{ - modifiedSecurityCode.getAccountName(), - modifiedSecurityCode.getId() - }; - database.execSQL(SQL.DB_UPDATE_SECURITY_CODE, params); - } - - public void updateInformationForField(@NonNull Field modifiedField) { - Object[] params = new Object[]{ - modifiedField.getCode(), - modifiedField.isCodeUsed(), - modifiedField.getId() - }; - database.execSQL(SQL.DB_UPDATE_FIELD, params); - } - - private String[] loadDataIntoArray(Cursor sourceData) { - int numberOfColumns = sourceData.getColumnCount(); - String[] currentData = new String[numberOfColumns]; - for (int i = 0; i < numberOfColumns; ++i) { - switch (sourceData.getType(i)) { - case Cursor.FIELD_TYPE_INTEGER: - currentData[i] = String.valueOf(sourceData.getInt(i)); - break; - default: - currentData[i] = sourceData.getString(i); - break; - } + private Map getValuesFromCursor(Cursor sourceData, DatabaseTables type) { + Map result = new HashMap<>(); + switch (type) { + case CATEGORY: + long categoryId = sourceData.getLong( + sourceData.getColumnIndexOrThrow(SQL.CATEGORY.C_ID)); + String categoryName = sourceData.getString( + sourceData.getColumnIndexOrThrow(SQL.CATEGORY.C_NAME)); + result.put(SQL.CATEGORY.C_ID, categoryId); + result.put(SQL.CATEGORY.C_NAME, categoryName); + return result; + case ENTRY: + long entryId = sourceData.getLong( + sourceData.getColumnIndexOrThrow(SQL.ENTRY.E_ID)); + String entryName = sourceData.getString( + sourceData.getColumnIndexOrThrow(SQL.ENTRY.E_ACCOUNT) + ); + String entryPassword = sourceData.getString( + sourceData.getColumnIndexOrThrow(SQL.ENTRY.E_PASSWORD) + ); + String entryDescription = sourceData.getString( + sourceData.getColumnIndexOrThrow(SQL.ENTRY.E_DESCRIPTION) + ); + String entryIcon = sourceData.getString( + sourceData.getColumnIndexOrThrow(SQL.ENTRY.E_ICON) + ); + String entryParentCategory = sourceData.getString( + sourceData + .getColumnIndexOrThrow(SQL.ENTRY.E_PARENT_CATEGORY) + ); + result.put(SQL.ENTRY.E_ID, entryId); + result.put(SQL.ENTRY.E_ACCOUNT, entryName); + result.put(SQL.ENTRY.E_PASSWORD, entryPassword); + result.put(SQL.ENTRY.E_DESCRIPTION, entryDescription); + result.put(SQL.ENTRY.E_ICON, entryIcon); + result.put(SQL.ENTRY.E_PARENT_CATEGORY, entryParentCategory); + return result; + case QR_CODE: + long qrCodeId = sourceData.getLong( + sourceData.getColumnIndexOrThrow(SQL.QR_CODE.Q_ID) + ); + String qrCodeName = sourceData.getString( + sourceData.getColumnIndexOrThrow(SQL.QR_CODE.Q_NAME) + ); + String qrCodeData = sourceData.getString( + sourceData.getColumnIndexOrThrow(SQL.QR_CODE.Q_DATA) + ); + String qrCodeDescription = sourceData.getString( + sourceData + .getColumnIndexOrThrow(SQL.QR_CODE.Q_DESCRIPTION) + ); + long qrCodeParentEntryId = sourceData.getLong( + sourceData.getColumnIndexOrThrow(SQL.QR_CODE.Q_PARENT_ENTRY) + ); + result.put(SQL.QR_CODE.Q_ID, qrCodeId); + result.put(SQL.QR_CODE.Q_NAME, qrCodeName); + result.put(SQL.QR_CODE.Q_DATA, qrCodeData); + result.put(SQL.QR_CODE.Q_DESCRIPTION, qrCodeDescription); + result.put(SQL.QR_CODE.Q_PARENT_ENTRY, qrCodeParentEntryId); + return result; + case SECURITY_CODE: + long securityCodeId = sourceData.getLong( + sourceData.getColumnIndexOrThrow(SQL.SECURITY_CODE.S_ID) + ); + String securityCodeName = sourceData.getString( + sourceData.getColumnIndexOrThrow(SQL.SECURITY_CODE.S_ACCOUNT_NAME) + ); + result.put(SQL.SECURITY_CODE.S_ID, securityCodeId); + result.put(SQL.SECURITY_CODE.S_ACCOUNT_NAME, securityCodeName); + return result; + case FIELD: + long fieldId = sourceData.getLong( + sourceData.getColumnIndexOrThrow(SQL.FIELD.F_ID) + ); + String fieldCode = sourceData.getString( + sourceData.getColumnIndexOrThrow(SQL.FIELD.F_CODE) + ); + boolean isFieldUsed = sourceData.getInt( + sourceData.getColumnIndexOrThrow(SQL.FIELD.F_USED) + ) == 1; + long fieldParentSecurityCode = sourceData.getLong( + sourceData.getColumnIndexOrThrow(SQL.FIELD.F_PARENT_SECURITY_CODE) + ); + result.put(SQL.FIELD.F_ID, fieldId); + result.put(SQL.FIELD.F_CODE, fieldCode); + result.put(SQL.FIELD.F_USED, isFieldUsed); + result.put(SQL.FIELD.F_PARENT_SECURITY_CODE, fieldParentSecurityCode); + return result; + default: + return result; } - return currentData; } - public List getAllCategories() { - Cursor categoriesCursor = database.rawQuery(SQL.DB_SELECT_CATEGORIES, null); - List categoriesList = new ArrayList<>(); - if (categoriesCursor.moveToFirst()) { - do { - categoriesList.add(loadDataIntoArray(categoriesCursor)); - } while (categoriesCursor.moveToNext()); + public List> getAllCategories() { + String sortOrder = SQL.CATEGORY.C_ID + " DESC"; + Cursor categoriesCursor = database.query(SQL.CATEGORY.NAME, + null, + null, + null, + null, + null, + sortOrder); + List> itemsObtained = new ArrayList<>(); + while (categoriesCursor.moveToNext()) { + itemsObtained.add(getValuesFromCursor(categoriesCursor, DatabaseTables.CATEGORY)); } categoriesCursor.close(); - return categoriesList; + return itemsObtained; +// List categoriesList = new ArrayList<>(); +// if (categoriesCursor.moveToFirst()) { +// do { +// categoriesList.add(loadDataIntoArray(categoriesCursor)); +// } while (categoriesCursor.moveToNext()); +// } +// categoriesCursor.close(); +// return categoriesList; } - public List getAllEntries() { - Cursor entriesCursor = database.rawQuery(SQL.DB_SELECT_ENTRIES, null); - List entriesList = new ArrayList<>(); - if (entriesCursor.moveToFirst()) { - do { - entriesList.add(loadDataIntoArray(entriesCursor)); - } while (entriesCursor.moveToNext()); + public List> getAllEntries() { + String sortOrder = SQL.ENTRY.E_ID + " DESC"; + Cursor entriesCursor = database.query(SQL.ENTRY.NAME, + null, + null, + null, + null, + null, + sortOrder); + List> entriesList = new ArrayList<>(); + while (entriesCursor.moveToNext()) { + entriesList.add(getValuesFromCursor(entriesCursor, DatabaseTables.ENTRY)); } entriesCursor.close(); return entriesList; } - public List getAllQRCodes() { - Cursor qrCodesCursor = database.rawQuery(SQL.DB_SELECT_QR_CODES, null); - List qrCodesList = new ArrayList<>(); - if (qrCodesCursor.moveToFirst()) { - do { - qrCodesList.add(loadDataIntoArray(qrCodesCursor)); - } while (qrCodesCursor.moveToNext()); + public List> getAllQRCodes() { + String sortOrder = SQL.QR_CODE.Q_ID + " DESC"; + Cursor qrCodesCursor = database.query(SQL.QR_CODE.NAME, + null, + null, + null, + null, + null, + sortOrder); + List> qrCodesList = new ArrayList<>(); + while (qrCodesCursor.moveToNext()) { + qrCodesList.add(getValuesFromCursor(qrCodesCursor, DatabaseTables.QR_CODE)); } qrCodesCursor.close(); return qrCodesList; } - public List getAllSecurityCodes() { - Cursor securityCodesCursor = database.rawQuery(SQL.DB_SELECT_SECURITY_CODES, null); - List securityCodesList = new ArrayList<>(); - if (securityCodesCursor.moveToFirst()) { - do { - securityCodesList.add(loadDataIntoArray(securityCodesCursor)); - } while (securityCodesCursor.moveToNext()); + public List> getAllSecurityCodes() { + String sortOrder = SQL.SECURITY_CODE.S_ID + " DESC"; + Cursor securityCodesCursor = database.query(SQL.SECURITY_CODE.NAME, + null, + null, + null, + null, + null, + sortOrder); + List> securityCodesList = new ArrayList<>(); + while (securityCodesCursor.moveToNext()) { + securityCodesList.add(getValuesFromCursor(securityCodesCursor, + DatabaseTables.SECURITY_CODE)); } securityCodesCursor.close(); return securityCodesList; } - public List getAllFields() { - Cursor fieldsCursor = database.rawQuery(SQL.DB_SELECT_FIELDS, null); - List fieldsList = new ArrayList<>(); - if (fieldsCursor.moveToFirst()) { - do { - fieldsList.add(loadDataIntoArray(fieldsCursor)); - } while (fieldsCursor.moveToNext()); + public List> getAllFields() { + String sortOrder = SQL.FIELD.F_ID + " DESC"; + Cursor fieldsCursor = database.query(SQL.FIELD.NAME, + null, + null, + null, + null, + null, + sortOrder); + List> fieldsList = new ArrayList<>(); + while (fieldsCursor.moveToNext()) { + fieldsList.add(getValuesFromCursor(fieldsCursor, DatabaseTables.FIELD)); } fieldsCursor.close(); return fieldsList; @@ -237,4 +357,39 @@ public List getAllFields() { public void finishConnection() { database.close(); } + + private ContentValues setParams(DatabaseTables table, Object... values) { + ContentValues params = new ContentValues(); + switch (table) { + case CATEGORY: + params.put(SQL.CATEGORY.C_NAME, (String) values[0]); + break; + case ENTRY: + params.put(SQL.ENTRY.E_ACCOUNT, (String) values[0]); + params.put(SQL.ENTRY.E_PASSWORD, (String) values[1]); + params.put(SQL.ENTRY.E_ICON, (String) values[2]); + params.put(SQL.ENTRY.E_DESCRIPTION, (String) values[3]); + params.put(SQL.ENTRY.E_PARENT_CATEGORY, (long) values[4]); + break; + case QR_CODE: + params.put(SQL.QR_CODE.Q_NAME, (String) values[0]); + params.put(SQL.QR_CODE.Q_DESCRIPTION, (String) values[1]); + params.put(SQL.QR_CODE.Q_DATA, (String) values[2]); + params.put(SQL.QR_CODE.Q_PARENT_ENTRY, (long) values[3]); + break; + case SECURITY_CODE: + params.put(SQL.SECURITY_CODE.S_ACCOUNT_NAME, (String) values[0]); + break; + case FIELD: + params.put(SQL.FIELD.F_CODE, (String) values[0]); + params.put(SQL.FIELD.F_USED, (boolean) values[1]); + params.put(SQL.FIELD.F_PARENT_SECURITY_CODE, (long) values[2]); + break; + } + return params; + } + + private String[] setSelectionArgs(long id) { + return new String[]{String.valueOf(id)}; + } } diff --git a/APP/app/src/main/java/javinator9889/securepass/util/values/Constants.java b/APP/app/src/main/java/javinator9889/securepass/util/values/Constants.java index dee9292..70bd830 100644 --- a/APP/app/src/main/java/javinator9889/securepass/util/values/Constants.java +++ b/APP/app/src/main/java/javinator9889/securepass/util/values/Constants.java @@ -12,41 +12,73 @@ public class Constants { public static final class SQL { public static String DB_FILENAME = "SecurePass.db"; public static String DB_INIT_THREAD_NAME = "DB Initializer"; - public static String DB_DEFAULT_CATEGORY = "INSERT IF NOT EXISTS INTO Category VALUE ?"; + public static String DB_DEFAULT_CATEGORY = "INSERT IF NOT EXISTS INTO " + + "Category(name) VALUES (?)"; // INSERT SQL OPERATIONS + public static final class CATEGORY { + public static String NAME = "Category"; + public static String C_ID = "idCategory"; + public static String C_NAME = "name"; + } + + public static final class ENTRY { + public static final String NAME = "Entry"; + public static final String E_ID = "idEntry"; + public static final String E_ACCOUNT = "account"; + public static final String E_PASSWORD = "password"; + public static final String E_ICON = "icon"; + public static final String E_DESCRIPTION = "description"; + public static final String E_PARENT_CATEGORY = "cidCategory"; + } + + public static final class QR_CODE { + public static final String NAME = "QRCode"; + public static final String Q_ID = "idQRCode"; + public static final String Q_NAME = "name"; + public static final String Q_DESCRIPTION = "description"; + public static final String Q_DATA = "data"; + public static final String Q_PARENT_ENTRY = "fidEntry"; + } + + public static final class SECURITY_CODE { + public static final String NAME = "SecurityCodes"; + public static final String S_ID = "idSecurityCodes"; + public static final String S_ACCOUNT_NAME = "accountName"; + } + + public static final class FIELD { + public static final String NAME = "Fields"; + public static final String F_ID = "idField"; + public static final String F_CODE = "code"; + public static final String F_USED = "used"; + public static final String F_PARENT_SECURITY_CODE = "fidSecurityCodes"; + } + public static String DB_NEW_ENTRY = "INSERT INTO Entry VALUES(?, ?, ?, ?, ?)"; - public static String DB_NEW_CATEGORY = "INSERT INTO Category VALUE(?)"; + public static String DB_NEW_CATEGORY = "INSERT INTO Category VALUES (?)"; public static String DB_NEW_QR = "INSERT INTO QRCode VALUES (?, ?, ?, ?)"; - public static String DB_NEW_SECURITY_CODE = "INSERT INTO SecurityCodes VALUE (?)"; + public static String DB_NEW_SECURITY_CODE = "INSERT INTO SecurityCodes VALUES (?)"; public static String DB_NEW_FIELD = "INSERT INTO Fields VALUES (?, ?, ?)"; //DELETE SQL OPERATIONS - public static String DB_DELETE_ENTRY = "DELETE FROM Entry WHERE Entry.idEntry = ?"; - public static String DB_DELETE_CATEGORY = - "DELETE FROM Category WHERE Category.idCategory = ?"; - public static String DB_DELETE_QR_CODE = "DELETE FROM QRCode WHERE QRCode.idQRCode = ?"; - public static String DB_DELETE_FIELD_FROM_SECURITY_CODE = "DELETE FROM Fields WHERE " + + public static String DB_DELETE_ENTRY_WHERE_CLAUSE = "Entry.idEntry = ?"; + public static String DB_DELETE_CATEGORY_WHERE_CLAUSE = "Category.idCategory = ?"; + public static String DB_DELETE_QR_CODE_WHERE_CLAUSE = "QRCode.idQRCode = ?"; + public static String DB_DELETE_FIELD_FROM_SECURITY_CODE_WHERE_CLAUSE = "Fields.fidSecurityCodes = ?"; - public static String DB_DELETE_SECURITY_CODE = "DELETE FROM SecurityCodes " + - "WHERE SecurityCodes.idSecurityCodes = ?"; - public static String DB_DELETE_FIELD = "DELETE FROM Fields WHERE Fields.idField = ?"; + public static String DB_DELETE_SECURITY_CODE_WHERE_CLAUSE = + "SecurityCodes.idSecurityCodes = ?"; + public static String DB_DELETE_FIELD_WHERE_CLAUSE = "Fields.idField = ?"; // UPDATE SQL OPERATIONS - public static String DB_UPDATE_FOR_DELETED_CATEGORY = "UPDATE Entry SET " + - "Entry.cidCategory = 0 WHERE Entry.cidCategory = ?"; - public static String DB_UPDATE_ENTRY = "UPDATE Entry SET Entry.account = ?," + - " Entry.password = ?, Entry.icon = ?, Entry.description = ?, " + - "Entry.cidCategory = ? WHERE Entry.idEntry = ?"; - public static String DB_UPDATE_CATEGORY = "UPDATE Category SET Category.name = ? WHERE" + - " Category.idCategory = ?"; - public static String DB_UPDATE_QR_CODE = "UPDATE QRCode SET QRCode.name = ?," + - " QRCode.description = ?, QRCode.data = ?, QRCode.fidEntry = ? " + - "WHERE QRCode.idQRCode = ?"; - public static String DB_UPDATE_SECURITY_CODE = "UPDATE SecurityCodes " + - "SET SecurityCodes.accountName = ? WHERE SecurityCodes.idSecurityCodes = ?"; - public static String DB_UPDATE_FIELD = "UPDATE Fields SET Fields.code = ?, " + - "Fields.used = ? WHERE Fields.idField = ?"; + public static String DB_UPDATE_FOR_DELETED_CATEGORY_WHERE_CLAUSE = "Entry.cidCategory = ?"; + public static String DB_UPDATE_ENTRY_WHERE_CLAUSE = "Entry.idEntry = ?"; + public static String DB_UPDATE_CATEGORY_WHERE_CLAUSE = "Category.idCategory = ?"; + public static String DB_UPDATE_QR_CODE_WHERE_CLAUSE = "QRCode.idQRCode = ?"; + public static String DB_UPDATE_SECURITY_CODE_WHERE_CLAUSE = + "SecurityCodes.idSecurityCodes = ?"; + public static String DB_UPDATE_FIELD_WHERE_CLAUSE = "Fields.idField = ?"; // SELECT SQL OPERATIONS public static String DB_SELECT_CATEGORIES = "SELECT * FROM Categories"; @@ -73,7 +105,7 @@ public static final class FIRST_SETUP { public static final class SHARED_PREF { public static final String FILENAME = "userPreferences"; public static final int MODE = Context.MODE_PRIVATE; - public static final Object[][] VALUES = new Object[][] { + public static final Object[][] VALUES = new Object[][]{ {"isApplicationFirstExecuted", false, boolean.class}, {"isDatabaseInitialized", false, boolean.class} }; diff --git a/APP/app/src/main/java/javinator9889/securepass/util/values/DatabaseTables.java b/APP/app/src/main/java/javinator9889/securepass/util/values/DatabaseTables.java new file mode 100644 index 0000000..4fbfea8 --- /dev/null +++ b/APP/app/src/main/java/javinator9889/securepass/util/values/DatabaseTables.java @@ -0,0 +1,8 @@ +package javinator9889.securepass.util.values; + +/** + * Created by Javinator9889 on 18/05/2018. + */ +public enum DatabaseTables { + CATEGORY, ENTRY, QR_CODE, SECURITY_CODE, FIELD +} diff --git a/APP/app/src/main/java/javinator9889/securepass/views/activities/LauncherActivity.java b/APP/app/src/main/java/javinator9889/securepass/views/activities/LauncherActivity.java index e943ac6..b6fdea8 100644 --- a/APP/app/src/main/java/javinator9889/securepass/views/activities/LauncherActivity.java +++ b/APP/app/src/main/java/javinator9889/securepass/views/activities/LauncherActivity.java @@ -17,6 +17,7 @@ public class LauncherActivity extends AppCompatActivity { protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ISharedPreferencesManager preferencesManager = SharedPreferencesManager.newInstance(); + preferencesManager.databaseInitialized(false); if (!preferencesManager.isApplicationInitialized()) { Intent firstSetupLauncher = new Intent(this, FirstSetup.class); //Intent firstSetupLauncher = new Intent(this, DriveContent.class); diff --git a/APP/app/src/main/java/javinator9889/securepass/views/fragments/PasswordRegistration.java b/APP/app/src/main/java/javinator9889/securepass/views/fragments/PasswordRegistration.java index 76c3b63..e20b4d5 100644 --- a/APP/app/src/main/java/javinator9889/securepass/views/fragments/PasswordRegistration.java +++ b/APP/app/src/main/java/javinator9889/securepass/views/fragments/PasswordRegistration.java @@ -70,22 +70,23 @@ public void onClick(View v) { .hashString(this.firstPasswordEntry.getText().toString(), StandardCharsets.UTF_8).toString(); io.storePassword(passwordWithHashApplied); - Intent googleDriveLauncher = new Intent(this, DriveContent.class); + /*Intent googleDriveLauncher = new Intent(this, DriveContent.class); startActivity(googleDriveLauncher); - savingPasswordProgress.dismiss(); - finish(); - /*DatabaseManager manager = DatabaseManager + savingPasswordProgress.dismiss();*/ + //finish(); + // This will try to create a DB + DatabaseManager manager = DatabaseManager .newInstance(this, passwordWithHashApplied); Thread databaseThread = manager.getDatabaseInitializer(); try { databaseThread.join(); - ISharedPreferencesManager preferencesManager = SharedPreferencesManager + /*ISharedPreferencesManager preferencesManager = SharedPreferencesManager .newInstance(); - preferencesManager.databaseInitialized(true); + preferencesManager.databaseInitialized(true);*/ savingPasswordProgress.dismiss(); } catch (InterruptedException e) { e.printStackTrace(); - }*/ + } } else Toast.makeText(v.getContext(), R.string.passwords_does_not_match, diff --git a/APP/app/src/main/res/raw/create_category.sql b/APP/app/src/main/res/raw/create_category.sql new file mode 100644 index 0000000..0e15f7d --- /dev/null +++ b/APP/app/src/main/res/raw/create_category.sql @@ -0,0 +1,4 @@ +CREATE TABLE IF NOT EXISTS Category ( + idCategory INTEGER NOT NULL DEFAULT 0, + name VARCHAR(45) NULL, + PRIMARY KEY (idCategory)); \ No newline at end of file diff --git a/APP/app/src/main/res/raw/create_entry.sql b/APP/app/src/main/res/raw/create_entry.sql new file mode 100644 index 0000000..6a3e250 --- /dev/null +++ b/APP/app/src/main/res/raw/create_entry.sql @@ -0,0 +1,13 @@ +CREATE TABLE IF NOT EXISTS Entry ( + idEntry INTEGER NOT NULL DEFAULT 0, + account VARCHAR(100) NOT NULL, + password VARCHAR(180) NOT NULL, + icon VARCHAR(180) NULL, + description LONGBLOB NULL, + cidCategory INT NOT NULL, + PRIMARY KEY (idEntry), + CONSTRAINT fk_Entry_Category + FOREIGN KEY (cidCategory) + REFERENCES Category (idCategory) + ON DELETE NO ACTION + ON UPDATE CASCADE); \ No newline at end of file diff --git a/APP/app/src/main/res/raw/create_field.sql b/APP/app/src/main/res/raw/create_field.sql new file mode 100644 index 0000000..76a5a1e --- /dev/null +++ b/APP/app/src/main/res/raw/create_field.sql @@ -0,0 +1,11 @@ +CREATE TABLE IF NOT EXISTS Fields ( + idField INTEGER NOT NULL DEFAULT 0, + code VARCHAR(180) NOT NULL, + used TINYINT NOT NULL DEFAULT 0, + fidSecurityCodes INTEGER NOT NULL, + PRIMARY KEY (idField), + CONSTRAINT fk_Fields_SecurityCodes + FOREIGN KEY (fidSecurityCodes) + REFERENCES SecurityCodes (idSecurityCodes) + ON DELETE CASCADE + ON UPDATE NO ACTION); \ No newline at end of file diff --git a/APP/app/src/main/res/raw/create_qrcode.sql b/APP/app/src/main/res/raw/create_qrcode.sql new file mode 100644 index 0000000..08a2eae --- /dev/null +++ b/APP/app/src/main/res/raw/create_qrcode.sql @@ -0,0 +1,12 @@ +CREATE TABLE IF NOT EXISTS QRCode ( + idQRCode INTEGER NOT NULL DEFAULT 0, + name VARCHAR(45) NOT NULL, + description VARCHAR(180) NULL, + data LONGTEXT NOT NULL, + fidEntry INTEGER NOT NULL, + PRIMARY KEY (idQRCode), + CONSTRAINT fk_QRCode_Entry + FOREIGN KEY (fidEntry) + REFERENCES Entry (idEntry) + ON DELETE CASCADE + ON UPDATE NO ACTION); \ No newline at end of file diff --git a/APP/app/src/main/res/raw/create_security_code.sql b/APP/app/src/main/res/raw/create_security_code.sql new file mode 100644 index 0000000..e205e39 --- /dev/null +++ b/APP/app/src/main/res/raw/create_security_code.sql @@ -0,0 +1,4 @@ +CREATE TABLE IF NOT EXISTS SecurityCodes ( + idSecurityCodes INTEGER NOT NULL DEFAULT 0, + accountName VARCHAR(45) NOT NULL, + PRIMARY KEY (idSecurityCodes)); \ No newline at end of file diff --git a/APP/app/src/main/res/raw/database_script.sql b/APP/app/src/main/res/raw/database_script.sql index 68919da..93b8515 100644 --- a/APP/app/src/main/res/raw/database_script.sql +++ b/APP/app/src/main/res/raw/database_script.sql @@ -1,90 +1,51 @@ --- ----------------------------------------------------- --- Schema securepassdb --- ----------------------------------------------------- - --- ----------------------------------------------------- --- Schema securepassdb --- ----------------------------------------------------- --- CREATE SCHEMA IF NOT EXISTS `securepassdb` DEFAULT CHARACTER SET utf8 ; --- USE `securepassdb` ; - --- ----------------------------------------------------- --- Table `securepassdb`.`Category` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `securepassdb`.`Category` ( - `idCategory` INT NOT NULL DEFAULT 0, - `name` VARCHAR(45) NULL, - PRIMARY KEY (`idCategory`)) -ENGINE = InnoDB; - - --- ----------------------------------------------------- --- Table `securepassdb`.`Entry` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `securepassdb`.`Entry` ( - `idEntry` INT NOT NULL AUTO_INCREMENT, - `account` VARCHAR(180) NOT NULL, - `password` VARCHAR(180) NOT NULL, - `icon` VARCHAR(180) NULL, - `description` LONGBLOB NULL, - `cidCategory` INT NOT NULL, - PRIMARY KEY (`idEntry`, `cidCategory`), - INDEX `fk_Entry_Category1_idx` (`cidCategory` ASC), - CONSTRAINT `fk_Entry_Category1` - FOREIGN KEY (`cidCategory`) - REFERENCES `securepassdb`.`Category` (`idCategory`) - ON DELETE NO ACTION - ON UPDATE CASCADE) -ENGINE = InnoDB; - - --- ----------------------------------------------------- --- Table `securepassdb`.`QRCode` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `securepassdb`.`QRCode` ( - `idQRCode` INT NOT NULL AUTO_INCREMENT, - `name` VARCHAR(45) NOT NULL, - `description` VARCHAR(180) NULL, - `data` LONGTEXT NOT NULL, - `fidEntry` INT NOT NULL, - PRIMARY KEY (`idQRCode`, `fidEntry`), - INDEX `fk_QRCode_Entry1_idx` (`fidEntry` ASC), - CONSTRAINT `fk_QRCode_Entry1` - FOREIGN KEY (`fidEntry`) - REFERENCES `securepassdb`.`Entry` (`idEntry`) - ON DELETE CASCADE - ON UPDATE NO ACTION) -ENGINE = InnoDB; - - --- ----------------------------------------------------- --- Table `securepassdb`.`SecurityCodes` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `securepassdb`.`SecurityCodes` ( - `idSecurityCodes` INT NOT NULL AUTO_INCREMENT, - `accountName` VARCHAR(45) NOT NULL, - PRIMARY KEY (`idSecurityCodes`)) -ENGINE = InnoDB; - - --- ----------------------------------------------------- --- Table `securepassdb`.`Fields` --- ----------------------------------------------------- -CREATE TABLE IF NOT EXISTS `securepassdb`.`Fields` ( - `idField` INT NOT NULL AUTO_INCREMENT, - `code` VARCHAR(180) NOT NULL, - `used` TINYINT NOT NULL DEFAULT 0, - `fidSecurityCodes` INT NOT NULL, - PRIMARY KEY (`idField`, `fidSecurityCodes`), - INDEX `fk_Fields_SecurityCodes1_idx` (`fidSecurityCodes` ASC), - CONSTRAINT `fk_Fields_SecurityCodes1` - FOREIGN KEY (`fidSecurityCodes`) - REFERENCES `securepassdb`.`SecurityCodes` (`idSecurityCodes`) - ON DELETE CASCADE - ON UPDATE NO ACTION) -ENGINE = InnoDB; - - -SET SQL_MODE=@OLD_SQL_MODE; -SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; -SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; +CREATE TABLE IF NOT EXISTS `Category` ( + `idCategory` INT NOT NULL DEFAULT 0, + `name` VARCHAR(45) NULL, + PRIMARY KEY (`idCategory`)); + +CREATE TABLE IF NOT EXISTS `Entry` ( + `idEntry` INT NOT NULL AUTO_INCREMENT, + `account` VARCHAR(180) NOT NULL, + `password` VARCHAR(180) NOT NULL, + `icon` VARCHAR(180) NULL, + `description` LONGBLOB NULL, + `cidCategory` INT NOT NULL, + PRIMARY KEY (`idEntry`, `cidCategory`), + INDEX `fk_Entry_Category1_idx` (`cidCategory` ASC), + CONSTRAINT `fk_Entry_Category1` + FOREIGN KEY (`cidCategory`) + REFERENCES `Category` (`idCategory`) + ON DELETE NO ACTION + ON UPDATE CASCADE); + +CREATE TABLE IF NOT EXISTS `QRCode` ( + `idQRCode` INT NOT NULL AUTO_INCREMENT, + `name` VARCHAR(45) NOT NULL, + `description` VARCHAR(180) NULL, + `data` LONGTEXT NOT NULL, + `fidEntry` INT NOT NULL, + PRIMARY KEY (`idQRCode`, `fidEntry`), + INDEX `fk_QRCode_Entry1_idx` (`fidEntry` ASC), + CONSTRAINT `fk_QRCode_Entry1` + FOREIGN KEY (`fidEntry`) + REFERENCES `Entry` (`idEntry`) + ON DELETE CASCADE + ON UPDATE NO ACTION); + +CREATE TABLE IF NOT EXISTS `SecurityCodes` ( + `idSecurityCodes` INT NOT NULL AUTO_INCREMENT, + `accountName` VARCHAR(45) NOT NULL, + PRIMARY KEY (`idSecurityCodes`)); + +CREATE TABLE IF NOT EXISTS `Fields` ( + `idField` INT NOT NULL AUTO_INCREMENT, + `code` VARCHAR(180) NOT NULL, + `used` TINYINT NOT NULL DEFAULT 0, + `fidSecurityCodes` INT NOT NULL, + PRIMARY KEY (`idField`, `fidSecurityCodes`), + INDEX `fk_Fields_SecurityCodes1_idx` (`fidSecurityCodes` ASC), + CONSTRAINT `fk_Fields_SecurityCodes1` + FOREIGN KEY (`fidSecurityCodes`) + REFERENCES `SecurityCodes` (`idSecurityCodes`) + ON DELETE CASCADE + ON UPDATE NO ACTION); \ No newline at end of file diff --git a/DESIGN/DATABASE/Database files/DATABASE_MODEL.mwb b/DESIGN/DATABASE/Database files/DATABASE_MODEL.mwb index fa5b398..0378677 100644 Binary files a/DESIGN/DATABASE/Database files/DATABASE_MODEL.mwb and b/DESIGN/DATABASE/Database files/DATABASE_MODEL.mwb differ diff --git a/DESIGN/DATABASE/Database files/DATABASE_SCRIPT.sql b/DESIGN/DATABASE/Database files/DATABASE_SCRIPT.sql index f341553..0c9ff07 100644 --- a/DESIGN/DATABASE/Database files/DATABASE_SCRIPT.sql +++ b/DESIGN/DATABASE/Database files/DATABASE_SCRIPT.sql @@ -1,3 +1,12 @@ +-- MySQL Script generated by MySQL Workbench +-- Wed May 2 15:52:00 2018 +-- Model: New Model Version: 1.0 +-- MySQL Workbench Forward Engineering + +SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; +SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; +SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; + -- ----------------------------------------------------- -- Schema securepassdb -- ----------------------------------------------------- @@ -8,11 +17,19 @@ CREATE SCHEMA IF NOT EXISTS `securepassdb` DEFAULT CHARACTER SET utf8 ; USE `securepassdb` ; +-- ----------------------------------------------------- +-- Table `securepassdb`.`Application` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `securepassdb`.`Application` ( + `password` CHAR(64) NOT NULL) +ENGINE = InnoDB; + + -- ----------------------------------------------------- -- Table `securepassdb`.`Category` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `securepassdb`.`Category` ( - `idCategory` INT NOT NULL DEFAULT 0, + `idCategory` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(45) NULL, PRIMARY KEY (`idCategory`)) ENGINE = InnoDB;