X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=src%2Fdatabases%2FCookiesDatabase.cpp;h=e8a870b82d15b00a034e05ccf1e233efb3cc9097;hb=refs%2Fheads%2Fmaster;hp=8464c0624a4f728c4532efa33eacb93f2bbda18e;hpb=83e7c484d2440bfff54e8d02b2d532c2aba755ef;p=PrivacyBrowserPC.git diff --git a/src/databases/CookiesDatabase.cpp b/src/databases/CookiesDatabase.cpp index 8464c06..e8a870b 100644 --- a/src/databases/CookiesDatabase.cpp +++ b/src/databases/CookiesDatabase.cpp @@ -1,5 +1,5 @@ /* - * Copyright © 2022 Soren Stoutner . + * Copyright 2022-2023 Soren Stoutner . * * This file is part of Privacy Browser PC . * @@ -23,17 +23,15 @@ // Define the private static schema constants. const int CookiesDatabase::SCHEMA_VERSION = 0; -// Define the public static database constants. +// Define the public static constants. const QString CookiesDatabase::CONNECTION_NAME = "cookies_database"; const QString CookiesDatabase::COOKIES_TABLE = "cookies"; - -// Define the public static database field names. -const QString CookiesDatabase::_ID = "_id"; const QString CookiesDatabase::DOMAIN = "domain"; -const QString CookiesDatabase::NAME = "name"; -const QString CookiesDatabase::PATH = "path"; const QString CookiesDatabase::EXPIRATION_DATE = "expiration_date"; const QString CookiesDatabase::HTTP_ONLY = "http_only"; +const QString CookiesDatabase::ID = "_id"; +const QString CookiesDatabase::NAME = "name"; +const QString CookiesDatabase::PATH = "path"; const QString CookiesDatabase::SECURE = "secure"; const QString CookiesDatabase::VALUE = "value"; @@ -83,15 +81,14 @@ void CookiesDatabase::addDatabase() // Prepare the create table query. createTableQuery.prepare("CREATE TABLE " + COOKIES_TABLE + "(" + - _ID + " INTEGER PRIMARY KEY, " + - DOMAIN + " TEXT NOT NULL, " + - NAME + " TEXT NOT NULL, " + - PATH + " TEXT NOT NULL, " + - EXPIRATION_DATE + " TEXT, " + - HTTP_ONLY + " INTEGER NOT NULL DEFAULT 0, " + - SECURE + " INTEGER NOT NULL DEFAULT 0, " + - VALUE + " TEXT NOT NULL)" - ); + ID + " INTEGER PRIMARY KEY, " + + DOMAIN + " TEXT NOT NULL, " + + NAME + " TEXT NOT NULL, " + + PATH + " TEXT NOT NULL, " + + EXPIRATION_DATE + " TEXT, " + + HTTP_ONLY + " INTEGER NOT NULL DEFAULT 0, " + + SECURE + " INTEGER NOT NULL DEFAULT 0, " + + VALUE + " TEXT NOT NULL)"); // Execute the query. if (!createTableQuery.exec()) @@ -128,8 +125,15 @@ void CookiesDatabase::addCookie(const QNetworkCookie &cookie) QSqlQuery addCookieQuery(cookiesDatabase); // Prepare the add cookie query. - addCookieQuery.prepare("INSERT INTO " + COOKIES_TABLE + " (" + DOMAIN + ", " + NAME + ", " + PATH + ", " + EXPIRATION_DATE + ", " + HTTP_ONLY + ", " + SECURE + ", " + VALUE + ") " - "VALUES (:domain, :name, :path, :expiration_date, :http_only, :secure, :value)" + addCookieQuery.prepare("INSERT INTO " + COOKIES_TABLE + " (" + + DOMAIN + ", " + + NAME + ", " + + PATH + ", " + + EXPIRATION_DATE + ", " + + HTTP_ONLY + ", " + + SECURE + ", " + + VALUE + ") " + "VALUES (:domain, :name, :path, :expiration_date, :http_only, :secure, :value)" ); // Bind the values. @@ -158,20 +162,20 @@ int CookiesDatabase::cookieCount() countCookiesQuery.setForwardOnly(true); // Prepare the query. - countCookiesQuery.prepare("SELECT " + _ID + " FROM " + COOKIES_TABLE); + countCookiesQuery.prepare("SELECT " + ID + " FROM " + COOKIES_TABLE); // Execute the query. countCookiesQuery.exec(); + // Move to the last row. + countCookiesQuery.last(); + // Initialize a number of cookies variable. int numberOfCookies = 0; // Check to see if the query is valid (there is at least one cookie). if (countCookiesQuery.isValid()) { - // Move to the last row. - countCookiesQuery.last(); - // Get the number of rows (which is zero based) and add one to calculate the number of cookies. numberOfCookies = countCookiesQuery.at() + 1; } @@ -204,7 +208,10 @@ void CookiesDatabase::deleteCookie(const QNetworkCookie &cookie) QSqlQuery deleteCookieQuery(cookiesDatabase); // Prepare the delete cookie query. - deleteCookieQuery.prepare("DELETE FROM " + COOKIES_TABLE + " WHERE " + DOMAIN + " = :domain AND " + NAME + " = :name AND " + PATH + " = :path"); + deleteCookieQuery.prepare("DELETE FROM " + COOKIES_TABLE + " WHERE " + + DOMAIN + " = :domain AND " + + NAME + " = :name AND " + + PATH + " = :path"); // Bind the values. deleteCookieQuery.bindValue(":domain", cookie.domain()); @@ -223,7 +230,7 @@ QList* CookiesDatabase::getCookies() // Instantiate a cookies query. QSqlQuery cookiesQuery(cookiesDatabase); - // Set the query to be forward only. + // Set the query to be forward only, which is more performant. cookiesQuery.setForwardOnly(true); // Prepare the cookies query. @@ -270,7 +277,7 @@ QNetworkCookie* CookiesDatabase::getCookieById(const int &id) cookieQuery.setForwardOnly(true); // Prepare the cookies query. - cookieQuery.prepare("SELECT * FROM " + COOKIES_TABLE + " WHERE " + _ID + " = :id"); + cookieQuery.prepare("SELECT * FROM " + COOKIES_TABLE + " WHERE " + ID + " = :id"); // Bind the values. cookieQuery.bindValue(":id", id); @@ -309,7 +316,10 @@ bool CookiesDatabase::isDurable(const QNetworkCookie &cookie) isDurableQuery.setForwardOnly(true); // Prepare the is durable query. - isDurableQuery.prepare("SELECT " + _ID + " FROM " + COOKIES_TABLE + " WHERE " + DOMAIN + " = :domain AND " + NAME + " = :name AND " + PATH + " = :path"); + isDurableQuery.prepare("SELECT " + ID + " FROM " + COOKIES_TABLE + " WHERE " + + DOMAIN + " = :domain AND " + + NAME + " = :name AND " + + PATH + " = :path"); // Bind the values. isDurableQuery.bindValue(":domain", cookie.domain()); @@ -335,8 +345,14 @@ bool CookiesDatabase::isUpdate(const QNetworkCookie &cookie) QSqlQuery isUpdateQuery(cookiesDatabase); // Prepare the is update query. - isUpdateQuery.prepare("SELECT " + EXPIRATION_DATE + " , " + HTTP_ONLY + " , " + SECURE + " , " + VALUE + " FROM " + COOKIES_TABLE + " WHERE " + DOMAIN + " = :domain AND " + - NAME + " = :name AND " + PATH + " = :path"); + isUpdateQuery.prepare("SELECT " + EXPIRATION_DATE + " , " + + HTTP_ONLY + " , " + + SECURE + " , " + + VALUE + + " FROM " + COOKIES_TABLE + + " WHERE " + DOMAIN + " = :domain AND " + + NAME + " = :name AND " + + PATH + " = :path"); // Bind the values. isUpdateQuery.bindValue(":domain", cookie.domain()); @@ -353,10 +369,10 @@ bool CookiesDatabase::isUpdate(const QNetworkCookie &cookie) if (isUpdateQuery.isValid()) // The cookie exists in the database. { // Check to see if the cookie data has changed. - if ((QDateTime::fromString(isUpdateQuery.value(0).toString(), Qt::ISODate) != cookie.expirationDate()) || - (isUpdateQuery.value(1).toBool() != cookie.isHttpOnly()) || - (isUpdateQuery.value(2).toBool() != cookie.isSecure()) || - (isUpdateQuery.value(3).toString().toUtf8() != cookie.value())) // The cookies data has changed. + if ((QDateTime::fromString(isUpdateQuery.value(EXPIRATION_DATE).toString(), Qt::ISODate) != cookie.expirationDate()) || + (isUpdateQuery.value(HTTP_ONLY).toBool() != cookie.isHttpOnly()) || + (isUpdateQuery.value(SECURE).toBool() != cookie.isSecure()) || + (isUpdateQuery.value(VALUE).toString().toUtf8() != cookie.value())) // The cookies data has changed. { //qDebug() << "The durable cookie data has changed."; @@ -386,9 +402,15 @@ void CookiesDatabase::updateCookie(const QNetworkCookie &cookie) // Create the update cookie query. QSqlQuery updateCookieQuery(cookiesDatabase); - // Prepare the edit cookie query. - updateCookieQuery.prepare("UPDATE " + COOKIES_TABLE + " SET " + EXPIRATION_DATE + " = :expiration_date , " + HTTP_ONLY + " = :http_only , " + SECURE + " = :secure , " + - VALUE + " = :value WHERE " + DOMAIN + " = :domain AND " + NAME + " = :name AND " + PATH + " = :path"); + // Prepare the update cookie query. + updateCookieQuery.prepare("UPDATE " + COOKIES_TABLE + + " SET " + EXPIRATION_DATE + " = :expiration_date , " + + HTTP_ONLY + " = :http_only , " + + SECURE + " = :secure , " + + VALUE + " = :value " + + "WHERE " + DOMAIN + " = :domain AND " + + NAME + " = :name AND " + + PATH + " = :path"); // Bind the values. updateCookieQuery.bindValue(":domain", cookie.domain()); @@ -415,7 +437,10 @@ void CookiesDatabase::updateCookie(const QNetworkCookie &oldCookie, const QNetwo oldCookieQuery.setForwardOnly(true); // Prepare the old cookie query. - oldCookieQuery.prepare("SELECT " + _ID + " FROM " + COOKIES_TABLE + " WHERE " + DOMAIN + " = :domain AND " + NAME + " = :name AND " + PATH + " = :path"); + oldCookieQuery.prepare("SELECT " + ID + " FROM " + COOKIES_TABLE + + " WHERE " + DOMAIN + " = :domain AND " + + NAME + " = :name AND " + + PATH + " = :path"); // Bind the values. oldCookieQuery.bindValue(":domain", oldCookie.domain()); @@ -432,8 +457,15 @@ void CookiesDatabase::updateCookie(const QNetworkCookie &oldCookie, const QNetwo QSqlQuery updateCookieQuery(cookiesDatabase); // Prepare the update cookie query. - updateCookieQuery.prepare("UPDATE " + COOKIES_TABLE + " SET " + DOMAIN + " = :domain , " + NAME + " = :name , " + PATH + " = :path , " + EXPIRATION_DATE + " = :expiration_date , " + - HTTP_ONLY + " = :http_only , " + SECURE + " = :secure , " + VALUE + " = :value WHERE " + _ID + " = :id"); + updateCookieQuery.prepare("UPDATE " + COOKIES_TABLE + + " SET " + DOMAIN + " = :domain , " + + NAME + " = :name , " + + PATH + " = :path , " + + EXPIRATION_DATE + " = :expiration_date , " + + HTTP_ONLY + " = :http_only , " + + SECURE + " = :secure , " + + VALUE + " = :value " + + "WHERE " + ID + " = :id"); // Bind the values. updateCookieQuery.bindValue(":id", oldCookieQuery.value(0).toLongLong());