d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey/*
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey * The contents of this file are subject to the terms of the Common Development and
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey * Distribution License (the License). You may not use this file except in compliance with the
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey * License.
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey *
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey * specific language governing permission and limitations under the License.
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey *
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey * When distributing Covered Software, include this CDDL Header Notice in each file and include
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey * Header, with the fields enclosed by brackets [] replaced by your own identifying
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey * information: "Portions copyright [year] [name of copyright owner]".
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey *
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey * Copyright 2016 ForgeRock AS.
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey */
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumseypackage com.forgerock.authenticator.storage;
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumseyimport android.content.Context;
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumseyimport android.database.sqlite.SQLiteDatabase;
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumseyimport android.database.sqlite.SQLiteOpenHelper;
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey/**
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey * Class for helping provide access to the database. Used internally by IdentityDatabase, and should
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey * not be used elsewhere. Handles creation and upgrade of the SQLite database as required. Also
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey * enables foreign key validation to maintain database consistency.
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey */
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumseyclass DatabaseOpenHelper extends SQLiteOpenHelper {
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey private static final int DATABASE_VERSION = 1;
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey private static final String DATABASE_NAME = "FR_AUTH";
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey /**
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey * Creates the help for access to the database.
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey * @param context The context the database is to be opened from.
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey */
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey public DatabaseOpenHelper(Context context) {
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey super(context, DATABASE_NAME, null, DATABASE_VERSION);
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey }
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey @Override
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey public void onCreate(SQLiteDatabase db) {
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey db.execSQL("CREATE TABLE " + IdentityDatabase.IDENTITY_TABLE_NAME + " (" +
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey IdentityDatabase.ISSUER + " TEXT, " +
d00779d35b3db7493fcdd3f8645e094c5540f4c4Tom Rumsey IdentityDatabase.ACCOUNT_NAME + " TEXT, " +
a81f9ab4a7dfabcc7ebda800639d8fb320287d1cTom Rumsey IdentityDatabase.IMAGE_URL + " TEXT, " +
0de9d66eeb2e6df242776582ec2a5c6a9306056aTom Rumsey IdentityDatabase.BG_COLOR + " TEXT, " +
d00779d35b3db7493fcdd3f8645e094c5540f4c4Tom Rumsey "PRIMARY KEY(" + IdentityDatabase.ISSUER + ", " + IdentityDatabase.ACCOUNT_NAME + "));");
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey db.execSQL("CREATE TABLE " + IdentityDatabase.MECHANISM_TABLE_NAME + " (" +
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey IdentityDatabase.ID_ISSUER + " TEXT, " +
d00779d35b3db7493fcdd3f8645e094c5540f4c4Tom Rumsey IdentityDatabase.ID_ACCOUNT_NAME + " TEXT, " +
efafbd2aa55b834f714882683fa864a0ac9e64aaTom Rumsey IdentityDatabase.MECHANISM_UID + " TEXT UNIQUE, " +
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey IdentityDatabase.TYPE + " TEXT, " +
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey IdentityDatabase.VERSION + " INTEGER, " +
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey IdentityDatabase.OPTIONS + " TEXT, " +
b6d3b7f02818840dd9b10de909554c80a5e21326Tom Rumsey "PRIMARY KEY(" + IdentityDatabase.ID_ISSUER + ", " + IdentityDatabase.ID_ACCOUNT_NAME + ", " + IdentityDatabase.TYPE + "), " +
d00779d35b3db7493fcdd3f8645e094c5540f4c4Tom Rumsey "FOREIGN KEY(" + IdentityDatabase.ID_ISSUER + ", " + IdentityDatabase.ID_ACCOUNT_NAME + ") " +
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey "REFERENCES " + IdentityDatabase.IDENTITY_TABLE_NAME
d00779d35b3db7493fcdd3f8645e094c5540f4c4Tom Rumsey + "(" + IdentityDatabase.ISSUER + ", " + IdentityDatabase.ACCOUNT_NAME + "));");
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey
efafbd2aa55b834f714882683fa864a0ac9e64aaTom Rumsey db.execSQL("CREATE TABLE " + IdentityDatabase.NOTIFICATION_TABLE_NAME + " (" +
efafbd2aa55b834f714882683fa864a0ac9e64aaTom Rumsey IdentityDatabase.MECHANISM_UID + " TEXT, " +
a81f9ab4a7dfabcc7ebda800639d8fb320287d1cTom Rumsey IdentityDatabase.TIME_RECEIVED + " TEXT, " +
a81f9ab4a7dfabcc7ebda800639d8fb320287d1cTom Rumsey IdentityDatabase.TIME_EXPIRED + " TEXT, " +
efafbd2aa55b834f714882683fa864a0ac9e64aaTom Rumsey IdentityDatabase.DATA + " TEXT, " +
c00a5587d32883c0f366fd6c47c3e674dad9dba7Tom Rumsey IdentityDatabase.PENDING + " INT, " +
a81f9ab4a7dfabcc7ebda800639d8fb320287d1cTom Rumsey IdentityDatabase.APPROVED + " INT, " +
b6d3b7f02818840dd9b10de909554c80a5e21326Tom Rumsey "PRIMARY KEY(" + IdentityDatabase.MECHANISM_UID + ", " + IdentityDatabase.TIME_RECEIVED + "), " +
efafbd2aa55b834f714882683fa864a0ac9e64aaTom Rumsey "FOREIGN KEY(" + IdentityDatabase.MECHANISM_UID + ") " +
efafbd2aa55b834f714882683fa864a0ac9e64aaTom Rumsey "REFERENCES " + IdentityDatabase.MECHANISM_TABLE_NAME
efafbd2aa55b834f714882683fa864a0ac9e64aaTom Rumsey + "(" + IdentityDatabase.MECHANISM_UID + "));");
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey }
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey @Override
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey // SHOULD never be necessary
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey }
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey @Override
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey public void onOpen(SQLiteDatabase db) {
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey super.onOpen(db);
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey if (!db.isReadOnly()) {
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey // Enable foreign key constraints
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey db.execSQL("PRAGMA foreign_keys=ON;");
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey }
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey }
d4ba104b978e28c3f9254b390959e08bb8c2122fTom Rumsey}