1390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov/* 2390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov * Copyright (C) 2016 The Android Open Source Project 3390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov * 4390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov * Licensed under the Apache License, Version 2.0 (the "License"); 5390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov * you may not use this file except in compliance with the License. 6390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov * You may obtain a copy of the License at 7390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov * 8390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov * http://www.apache.org/licenses/LICENSE-2.0 9390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov * 10390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov * Unless required by applicable law or agreed to in writing, software 11390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov * distributed under the License is distributed on an "AS IS" BASIS, 12390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov * See the License for the specific language governing permissions and 14390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov * limitations under the License 15390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov */ 16390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov 17390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolovpackage com.android.server.accounts; 18390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov 19390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolovimport android.content.Context; 20390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolovimport android.database.sqlite.SQLiteDatabase; 21390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolovimport android.database.sqlite.SQLiteOpenHelper; 22390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov 23390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov/** 24390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov * Helper class for emulating pre-N database 25390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov */ 26390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolovclass PreNTestDatabaseHelper extends SQLiteOpenHelper { 27390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov 28390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov public static final String TOKEN_STRING = "token-string-123"; 29390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov public static final String ACCOUNT_TYPE = "type1"; 30390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov public static final String ACCOUNT_NAME = "account@" + ACCOUNT_TYPE; 31390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov public static final String ACCOUNT_PASSWORD = "Password"; 32390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov public static final String TOKEN_TYPE = "SID"; 33390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov 34390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov public PreNTestDatabaseHelper(Context context, String name) { 35390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov super(context, name, null, 4); 36390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov } 37390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov 38390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov @Override 39390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov public void onCreate(SQLiteDatabase db) { 40390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov db.execSQL("CREATE TABLE accounts ( " 41390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "_id INTEGER PRIMARY KEY AUTOINCREMENT, " 42390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "name TEXT NOT NULL, " 43390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "type TEXT NOT NULL, " 44390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "password TEXT, " 45390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "UNIQUE(name, type))"); 46390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov db.execSQL("INSERT INTO accounts (name, type, password) VALUES " 47390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "('" + ACCOUNT_NAME + "', '" + ACCOUNT_TYPE + "', '" + ACCOUNT_PASSWORD + "')"); 48390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov 49390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov db.execSQL("CREATE TABLE authtokens ( " 50390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "_id INTEGER PRIMARY KEY AUTOINCREMENT, " 51390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "accounts_id INTEGER NOT NULL, " 52390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "type TEXT NOT NULL, " 53390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "authtoken TEXT, " 54390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "UNIQUE (accounts_id, type ))"); 55390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov db.execSQL("INSERT INTO authtokens (accounts_id, type, authtoken) VALUES " 56390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "(1, '" + TOKEN_TYPE + "', '" + TOKEN_STRING + "')"); 57390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov 58390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov db.execSQL("CREATE TABLE grants ( " 59390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "accounts_id INTEGER NOT NULL, " 60390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "auth_token_type STRING NOT NULL, " 61390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "uid INTEGER NOT NULL, " 62390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "UNIQUE (accounts_id,auth_token_type,uid))"); 63390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov 64390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov db.execSQL("CREATE TABLE extras ( " 65390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "_id INTEGER PRIMARY KEY AUTOINCREMENT, " 66390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "accounts_id INTEGER, " 67390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "key TEXT NOT NULL, " 68390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "value TEXT, " 69390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "UNIQUE(accounts_id , key))"); 70390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov 71390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov db.execSQL("CREATE TABLE meta ( " 72390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "key TEXT PRIMARY KEY NOT NULL, " 73390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + "value TEXT)"); 74390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov 75390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov db.execSQL("" 76390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + " CREATE TRIGGER accountsDelete DELETE ON accounts " 77390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + " BEGIN" 78390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + " DELETE FROM authtokens" 79390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + " WHERE accounts_id=OLD._id;" 80390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + " DELETE FROM extras" 81390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + " WHERE accounts_id=OLD._id;" 82390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + " DELETE FROM grants" 83390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + " WHERE accounts_id=OLD._id;" 84390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov + " END"); 85390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov } 86390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov 87390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov @Override 88390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 89390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov throw new UnsupportedOperationException("Upgrade of test database is not supported"); 90390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov } 91390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov 92390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov public static void createV4Database(Context context, String name) { 93390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov PreNTestDatabaseHelper helper = new PreNTestDatabaseHelper(context, name); 94390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov helper.getWritableDatabase(); 95390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov helper.close(); 96390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov } 97390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov 98390802b6d3d64ea926490a7ff0deeff2ece25105Fyodor Kupolov} 99