X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=blobdiff_plain;f=src%2Fhelpers%2FDomainsDatabaseHelper.cpp;fp=src%2Fhelpers%2FDomainsDatabaseHelper.cpp;h=0000000000000000000000000000000000000000;hp=d1f8b22f8f5d30089f18fab42388ac6e573af211;hb=cd1c3d0483b9026736fdcb151d90dda872d8a400;hpb=588db73b94af7b596b0e532f4557aa8b6c41f5c3 diff --git a/src/helpers/DomainsDatabaseHelper.cpp b/src/helpers/DomainsDatabaseHelper.cpp deleted file mode 100644 index d1f8b22..0000000 --- a/src/helpers/DomainsDatabaseHelper.cpp +++ /dev/null @@ -1,231 +0,0 @@ -/* - * Copyright © 2022 Soren Stoutner . - * - * This file is part of Privacy Browser PC . - * - * Privacy Browser PC is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Privacy Browser PC is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Privacy Browser PC. If not, see . - */ - -// Application headers. -#include "DomainsDatabaseHelper.h" -#include "UserAgentHelper.h" - -// Define the public static domain constants. -const QString DomainsDatabaseHelper::CONNECTION_NAME = "domains_database"; -const QString DomainsDatabaseHelper::DOMAINS_TABLE = "domains"; - -// Define the private static schema constants. -const int DomainsDatabaseHelper::SCHEMA_VERSION = 5; - -// Define the public static database field names. -const QString DomainsDatabaseHelper::_ID = "_id"; -const QString DomainsDatabaseHelper::DOMAIN_NAME = "domain_name"; -const QString DomainsDatabaseHelper::JAVASCRIPT = "javascript"; -const QString DomainsDatabaseHelper::LOCAL_STORAGE = "local_storage"; -const QString DomainsDatabaseHelper::DOM_STORAGE = "dom_storage"; -const QString DomainsDatabaseHelper::USER_AGENT = "user_agent"; -const QString DomainsDatabaseHelper::ZOOM_FACTOR = "zoom_factor"; -const QString DomainsDatabaseHelper::CUSTOM_ZOOM_FACTOR = "custom_zoom_factor"; - -// Construct the class. -DomainsDatabaseHelper::DomainsDatabaseHelper() {} - -void DomainsDatabaseHelper::addDatabase() -{ - // Add the domain settings database. - QSqlDatabase domainsDatabase = QSqlDatabase::addDatabase("QSQLITE", CONNECTION_NAME); - - // Set the database name. - domainsDatabase.setDatabaseName(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/domains.db"); - - // Open the database. - if (domainsDatabase.open()) // Opening the database succeeded. - { - // Check to see if the domains table already exists. - if (domainsDatabase.tables().contains(DOMAINS_TABLE)) - { - // Query the database schema version. - QSqlQuery getSchemaVersionQuery = domainsDatabase.exec("PRAGMA user_version"); - - // Move to the first record. - getSchemaVersionQuery.first(); - - // Get the current schema version. - int currentSchemaVersion = getSchemaVersionQuery.value(0).toInt(); - - // Check to see if the schama has been updated. - if (SCHEMA_VERSION > currentSchemaVersion) - { - // Run schema update code. - switch (currentSchemaVersion) - { - // Upgrade from schema version 0 to schema version 1. - case 0: - { - // Add the JavaScript column. - domainsDatabase.exec("ALTER TABLE " + DOMAINS_TABLE + " ADD COLUMN " + JAVASCRIPT + " INTEGER DEFAULT 0"); - - // Fallthrough to the next case. - [[fallthrough]]; - } - - // Upgrade from schema version 1 to schema version 2. - case 1: - { - // Add the User Agent column. - domainsDatabase.exec("ALTER TABLE " + DOMAINS_TABLE + " ADD COLUMN " + USER_AGENT + " TEXT DEFAULT '" + UserAgentHelper::SYSTEM_DEFAULT_DATABASE + "'"); - - // Fallthrough to the next case. - [[fallthrough]]; - } - - // Upgrade from schema version 2 to schema version 3. - case 2: - { - // Add the Zoom Factor columns. - domainsDatabase.exec("ALTER TABLE " + DOMAINS_TABLE + " ADD COLUMN " + ZOOM_FACTOR + " INTEGER DEFAULT 0"); - domainsDatabase.exec("ALTER TABLE " + DOMAINS_TABLE + " ADD COLUMN " + CUSTOM_ZOOM_FACTOR + " REAL DEFAULT 1.0"); - - // Fallthrough to the next case. - [[fallthrough]]; - } - - // Upgrade from schema version 3 to schema version 4. - case 3: - { - // Add the DOM Storage column. - domainsDatabase.exec("ALTER TABLE " + DOMAINS_TABLE + " ADD COLUMN " + DOM_STORAGE + " INTEGER DEFAULT 0"); - - // Fallthrough to the next case. - [[fallthrough]]; - } - - case 4: - { - // Add the Local Storage column. - domainsDatabase.exec("ALTER TABLE " + DOMAINS_TABLE + " ADD COLUMN " + LOCAL_STORAGE + " INTEGER DEFAULT 0"); - - // Fallthrough to the next case. - // [[fallthrough]]; - } - } - - // Update the schema version. - domainsDatabase.exec("PRAGMA user_version = " + QString::number(SCHEMA_VERSION)); - } - } - else - { - // Instantiate a create table query. - QSqlQuery createTableQuery(domainsDatabase); - - // Prepare the create table query. - createTableQuery.prepare("CREATE TABLE " + DOMAINS_TABLE + "(" + - _ID + " INTEGER PRIMARY KEY, " + - DOMAIN_NAME + " TEXT, " + - JAVASCRIPT + " INTEGER DEFAULT 0, " + - LOCAL_STORAGE + " INTEGER DEFAULT 0, " + - DOM_STORAGE + " INTEGER DEFAULT 0, " + - USER_AGENT + " TEXT DEFAULT '" + UserAgentHelper::SYSTEM_DEFAULT_DATABASE + "', " + - ZOOM_FACTOR + " INTEGER DEFAULT 0, " + - CUSTOM_ZOOM_FACTOR + " REAL DEFAULT 1.0)" - ); - - // Execute the query. - if (!createTableQuery.exec()) - { - // Log any errors. - qDebug().noquote().nospace() << "Error creating table: " << domainsDatabase.lastError(); - } - - // Set the schema version. - domainsDatabase.exec("PRAGMA user_version = " + QString::number(SCHEMA_VERSION)); - } - } - else // Opening the database failed. - { - // Write the last database error message to the debug output. - qDebug().noquote().nospace() << "Error opening database: " << domainsDatabase.lastError(); - } -}; - -QSqlQuery DomainsDatabaseHelper::getDomainQuery(const QString &hostname) -{ - // Get a handle for the domains database. - QSqlDatabase domainsDatabase = QSqlDatabase::database(CONNECTION_NAME); - - // Instantiate the all domain names query. - QSqlQuery allDomainNamesQuery(domainsDatabase); - - // Set the query to be forward only (increases performance while iterating over the query). - allDomainNamesQuery.setForwardOnly(true); - - // Prepare the query. - allDomainNamesQuery.prepare("SELECT " + _ID + "," + DOMAIN_NAME + " FROM " + DOMAINS_TABLE); - - // Execute the query. - allDomainNamesQuery.exec(); - - // Create a domains settings map. - QMap domainSettingsMap; - - // Populate the domain settings map. - while (allDomainNamesQuery.next()) - { - // Add the domain name and database ID to the map. - domainSettingsMap.insert(allDomainNamesQuery.record().field(DomainsDatabaseHelper::DOMAIN_NAME).value().toString(), - allDomainNamesQuery.record().field(DomainsDatabaseHelper::_ID).value().toInt()); - } - - // Initialize the database ID tracker. - int databaseId = -1; - - // Get the database ID if the hostname is found in the domain settings set. - if (domainSettingsMap.contains(hostname)) - { - databaseId = domainSettingsMap.value(hostname); - } - - // Create a subdomain string. - QString subdomain = hostname; - - // Check all the subdomains of the hostname. - while ((databaseId == -1) && subdomain.contains(".")) // Stop checking when a match is found or there are no more `.` in the hostname. - { - // Check to see if the domain settings map contains the subdomain with a `*.` prepended. - if (domainSettingsMap.contains("*." + subdomain)) - { - // Get the database ID. - databaseId = domainSettingsMap.value("*." + subdomain); - } - - // Strip out the first subdomain. - subdomain = subdomain.section('.', 1); - } - - // Instantiate the domain lookup query. - QSqlQuery domainLookupQuery(domainsDatabase); - - // Prepare the domain lookup query. - domainLookupQuery.prepare("SELECT * FROM " + DOMAINS_TABLE + " WHERE " + _ID + " = " + QString::number(databaseId)); - - // Execute the query. - domainLookupQuery.exec(); - - // Move to the first entry. - domainLookupQuery.first(); - - // Return the query. - return domainLookupQuery; -}