From 01813e7270df746afa13cbfbd41689514f9b49b5 Mon Sep 17 00:00:00 2001 From: Buschmann Date: Fri, 30 Jun 2017 09:00:04 +0200 Subject: [PATCH] Use 64bit integer to store quota values, also fixes issue #15 --- cmd/CMakeLists.txt | 1 + cmd/imap.cpp | 8 +-- cmd/imap.h | 4 +- cmd/setup.cpp | 5 +- cmd/webcyradmimporter.cpp | 27 ++++----- common/global.h | 37 ++++++++++++ release.sh | 2 +- sql/QMYSQL/0.0.1.sql | 8 +-- src/CMakeLists.txt | 1 + src/accounteditor.cpp | 13 +++-- src/authstoresql.cpp | 3 +- src/domaineditor.cpp | 17 +++--- src/imap/skaffariimap.cpp | 10 ++-- src/imap/skaffariimap.h | 5 +- src/objects/account.cpp | 76 +++++++++++++------------ src/objects/account.h | 23 ++++---- src/objects/account_p.h | 10 ++-- src/objects/adminaccount.cpp | 54 +++++++++--------- src/objects/adminaccount.h | 27 ++++----- src/objects/adminaccount_p.h | 6 +- src/objects/domain.cpp | 106 +++++++++++++++++------------------ src/objects/domain.h | 25 +++++---- src/objects/domain_p.h | 10 ++-- src/objects/folder.cpp | 10 ++-- src/objects/folder.h | 11 ++-- src/objects/folder_p.h | 6 +- src/objects/simpleadmin.cpp | 4 +- src/objects/simpleadmin.h | 5 +- src/objects/simpleadmin_p.h | 4 +- src/objects/simpledomain.cpp | 10 ++-- src/objects/simpledomain.h | 9 +-- src/objects/simpledomain_p.h | 4 +- src/root.cpp | 4 +- src/skaffari.cpp | 3 + src/utils/skaffariconfig.cpp | 12 ++-- src/utils/skaffariconfig.h | 9 +-- src/utils/utils.cpp | 22 ++++---- src/utils/utils.h | 5 +- 38 files changed, 330 insertions(+), 266 deletions(-) create mode 100644 common/global.h diff --git a/cmd/CMakeLists.txt b/cmd/CMakeLists.txt index 7d4bd87..ecb81e4 100644 --- a/cmd/CMakeLists.txt +++ b/cmd/CMakeLists.txt @@ -20,6 +20,7 @@ set(skaffaricmd_SRCS configinput.h ../common/password.cpp ../common/password.h + ../common/global.h tester.cpp tester.h ) diff --git a/cmd/imap.cpp b/cmd/imap.cpp index ab54202..a67910f 100644 --- a/cmd/imap.cpp +++ b/cmd/imap.cpp @@ -273,9 +273,9 @@ QStringList Imap::getCapabilities(bool forceReload) -std::pair Imap::getQuota(const QString &user) +quota_pair Imap::getQuota(const QString &user) { - std::pair quota(0, 0); + quota_pair quota(0, 0); const QString tag = getTag(); const QString command = tag + QLatin1String(" GETQUOTA user") + m_hierarchysep + user + QChar(QChar::CarriageReturn) + QChar(QChar::LineFeed); @@ -295,14 +295,14 @@ std::pair Imap::getQuota(const QString &user) // 8 is the length of "STORAGE" + 1 startUsage += 8; int startQuota = respLine.indexOf(' ', startUsage); - quota.first = respLine.mid(startUsage, startQuota - (startUsage)).toULong(); + quota.first = respLine.mid(startUsage, startQuota - (startUsage)).toULongLong(); // advancing 1 to be at the start of the quota value startQuota++; int endQuota = respLine.indexOf(' ', startQuota); if (endQuota < 0) { endQuota = respLine.indexOf(')', startQuota); } - quota.second = respLine.mid(startQuota, endQuota - startQuota).toULong(); + quota.second = respLine.mid(startQuota, endQuota - startQuota).toULongLong(); } } } diff --git a/cmd/imap.h b/cmd/imap.h index d167779..7cbeaed 100644 --- a/cmd/imap.h +++ b/cmd/imap.h @@ -22,6 +22,8 @@ #include #include +#include "../common/global.h" + class Imap : public QSslSocket { Q_OBJECT @@ -47,7 +49,7 @@ class Imap : public QSslSocket bool logout(); QStringList getCapabilities(bool forceReload = false); - std::pair getQuota(const QString &user); + quota_pair getQuota(const QString &user); void setUser(const QString &user); void setPassword(const QString &password); diff --git a/cmd/setup.cpp b/cmd/setup.cpp index f0e5853..42ef5d2 100644 --- a/cmd/setup.cpp +++ b/cmd/setup.cpp @@ -29,6 +29,7 @@ #include "imap.h" #include "../common/password.h" #include "../common/config.h" +#include "../common/global.h" Setup::Setup(const QString &confFile) : m_confFile(confFile) @@ -516,8 +517,8 @@ int Setup::exec() const os.beginGroup(QStringLiteral("Defaults")); QString defaultLang = os.value(QStringLiteral("language"), QStringLiteral(SK_DEF_DEF_LANGUAGE)).toString(); - quint32 defaultQuota = os.value(QStringLiteral("quota"), SK_DEF_DEF_QUOTA).value(); - quint32 defaultDomainQuota = os.value(QStringLiteral("domainquota"), SK_DEF_DEF_DOMAINQUOTA).value(); + quota_size_t defaultQuota = os.value(QStringLiteral("quota"), SK_DEF_DEF_QUOTA).value(); + quota_size_t defaultDomainQuota = os.value(QStringLiteral("domainquota"), SK_DEF_DEF_DOMAINQUOTA).value(); quint32 defaultMaxAccounts = os.value(QStringLiteral("maxaccounts"), SK_DEF_DEF_MAXACCOUNTS).value(); QString defaultTimezone = os.value(QStringLiteral("timezone"), QStringLiteral(SK_DEF_DEF_TIMEZONE)).toString(); os.endGroup(); diff --git a/cmd/webcyradmimporter.cpp b/cmd/webcyradmimporter.cpp index 78eaeda..d514dcf 100644 --- a/cmd/webcyradmimporter.cpp +++ b/cmd/webcyradmimporter.cpp @@ -36,6 +36,7 @@ #include "imap.h" #include "../common/password.h" #include "../common/config.h" +#include "../common/global.h" #include @@ -175,8 +176,8 @@ int WebCyradmImporter::exec() const QString imappeername; QString defaultLang = vars.value(QStringLiteral("DEFAULTLANG")); - quint32 defaultQuota = vars.value(QStringLiteral("DEFAULT_QUOTA")).toLong(); - quint32 defaultDomainQuota = vars.value(QStringLiteral("DEFAULT_DOMAIN_QUOTA")).toLong(); + quota_size_t defaultQuota = vars.value(QStringLiteral("DEFAULT_QUOTA")).toLongLong(); + quota_size_t defaultDomainQuota = vars.value(QStringLiteral("DEFAULT_DOMAIN_QUOTA")).toLongLong(); QString defaultTimezone; quint32 defaultMaxAccounts = 1000; @@ -465,9 +466,9 @@ int WebCyradmImporter::exec() const return dbError(wq.lastError()); } - QHash domainPrefixId; - QHash domainNameId; - QHash domainFolders; + QHash domainPrefixId; + QHash domainNameId; + QHash domainFolders; if (sq.prepare(QStringLiteral("INSERT INTO domain (domain_name, prefix, maxaccounts, quota, domainquota, transport, freenames, freeaddress, created_at, updated_at) VALUES (?,?,?,?,?,?,?,?,?,?)"))) { while (wq.next()) { @@ -487,7 +488,7 @@ int WebCyradmImporter::exec() const const QStringList folders = wq.value(8).toString().split(QLatin1Char(',')); if (sq.exec()) { - const quint32 id = sq.lastInsertId().value(); + const dbid_t id = sq.lastInsertId().value(); domainPrefixId.insert(prefix, id); domainNameId.insert(name, id); if (!folders.empty()) { @@ -512,7 +513,7 @@ int WebCyradmImporter::exec() const auto i = domainFolders.constBegin(); while (i != domainFolders.constEnd()) { - const quint32 id = i.key(); + const dbid_t id = i.key(); const QStringList folders = i.value(); for (const QString &folder : folders) { sq.addBindValue(id); @@ -542,7 +543,7 @@ int WebCyradmImporter::exec() const return dbError(wq.lastError()); } - QHash adminNameIds; + QHash adminNameIds; if (sq.prepare(QStringLiteral("INSERT INTO adminuser (username, password, type, created_at, updated_at) VALUES (?,?,?,?,?)"))) { while (wq.next()) { @@ -554,7 +555,7 @@ int WebCyradmImporter::exec() const sq.addBindValue(currentTime); if (sq.exec()) { - adminNameIds.insert(name, sq.lastInsertId().value()); + adminNameIds.insert(name, sq.lastInsertId().value()); } else { printFailed(); return dbError(sq.lastError()); @@ -634,7 +635,7 @@ int WebCyradmImporter::exec() const while (wq.next()) { const QString username = wq.value(0).toString(); const QString domainName = wq.value(3).toString(); - std::pair quota = imap.getQuota(username); + quota_pair quota = imap.getQuota(username); sq.addBindValue(domainNameId.value(domainName)); sq.addBindValue(username); sq.addBindValue(wq.value(1)); @@ -755,8 +756,8 @@ int WebCyradmImporter::exec() const auto domainIt = domainPrefixId.constBegin(); while (domainIt != domainPrefixId.constEnd()) { quint32 users; - quint32 quotaused; - const quint32 domainId = domainIt.value(); + quota_size_t quotaused; + const dbid_t domainId = domainIt.value(); if (sq.prepare(QStringLiteral("SELECT COUNT(*) FROM accountuser WHERE domain_id = ?"))) { sq.addBindValue(domainId); if (sq.exec() && sq.next()) { @@ -772,7 +773,7 @@ int WebCyradmImporter::exec() const if (sq.prepare(QStringLiteral("SELECT SUM(quota) FROM accountuser WHERE domain_id = ?"))) { sq.addBindValue(domainId); if (sq.exec() && sq.next()) { - quotaused = sq.value(0).value(); + quotaused = sq.value(0).value(); } else { printFailed(); return dbError(sq.lastError()); diff --git a/common/global.h b/common/global.h new file mode 100644 index 0000000..c04a5a9 --- /dev/null +++ b/common/global.h @@ -0,0 +1,37 @@ +/* + * Skaffari - a mail account administration web interface based on Cutelyst + * Copyright (C) 2017 Matthias Fehring + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program 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 Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#ifndef SKAFFARIGLOBAL_H +#define SKAFFARIGLOBAL_H + +#include +#include + +typedef quint64 quota_size_t; +typedef quint32 dbid_t; +typedef std::pair quota_pair; + +#ifndef SKAFFARI_STRING_TO_DBID +# define SKAFFARI_STRING_TO_DBID(str) str.toULong() +#endif + +#ifndef qUtf8Printable +# define qUtf8Printable(string) QString(string).toUtf8().constData() +#endif + +#endif // SKAFFARIGLOBAL_H diff --git a/release.sh b/release.sh index cf3a72a..2e641e1 100755 --- a/release.sh +++ b/release.sh @@ -43,7 +43,7 @@ for TMPL in default do pushd $TMPL npm update --dev - ./gulp --production + ./gulp pushd static find $PWD -type f -name "*.css" -o -type f -name "*.js" | parallel compasset popd diff --git a/sql/QMYSQL/0.0.1.sql b/sql/QMYSQL/0.0.1.sql index 2a290ea..ac96d97 100644 --- a/sql/QMYSQL/0.0.1.sql +++ b/sql/QMYSQL/0.0.1.sql @@ -9,7 +9,7 @@ CREATE TABLE IF NOT EXISTS accountuser ( pop tinyint(1) unsigned NOT NULL DEFAULT 1, sieve tinyint(1) unsigned NOT NULL DEFAULT 1, smtpauth tinyint(1) unsigned NOT NULL DEFAULT 1, - quota int(10) unsigned NOT NULL DEFAULT 0, + quota bigint(20) unsigned NOT NULL DEFAULT 0, created_at datetime NOT NULL DEFAULT '2000-01-01 00:00:00', updated_at datetime NOT NULL DEFAULT '2000-01-01 00:00:00', valid_until datetime NOT NULL DEFAULT '2998-12-31 23:59:59', @@ -44,9 +44,9 @@ CREATE TABLE IF NOT EXISTS domain ( domain_name varchar(255) NOT NULL, prefix varchar(50) NOT NULL, maxaccounts int(11) NOT NULL DEFAULT 20, - quota int(10) unsigned NOT NULL DEFAULT 100000, - domainquota int(10) unsigned NOT NULL DEFAULT 0, - domainquotaused int(10) unsigned NOT NULL DEFAULT 0, + quota bigint(20) unsigned NOT NULL DEFAULT 100000, + domainquota bigint(20) unsigned NOT NULL DEFAULT 0, + domainquotaused bigint(20) unsigned NOT NULL DEFAULT 0, transport varchar(255) NOT NULL DEFAULT 'cyrus', freenames tinyint(1) unsigned NOT NULL DEFAULT 0, freeaddress tinyint(1) unsigned NOT NULL DEFAULT 0, diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ee6b25b..1897a2a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -55,6 +55,7 @@ set(skaffari_SRCS skaffari.h ../common/password.cpp ../common/password.h + ../common/global.h ) # Create the application diff --git a/src/accounteditor.cpp b/src/accounteditor.cpp index 9884705..498fcff 100644 --- a/src/accounteditor.cpp +++ b/src/accounteditor.cpp @@ -25,6 +25,7 @@ #include "objects/helpentry.h" #include "utils/skaffariconfig.h" #include "utils/utils.h" +#include "../common/global.h" #include #include // includes the main validator @@ -50,10 +51,10 @@ AccountEditor::~AccountEditor() void AccountEditor::base(Context* c, const QString &domainId, const QString& accountId) { - const quint32 domId = domainId.toULong(); + const dbid_t domId = SKAFFARI_STRING_TO_DBID(domainId); if (Domain::checkAccess(c, domId)) { Domain::toStash(c, domId); - Account::toStash(c, Domain::fromStash(c), accountId.toULong()); + Account::toStash(c, Domain::fromStash(c), SKAFFARI_STRING_TO_DBID(accountId)); } } @@ -65,7 +66,7 @@ void AccountEditor::edit(Context* c) Account a = Account::fromStash(c); Domain dom = Domain::fromStash(c); - const quint32 freeQuota = (dom.getDomainQuota() - dom.getDomainQuotaUsed() + a.getQuota()); + const quota_size_t freeQuota = (dom.getDomainQuota() - dom.getDomainQuotaUsed() + a.getQuota()); auto req = c->req(); @@ -96,7 +97,7 @@ void AccountEditor::edit(Context* c) bool enoughQuotaLeft = true; if (dom.getDomainQuota() > 0) { - quint32 accQuota = 0; + quota_size_t accQuota = 0; bool quotaOk = true; if (p.contains(QStringLiteral("humanQuota"))) { @@ -156,8 +157,8 @@ void AccountEditor::edit(Context* c) const QString quotaTitle = c->translate("DomainEditor", "Quota"); if (dom.getDomainQuota() > 0) { - help.insert(QStringLiteral("quota"), HelpEntry(quotaTitle, c->translate("AccountEditor", "You have to set a storage quota for this account that does not exceed %1.").arg(Utils::humanBinarySize(c, static_cast(freeQuota) * Q_UINT64_C(1024))))); - help.insert(QStringLiteral("humanQuota"), HelpEntry(quotaTitle, c->translate("AccountEditor", "You have to set a storage quota for this account that does not exceed %1. You can use the multipliers M, MiB, G, GiB, T and TiB. Without a multiplier, KiB is the default.").arg(Utils::humanBinarySize(c, static_cast(freeQuota) * Q_UINT64_C(1024))))); + help.insert(QStringLiteral("quota"), HelpEntry(quotaTitle, c->translate("AccountEditor", "You have to set a storage quota for this account that does not exceed %1.").arg(Utils::humanBinarySize(c, freeQuota * Q_UINT64_C(1024))))); + help.insert(QStringLiteral("humanQuota"), HelpEntry(quotaTitle, c->translate("AccountEditor", "You have to set a storage quota for this account that does not exceed %1. You can use the multipliers M, MiB, G, GiB, T and TiB. Without a multiplier, KiB is the default.").arg(Utils::humanBinarySize(c, freeQuota * Q_UINT64_C(1024))))); } else { help.insert(QStringLiteral("quota"), HelpEntry(quotaTitle, c->translate("AccountEditor", "You can freely set a storage quota for this account or set the quota to 0 to disable it."))); help.insert(QStringLiteral("humanQuota"), HelpEntry(quotaTitle, c->translate("AccountEditor", "You can freely set a storage quota for this account or set the quota to 0 to disable it. You can use the multipliers M, MiB, G, GiB, T and TiB. Without a multiplier, KiB is the default."))); diff --git a/src/authstoresql.cpp b/src/authstoresql.cpp index 7f9da30..b26e7a5 100644 --- a/src/authstoresql.cpp +++ b/src/authstoresql.cpp @@ -22,6 +22,7 @@ #include #include #include +#include "../common/global.h" AuthStoreSql::AuthStoreSql(QObject *parent) : AuthenticationStore(parent) { @@ -52,7 +53,7 @@ AuthenticationUser AuthStoreSql::findUser(Context *c, const ParamsMultiMap &user } q = CPreparedSqlQueryThread(QStringLiteral("SELECT domain_id FROM domainadmin WHERE admin_id = :admin_id")); - q.bindValue(QStringLiteral(":admin_id"), QVariant::fromValue(user.id().toULong())); + q.bindValue(QStringLiteral(":admin_id"), QVariant::fromValue(user.id().toULong())); q.exec(); diff --git a/src/domaineditor.cpp b/src/domaineditor.cpp index df4d290..b2a5e1a 100644 --- a/src/domaineditor.cpp +++ b/src/domaineditor.cpp @@ -23,6 +23,7 @@ #include "objects/helpentry.h" #include "utils/skaffariconfig.h" #include "utils/utils.h" +#include "../common/global.h" #include // includes the main validator #include // includes all validator rules @@ -71,7 +72,7 @@ void DomainEditor::index(Context *c) void DomainEditor::base(Context* c, const QString &id) { - const quint32 domainId = id.toULong(); + const dbid_t domainId = SKAFFARI_STRING_TO_DBID(id); if (Domain::checkAccess(c, domainId)) { Domain::toStash(c, domainId); } @@ -265,9 +266,9 @@ void DomainEditor::create(Context* c) c->stash({ {QStringLiteral("defQuota"), SkaffariConfig::defQuota()}, - {QStringLiteral("defHumanQuota"), Utils::humanBinarySize(c, static_cast(SkaffariConfig::defQuota()) * Q_UINT64_C(1024))}, + {QStringLiteral("defHumanQuota"), Utils::humanBinarySize(c, SkaffariConfig::defQuota() * Q_UINT64_C(1024))}, {QStringLiteral("defDomainQuota"), SkaffariConfig::defDomainquota()}, - {QStringLiteral("defHumanDomainQuota"), Utils::humanBinarySize(c, static_cast(SkaffariConfig::defDomainquota()) * Q_UINT64_C(1024))}, + {QStringLiteral("defHumanDomainQuota"), Utils::humanBinarySize(c, SkaffariConfig::defDomainquota() * Q_UINT64_C(1024))}, {QStringLiteral("defMaxAccounts"), SkaffariConfig::defMaxaccounts()}, {QStringLiteral("template"), QStringLiteral("domain/create.html")}, {QStringLiteral("domainAsPrefix"), SkaffariConfig::imapDomainasprefix()}, @@ -378,7 +379,7 @@ void DomainEditor::add_account(Context* c) if (Q_LIKELY((user.value(QStringLiteral("type")).value() == 0) || user.value(QStringLiteral("domains")).value().contains(dom.id()))) { - const quint32 freeQuota = (dom.getDomainQuota() - dom.getDomainQuotaUsed()); + const quota_size_t freeQuota = (dom.getDomainQuota() - dom.getDomainQuotaUsed()); auto req = c->req(); @@ -428,7 +429,7 @@ void DomainEditor::add_account(Context* c) if (dom.getDomainQuota() > 0) { - quint32 accQuota = 0; + quota_size_t accQuota = 0; bool quotaOk = true; if (p.contains(QStringLiteral("humanQuota"))) { @@ -571,8 +572,8 @@ void DomainEditor::add_account(Context* c) const QString domainQuotaTitle = c->translate("DomainEditor", "DomainQuota"); if (dom.getDomainQuota() > 0) { help.insert(QStringLiteral("domainQuota"), HelpEntry(domainQuotaTitle, c->translate("DomainEditor", "Used and total amount of storage quota for this domain."))); - help.insert(QStringLiteral("quota"), HelpEntry(quotaTitle, c->translate("DomainEditor", "You have to set a storage quota for this account that does not exceed %1 KiB.").arg(static_cast(freeQuota) * Q_UINT64_C(1024)))); - help.insert(QStringLiteral("humanQuota"), HelpEntry(quotaTitle, c->translate("DomainEditor", "You have to set a storage quota for this account that does not exceed %1. You can use the multipliers M, MiB, G, GiB, T and TiB. Without a multiplier, KiB is the default.").arg(Utils::humanBinarySize(c, static_cast(freeQuota) * Q_UINT64_C(1024))))); + help.insert(QStringLiteral("quota"), HelpEntry(quotaTitle, c->translate("DomainEditor", "You have to set a storage quota for this account that does not exceed %1 KiB.").arg(freeQuota * Q_UINT64_C(1024)))); + help.insert(QStringLiteral("humanQuota"), HelpEntry(quotaTitle, c->translate("DomainEditor", "You have to set a storage quota for this account that does not exceed %1. You can use the multipliers M, MiB, G, GiB, T and TiB. Without a multiplier, KiB is the default.").arg(Utils::humanBinarySize(c, freeQuota * Q_UINT64_C(1024))))); } else { help.insert(QStringLiteral("domainQuota"), HelpEntry(domainQuotaTitle, c->translate("DomainEditor", "This domain has no overall quota limit, so the value shows the sum of the quota limit of all accounts in this domain."))); help.insert(QStringLiteral("quota"), HelpEntry(quotaTitle, c->translate("DomainEditor", "You can freely set a storage quota for this account or set the quota to 0 to disable it."))); @@ -636,7 +637,7 @@ void DomainEditor::check(Context *c) if (Q_LIKELY(q.exec())) { QStringList accountIds; while (q.next()) { - accountIds << QString::number(q.value(0).value()); + accountIds << QString::number(q.value(0).value()); } c->setStash(QStringLiteral("accountids"), accountIds.join(QLatin1Char(','))); } else { diff --git a/src/imap/skaffariimap.cpp b/src/imap/skaffariimap.cpp index 90c64fd..c970b15 100644 --- a/src/imap/skaffariimap.cpp +++ b/src/imap/skaffariimap.cpp @@ -298,9 +298,9 @@ QStringList SkaffariIMAP::getCapabilities(bool forceReload) } -std::pair SkaffariIMAP::getQuota(const QString &user) +quota_pair SkaffariIMAP::getQuota(const QString &user) { - std::pair quota(0, 0); + quota_pair quota(0, 0); setNoError(); @@ -323,14 +323,14 @@ std::pair SkaffariIMAP::getQuota(const QString &user) // 8 is the length of "STORAGE" + 1 startUsage += 8; int startQuota = respLine.indexOf(' ', startUsage); - quota.first = respLine.mid(startUsage, startQuota - (startUsage)).toULong(); + quota.first = respLine.mid(startUsage, startQuota - (startUsage)).toULongLong(); // advancing 1 to be at the start of the quota value startQuota++; int endQuota = respLine.indexOf(' ', startQuota); if (endQuota < 0) { endQuota = respLine.indexOf(')', startQuota); } - quota.second = respLine.mid(startQuota, endQuota - startQuota).toULong(); + quota.second = respLine.mid(startQuota, endQuota - startQuota).toULongLong(); } else { qCWarning(SK_IMAP, "Can not extract storage quota values for user %s from IMAP server response.", user.toUtf8().constData()); } @@ -345,7 +345,7 @@ std::pair SkaffariIMAP::getQuota(const QString &user) } -bool SkaffariIMAP::setQuota(const QString &user, quint32 quota) +bool SkaffariIMAP::setQuota(const QString &user, quota_size_t quota) { bool ok = false; diff --git a/src/imap/skaffariimap.h b/src/imap/skaffariimap.h index 3998d3e..01d57f4 100644 --- a/src/imap/skaffariimap.h +++ b/src/imap/skaffariimap.h @@ -23,6 +23,7 @@ #include #include "skaffariimaperror.h" +#include "../../common/global.h" Q_DECLARE_LOGGING_CATEGORY(SK_IMAP) @@ -59,8 +60,8 @@ class SkaffariIMAP : public QSslSocket bool isLoggedIn() const; QStringList getCapabilities(bool forceReload = false); - std::pair getQuota(const QString &user); - bool setQuota(const QString &user, quint32 quota); + quota_pair getQuota(const QString &user); + bool setQuota(const QString &user, quota_size_t quota); bool createMailbox(const QString &user); bool deleteMailbox(const QString &user); bool createFolder(const QString &folder); diff --git a/src/objects/account.cpp b/src/objects/account.cpp index c2177b1..414a58b 100644 --- a/src/objects/account.cpp +++ b/src/objects/account.cpp @@ -47,7 +47,7 @@ Account::Account() : } -Account::Account(quint32 id, quint32 domainId, const QString& username, const QString &prefix, const QString &domainName, bool imap, bool pop, bool sieve, bool smtpauth, const QStringList &addresses, const QStringList &forwards, quint32 quota, quint32 usage, const QDateTime &created, const QDateTime &updated, const QDateTime &validUntil, bool keepLocal, bool catchAll) : +Account::Account(dbid_t id, dbid_t domainId, const QString& username, const QString &prefix, const QString &domainName, bool imap, bool pop, bool sieve, bool smtpauth, const QStringList &addresses, const QStringList &forwards, quota_size_t quota, quota_size_t usage, const QDateTime &created, const QDateTime &updated, const QDateTime &validUntil, bool keepLocal, bool catchAll) : d(new AccountData(id, domainId, username, prefix, domainName, imap, pop, sieve, smtpauth, addresses, forwards, quota, usage, created, updated, validUntil, keepLocal, catchAll)) { @@ -73,25 +73,25 @@ Account::~Account() } -quint32 Account::getId() const +dbid_t Account::getId() const { return d->id; } -void Account::setId(quint32 nId) +void Account::setId(dbid_t nId) { d->id = nId; } -quint32 Account::getDomainId() const +dbid_t Account::getDomainId() const { return d->domainId; } -void Account::setDomainId(quint32 nDomainId) +void Account::setDomainId(dbid_t nDomainId) { d->domainId = nDomainId; } @@ -217,13 +217,13 @@ void Account::setForwards(const QStringList &nForwards) -quint32 Account::getQuota() const +quota_size_t Account::getQuota() const { return d->quota; } -void Account::setQuota(quint32 nQuota) +void Account::setQuota(quota_size_t nQuota) { d->quota = nQuota; } @@ -241,13 +241,13 @@ void Account::setHumanQuota(const QString &humanQuota) } -quint32 Account::getUsage() const +quota_size_t Account::getUsage() const { return d->usage; } -void Account::setUsage(quint32 nUsage) +void Account::setUsage(quota_size_t nUsage) { d->usage = nUsage; } @@ -408,7 +408,7 @@ Account Account::create(Cutelyst::Context *c, SkaffariError *e, const Cutelyst:: const bool smtpauth = (p.value(QStringLiteral("smtpauth"), QStringLiteral("0")) == QLatin1String("1")); const bool _catchAll = (p.value(QStringLiteral("catchall"), QStringLiteral("0")) == QLatin1String("1")); - quint32 quota = 0; + quota_size_t quota = 0; if (p.contains(QStringLiteral("humanQuota"))) { bool quotaOk = true; quota = Utils::humanToIntSize(c, p.value(QStringLiteral("humanQuota")), "aOk); @@ -418,7 +418,7 @@ Account Account::create(Cutelyst::Context *c, SkaffariError *e, const Cutelyst:: return a; } } else { - quota = p.value(QStringLiteral("quota"), QStringLiteral("0")).toULong(); + quota = p.value(QStringLiteral("quota"), QStringLiteral("0")).toULongLong(); } const QDateTime currentUtc = QDateTime::currentDateTimeUtc(); @@ -457,7 +457,7 @@ Account Account::create(Cutelyst::Context *c, SkaffariError *e, const Cutelyst:: return a; } - const quint32 id = q.lastInsertId().value(); + const dbid_t id = q.lastInsertId().value(); q = CPreparedSqlQueryThread(QStringLiteral("INSERT INTO virtual (alias, dest, username, status) VALUES (:alias, :dest, :username, :status)")); q.bindValue(QStringLiteral(":alias"), addressToACE(email)); @@ -662,13 +662,12 @@ Account Account::create(Cutelyst::Context *c, SkaffariError *e, const Cutelyst:: a.setSmtpauthEnabled(smtpauth); a.setQuota(quota); a.setAddresses(QStringList(email)); - a.setQuota(p.value(QStringLiteral("quota")).toULong()); const QDateTime currentUserTime = Utils::toUserTZ(c, currentUtc); a.setCreated(currentUserTime); a.setUpdated(currentUserTime); a.setValidUntil(Utils::toUserTZ(c, validUntil)); - a.setHumanQuota(Utils::humanBinarySize(c, (quint64)a.getQuota() * 1024)); - a.setHumanUsage(Utils::humanBinarySize(c, (quint64)a.getUsage() * 1024)); + a.setHumanQuota(Utils::humanBinarySize(c, a.getQuota() * 1024)); + a.setHumanUsage(Utils::humanBinarySize(c, a.getUsage() * 1024)); a.setCatchAll(_catchAll); qCInfo(SK_ACCOUNT) << c->stash(QStringLiteral("userName")).toString() << "created a new account" << username << "for domain" << d.getName(); @@ -719,7 +718,7 @@ bool Account::remove(Cutelyst::Context *c, SkaffariError *e, const QString &user QSqlQuery q = CPreparedSqlQueryThread(QStringLiteral("SELECT quota FROM accountuser WHERE username = :username")); q.bindValue(QStringLiteral(":username"), username); - const quint32 quota = (q.exec() && q.next()) ? q.value(0).value() : 0; + const quota_size_t quota = (q.exec() && q.next()) ? q.value(0).value() : 0; q = CPreparedSqlQueryThread(QStringLiteral("DELETE FROM alias WHERE username = :username")); q.bindValue(QStringLiteral(":username"), username); @@ -859,7 +858,7 @@ Cutelyst::Pagination Account::list(Cutelyst::Context *c, SkaffariError *e, const const QString catchAllAlias = QLatin1Char('@') + QString::fromLatin1(QUrl::toAce(d.getName())); while (q.next()) { - const quint32 id = q.value(0).value(); + const dbid_t id = q.value(0).value(); const QString username = q.value(1).toString(); QStringList emailAddresses; @@ -918,7 +917,7 @@ Cutelyst::Pagination Account::list(Cutelyst::Context *c, SkaffariError *e, const } - Account a(q.value(0).value(), + Account a(q.value(0).value(), d.id(), q.value(1).toString(), d.getPrefix(), @@ -929,7 +928,7 @@ Cutelyst::Pagination Account::list(Cutelyst::Context *c, SkaffariError *e, const q.value(5).toBool(), emailAddresses, aliases, - q.value(6).value(), + q.value(6).value(), 0, Utils::toUserTZ(c, q.value(7).toDateTime()), Utils::toUserTZ(c, q.value(8).toDateTime()), @@ -938,13 +937,13 @@ Cutelyst::Pagination Account::list(Cutelyst::Context *c, SkaffariError *e, const _catchAll); if (Q_LIKELY(imap.isLoggedIn())) { - std::pair quota = imap.getQuota(a.getUsername()); + quota_pair quota = imap.getQuota(a.getUsername()); a.setUsage(quota.first); a.setQuota(quota.second); } - a.setHumanQuota(Utils::humanBinarySize(c, (quint64)a.getQuota() * 1024)); - a.setHumanUsage(Utils::humanBinarySize(c, (quint64)a.getUsage() * 1024)); + a.setHumanQuota(Utils::humanBinarySize(c, a.getQuota() * 1024)); + a.setHumanUsage(Utils::humanBinarySize(c, a.getUsage() * 1024)); lst.push_back(a); } @@ -957,7 +956,7 @@ Cutelyst::Pagination Account::list(Cutelyst::Context *c, SkaffariError *e, const } -Account Account::get(Cutelyst::Context *c, SkaffariError *e, const Domain &d, quint32 id) +Account Account::get(Cutelyst::Context *c, SkaffariError *e, const Domain &d, dbid_t id) { Account a; @@ -979,13 +978,13 @@ Account Account::get(Cutelyst::Context *c, SkaffariError *e, const Domain &d, qu } - a.setId(q.value(0).value()); + a.setId(q.value(0).value()); a.setUsername(q.value(1).toString()); a.setImapEnabled(q.value(2).toBool()); a.setPopEnabled(q.value(3).toBool()); a.setSieveEnabled(q.value(4).toBool()); a.setSmtpauthEnabled(q.value(5).toBool()); - a.setQuota(q.value(6).value()); + a.setQuota(q.value(6).value()); a.setCreated(Utils::toUserTZ(c, q.value(7).toDateTime())); a.setUpdated(Utils::toUserTZ(c, q.value(8).toDateTime())); a.setValidUntil(Utils::toUserTZ(c, q.value(9).toDateTime())); @@ -1049,20 +1048,20 @@ Account Account::get(Cutelyst::Context *c, SkaffariError *e, const Domain &d, qu SkaffariIMAP imap(c); if (imap.login()) { - std::pair quota = imap.getQuota(a.getUsername()); + quota_pair quota = imap.getQuota(a.getUsername()); a.setUsage(quota.first); a.setQuota(quota.second); imap.logout(); } - a.setHumanQuota(Utils::humanBinarySize(c, (quint64)a.getQuota() * 1024)); - a.setHumanUsage(Utils::humanBinarySize(c, (quint64)a.getUsage() * 1024)); + a.setHumanQuota(Utils::humanBinarySize(c, a.getQuota() * 1024)); + a.setHumanUsage(Utils::humanBinarySize(c, a.getUsage() * 1024)); return a; } -void Account::toStash(Cutelyst::Context *c, const Domain &d, quint32 accountId) +void Account::toStash(Cutelyst::Context *c, const Domain &d, dbid_t accountId) { Q_ASSERT_X(c, "account to stash", "invalid context object"); @@ -1115,7 +1114,7 @@ bool Account::update(Cutelyst::Context *c, SkaffariError *e, Account *a, Domain } } - quint32 quota = 0; + quota_size_t quota = 0; if (p.contains(QStringLiteral("humanQuota"))) { bool quotaOk = true; quota = Utils::humanToIntSize(c, p.value(QStringLiteral("humanQuota")), "aOk); @@ -1125,7 +1124,12 @@ bool Account::update(Cutelyst::Context *c, SkaffariError *e, Account *a, Domain return ret; } } else { - quota = p.value(QStringLiteral("quota"), QStringLiteral("0")).toULong(); + bool quotaOk = true; + quota = p.value(QStringLiteral("quota"), QStringLiteral("0")).toULongLong("aOk); + if (!quotaOk) { + e->setErrorType(SkaffariError::InputError); + e->setErrorText(c->translate("Account", "Failed to parse quota string into integer value.")); + } } if (quota != a->getQuota()) { @@ -1226,7 +1230,7 @@ bool Account::update(Cutelyst::Context *c, SkaffariError *e, Account *a, Domain a->setValidUntil(Utils::toUserTZ(c, validUntil)); a->setQuota(quota); - a->setHumanQuota(Utils::humanBinarySize(c, static_cast(quota) * Q_UINT64_C(1024))); + a->setHumanQuota(Utils::humanBinarySize(c, quota * Q_UINT64_C(1024))); a->setUpdated(Utils::toUserTZ(c, currentTimeUtc)); a->setImapEnabled(imap); a->setPopEnabled(pop); @@ -1240,8 +1244,8 @@ bool Account::update(Cutelyst::Context *c, SkaffariError *e, Account *a, Domain qCDebug(SK_ACCOUNT) << q.lastError().text(); } else { if (Q_LIKELY(q.next())) { - d->setDomainQuotaUsed(q.value(0).value()); - d->setHumanDomainQuotaUsed(Utils::humanBinarySize(c, static_cast(d->getDomainQuotaUsed()) * Q_UINT64_C(1024))); + d->setDomainQuotaUsed(q.value(0).value()); + d->setHumanDomainQuotaUsed(Utils::humanBinarySize(c, d->getDomainQuotaUsed() * Q_UINT64_C(1024))); } } @@ -1291,10 +1295,10 @@ bool Account::check(Cutelyst::Context *c, SkaffariError *e, Account *a, const Do } } - std::pair quota = imap.getQuota(a->getUsername()); + quota_pair quota = imap.getQuota(a->getUsername()); if ((d.getDomainQuota() > 0) && ((a->getQuota() == 0) || (quota.second == 0))) { - const quint32 newQuota = (d.getQuota() > 0) ? d.getQuota() : (SkaffariConfig::defQuota() > 0) ? SkaffariConfig::defQuota() : 10240; + const quota_size_t newQuota = (d.getQuota() > 0) ? d.getQuota() : (SkaffariConfig::defQuota() > 0) ? SkaffariConfig::defQuota() : 10240; if (quota.second == 0) { if (Q_UNLIKELY(!imap.setQuota(a->getUsername(), newQuota))) { e->setImapError(imap.lastError()); diff --git a/src/objects/account.h b/src/objects/account.h index ff9701e..74ae6b7 100644 --- a/src/objects/account.h +++ b/src/objects/account.h @@ -28,6 +28,7 @@ #include #include #include +#include "../../common/global.h" Q_DECLARE_LOGGING_CATEGORY(SK_ACCOUNT) @@ -73,7 +74,7 @@ class Account * \param keepLocal \c true if fowarded emails should be kept local too * \param catchAll \c true if this is the catch all account for the \a domainName */ - Account(quint32 id, quint32 domainId, const QString &username, const QString &prefix, const QString &domainName, bool imap, bool pop, bool sieve, bool smtpauth, const QStringList &addresses, const QStringList &forwards, quint32 quota, quint32 usage, const QDateTime &created, const QDateTime &updated, const QDateTime &validUntil, bool keepLocal, bool catchAll); + Account(dbid_t id, dbid_t domainId, const QString &username, const QString &prefix, const QString &domainName, bool imap, bool pop, bool sieve, bool smtpauth, const QStringList &addresses, const QStringList &forwards, quota_size_t quota, quota_size_t usage, const QDateTime &created, const QDateTime &updated, const QDateTime &validUntil, bool keepLocal, bool catchAll); /*! * \brief Creates a copy of \a other. @@ -107,7 +108,7 @@ class Account * * \sa setId() */ - quint32 getId() const; + dbid_t getId() const; /*! * \brief Returns the database ID of the domain the account belongs to. * @@ -115,7 +116,7 @@ class Account * * \sa setDomainId() */ - quint32 getDomainId() const; + dbid_t getDomainId() const; /*! * \brief Returns the username of the account. * @@ -195,7 +196,7 @@ class Account * * \sa getHumanQuota(), setQuota() */ - quint32 getQuota() const; + quota_size_t getQuota() const; /*! * \brief Returns a better human readable string of the quota defined for this account. * @@ -211,7 +212,7 @@ class Account * * \sa getHumanUsage(), setUsage() */ - quint32 getUsage() const; + quota_size_t getUsage() const; /*! * \brief Returns a better human redable string of the quota used by this account. * @@ -283,12 +284,12 @@ class Account * \brief Sets the database ID of this account. * \sa getId() */ - void setId(quint32 nId); + void setId(dbid_t nId); /*! * \brief Sets the databsae ID of the domain this account belongs to. * \sa getDomainId() */ - void setDomainId(quint32 nDomainId); + void setDomainId(dbid_t nDomainId); /*! * \brief Sets the username of this account. * \sa getUsername() @@ -338,7 +339,7 @@ class Account * \brief Sets the quota in KiB that is defined for this account. * \sa getQuota() */ - void setQuota(quint32 nQuota); + void setQuota(quota_size_t nQuota); /*! * \brief Sets the human readable string of quota defined for this account. * \sa getHumanQuota(), Utils::humanBinarySize() @@ -348,7 +349,7 @@ class Account * \brief Sets the amount of quota used by this account in KiB. * \sa getUsage() */ - void setUsage(quint32 nUsage); + void setUsage(quota_size_t nUsage); /*! * \brief Sets the human readale string of quota used by this account. * \sa getHumanUsage(), Utils::humanBinarySize() @@ -452,7 +453,7 @@ class Account * \param id The database ID of the account. * \return Account object containg the account data. */ - static Account get(Cutelyst::Context *c, SkaffariError *e, const Domain &d, quint32 id); + static Account get(Cutelyst::Context *c, SkaffariError *e, const Domain &d, dbid_t id); /*! * \brief Requests information about the account defined by \a accountId from the database and adds it to the stash. @@ -461,7 +462,7 @@ class Account * \param accountId The database ID of the account. * \sa fromStash() */ - static void toStash(Cutelyst::Context *c, const Domain &d, quint32 accountId); + static void toStash(Cutelyst::Context *c, const Domain &d, dbid_t accountId); /*! * \brief Returns the current Account object from the stash. diff --git a/src/objects/account_p.h b/src/objects/account_p.h index df4331b..dfc9186 100644 --- a/src/objects/account_p.h +++ b/src/objects/account_p.h @@ -27,7 +27,7 @@ class AccountData: public QSharedData public: AccountData() {} - AccountData(quint32 _id, quint32 _domainId, const QString &_username, const QString &_prefix, const QString &_domainName, bool _imap, bool _pop, bool _sieve, bool _smptauth, const QStringList &_addresses, const QStringList _forwards, quint32 _quota, quint32 _usage, const QDateTime &_created, const QDateTime &_updated, const QDateTime &_validUntil, bool _keepLocal, bool _catchAll) : + AccountData(dbid_t _id, dbid_t _domainId, const QString &_username, const QString &_prefix, const QString &_domainName, bool _imap, bool _pop, bool _sieve, bool _smptauth, const QStringList &_addresses, const QStringList _forwards, quota_size_t _quota, quota_size_t _usage, const QDateTime &_created, const QDateTime &_updated, const QDateTime &_validUntil, bool _keepLocal, bool _catchAll) : id(_id), domainId(_domainId), username(_username), @@ -74,8 +74,8 @@ class AccountData: public QSharedData ~AccountData() {} - quint32 id = 0; - quint32 domainId = 0; + dbid_t id = 0; + dbid_t domainId = 0; QString username; QString prefix; QString domainName; @@ -85,9 +85,9 @@ class AccountData: public QSharedData bool smtpauth = false; QStringList addresses; QStringList forwards; - quint32 quota = 0; + quota_size_t quota = 0; QString humanQuota; - quint32 usage = 0; + quota_size_t usage = 0; QString humanUsage; QDateTime created; QDateTime updated; diff --git a/src/objects/adminaccount.cpp b/src/objects/adminaccount.cpp index 1b4666f..4c33632 100644 --- a/src/objects/adminaccount.cpp +++ b/src/objects/adminaccount.cpp @@ -40,7 +40,7 @@ AdminAccount::AdminAccount() : } -AdminAccount::AdminAccount(quint32 id, const QString& username, qint16 type, const QList &domains) : +AdminAccount::AdminAccount(dbid_t id, const QString& username, qint16 type, const QList &domains) : d(new AdminAccountData(id, username, type, domains)) { @@ -68,13 +68,13 @@ AdminAccount::~AdminAccount() } -quint32 AdminAccount::getId() const +dbid_t AdminAccount::getId() const { return d->id; } -void AdminAccount::setId(quint32 id) +void AdminAccount::setId(dbid_t id) { d->id = id; } @@ -108,14 +108,14 @@ void AdminAccount::setType(qint16 nType) -QList AdminAccount::getDomains() const +QList AdminAccount::getDomains() const { return d->domains; } -void AdminAccount::setDomains(const QList &nDomains) +void AdminAccount::setDomains(const QList &nDomains) { d->domains = nDomains; } @@ -247,7 +247,7 @@ AdminAccount AdminAccount::create(Cutelyst::Context *c, const Cutelyst::ParamsMu const qint16 type = params.value(QStringLiteral("type")).toShort(); - const quint32 id = AdminAccount::setAdminAccount(c, error, params.value(QStringLiteral("username")), password, type); + const dbid_t id = AdminAccount::setAdminAccount(c, error, params.value(QStringLiteral("username")), password, type); if (id <= 0) { return aa; } @@ -257,7 +257,7 @@ AdminAccount AdminAccount::create(Cutelyst::Context *c, const Cutelyst::ParamsMu return aa; } - QList domIds; + QList domIds; QStringList assocdoms = params.values(QStringLiteral("assocdomains")); for (const QString &did : assocdoms) { domIds << did.toULong(); @@ -310,10 +310,10 @@ QVector AdminAccount::list(Cutelyst::Context *c, SkaffariError *er } while (q.next()) { - list.append(AdminAccount(q.value(0).value(), + list.append(AdminAccount(q.value(0).value(), q.value(1).toString(), static_cast(q.value(2).value()), - QList())); + QList())); } return list; @@ -321,7 +321,7 @@ QVector AdminAccount::list(Cutelyst::Context *c, SkaffariError *er -AdminAccount AdminAccount::get(Cutelyst::Context *c, SkaffariError *e, quint32 id) +AdminAccount AdminAccount::get(Cutelyst::Context *c, SkaffariError *e, dbid_t id) { AdminAccount acc; @@ -367,9 +367,9 @@ AdminAccount AdminAccount::get(Cutelyst::Context *c, SkaffariError *e, quint32 i return acc; } - QList doms; + QList doms; while (q.next()) { - doms.append(q.value(0).value()); + doms.append(q.value(0).value()); } acc.setDomains(doms); @@ -467,12 +467,12 @@ bool AdminAccount::update(Cutelyst::Context *c, SkaffariError *e, AdminAccount * return ret; } - QList domIds; + QList domIds; if (!domains.isEmpty()) { for (int i = 0; i < domains.size(); ++i) { - const quint32 did = domains.at(i).toULong(); + const dbid_t did = domains.at(i).toULong(); q = CPreparedSqlQueryThread(QStringLiteral("INSERT INTO domainadmin (domain_id, admin_id) VALUES (:domain_id, :admin_id)")); - q.bindValue(QStringLiteral(":domain_id"), QVariant::fromValue(did)); + q.bindValue(QStringLiteral(":domain_id"), QVariant::fromValue(did)); q.bindValue(QStringLiteral(":admin_id"), a->getId()); if (Q_UNLIKELY(!q.exec())) { e->setSqlError(q.lastError(), c->translate("AdminAccount", "Faild to update admin to domain connections in database.")); @@ -507,7 +507,7 @@ bool AdminAccount::update(Cutelyst::Context *c, SkaffariError *e, AdminAccount * Q_ASSERT_X(!p.empty(), "update own account", "empty parameters"); Q_ASSERT_X(u, "update own accountt", "invalid authentication user object"); - const quint32 id = u->id().toULong(); + const dbid_t id = u->id().toULong(); const QString password = p.value(QStringLiteral("password")); const QDateTime currentUtc = QDateTime::currentDateTimeUtc(); @@ -534,7 +534,7 @@ bool AdminAccount::update(Cutelyst::Context *c, SkaffariError *e, AdminAccount * } q.bindValue(QStringLiteral(":updated_at"), currentUtc); - q.bindValue(QStringLiteral(":id"), QVariant::fromValue(id)); + q.bindValue(QStringLiteral(":id"), id); if (Q_UNLIKELY(!q.exec())) { e->setSqlError(q.lastError(), c->translate("AdminAccount", "Failed to update admin in database.")); @@ -663,9 +663,9 @@ bool AdminAccount::remove(Cutelyst::Context *c, SkaffariError *e, const AdminAcc } -quint32 AdminAccount::setAdminAccount(Cutelyst::Context *c, SkaffariError *error, const QString &user, const QByteArray &pass, qint16 type) +dbid_t AdminAccount::setAdminAccount(Cutelyst::Context *c, SkaffariError *error, const QString &user, const QByteArray &pass, qint16 type) { - quint32 id = 0; + dbid_t id = 0; QSqlQuery q = CPreparedSqlQueryThread(QStringLiteral("INSERT INTO adminuser (username, password, type, created_at, updated_at) " "VALUES (:username, :password, :type, :created_at, :updated_at)")); @@ -683,13 +683,13 @@ quint32 AdminAccount::setAdminAccount(Cutelyst::Context *c, SkaffariError *error return id; } - id = q.lastInsertId().value(); + id = q.lastInsertId().value(); return id; } -bool AdminAccount::rollbackAdminAccount(Cutelyst::Context *c, SkaffariError *error, quint32 adminId) +bool AdminAccount::rollbackAdminAccount(Cutelyst::Context *c, SkaffariError *error, dbid_t adminId) { bool ret = false; @@ -708,7 +708,7 @@ bool AdminAccount::rollbackAdminAccount(Cutelyst::Context *c, SkaffariError *err } -bool AdminAccount::setAdminSettings(Cutelyst::Context *c, SkaffariError *error, quint32 adminId) +bool AdminAccount::setAdminSettings(Cutelyst::Context *c, SkaffariError *error, dbid_t adminId) { bool ret = false; @@ -727,7 +727,7 @@ bool AdminAccount::setAdminSettings(Cutelyst::Context *c, SkaffariError *error, } -bool AdminAccount::rollbackAdminSettings(Cutelyst::Context *c, SkaffariError *error, quint32 adminId) +bool AdminAccount::rollbackAdminSettings(Cutelyst::Context *c, SkaffariError *error, dbid_t adminId) { bool ret = false; @@ -747,13 +747,13 @@ bool AdminAccount::rollbackAdminSettings(Cutelyst::Context *c, SkaffariError *er } -bool AdminAccount::setAdminDomains(Cutelyst::Context *c, SkaffariError *error, quint32 adminId, const QList &domains) +bool AdminAccount::setAdminDomains(Cutelyst::Context *c, SkaffariError *error, dbid_t adminId, const QList &domains) { bool ret = false; if (Q_LIKELY(!domains.empty())) { - for (quint32 domId : domains) { + for (dbid_t domId : domains) { QSqlQuery q = CPreparedSqlQueryThread(QStringLiteral("INSERT INTO domainadmin (domain_id, admin_id) VALUES (:domain_id, :admin_id)")); @@ -776,7 +776,7 @@ bool AdminAccount::setAdminDomains(Cutelyst::Context *c, SkaffariError *error, q } -bool AdminAccount::rollbackAdminDomains(Cutelyst::Context *c, SkaffariError *error, quint32 adminId) +bool AdminAccount::rollbackAdminDomains(Cutelyst::Context *c, SkaffariError *error, dbid_t adminId) { bool ret = false; @@ -796,7 +796,7 @@ bool AdminAccount::rollbackAdminDomains(Cutelyst::Context *c, SkaffariError *err -void AdminAccount::toStash(Cutelyst::Context *c, quint32 adminId) +void AdminAccount::toStash(Cutelyst::Context *c, dbid_t adminId) { Q_ASSERT_X(c, "admin account to stash", "invalid context object"); diff --git a/src/objects/adminaccount.h b/src/objects/adminaccount.h index 89e98bc..d446267 100644 --- a/src/objects/adminaccount.h +++ b/src/objects/adminaccount.h @@ -27,6 +27,7 @@ #include #include #include +#include "../../common/global.h" Q_DECLARE_LOGGING_CATEGORY(SK_ADMIN) @@ -78,7 +79,7 @@ class AdminAccount * \param domains list of domain IDs this admin is responsible for * \sa setUsername(), setPassword(), setType(), setDomains() */ - AdminAccount(quint32 id, const QString& username, qint16 type, const QList &domains); + AdminAccount(dbid_t id, const QString& username, qint16 type, const QList &domains); /*! * \brief Constructs a copy of other. @@ -101,7 +102,7 @@ class AdminAccount * \return the database ID * \sa setId() */ - quint32 getId() const; + dbid_t getId() const; /*! * \brief Sets the database ID: @@ -109,7 +110,7 @@ class AdminAccount * \param id the database ID * \sa getId() */ - void setId(quint32 id); + void setId(dbid_t id); /*! @@ -135,7 +136,7 @@ class AdminAccount * \retun list of domains * \sa setDomains() */ - QList getDomains() const; + QList getDomains() const; /*! * \brief Sets the list of domain IDs this admin is responsible for. @@ -145,7 +146,7 @@ class AdminAccount * \param nDomains list of domain IDs * \sa getDomains() */ - void setDomains(const QList &nDomains); + void setDomains(const QList &nDomains); /*! @@ -233,25 +234,25 @@ class AdminAccount static AdminAccount create(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap ¶ms, SkaffariError *error); static QVector list(Cutelyst::Context *c, SkaffariError *error); - static AdminAccount get(Cutelyst::Context *c, SkaffariError *e, quint32 id); + static AdminAccount get(Cutelyst::Context *c, SkaffariError *e, dbid_t id); static bool update(Cutelyst::Context *c, SkaffariError *e, AdminAccount *a, const Cutelyst::ParamsMultiMap ¶ms); static bool update(Cutelyst::Context *c, SkaffariError *e, AdminAccount *a, Cutelyst::AuthenticationUser *u, const Cutelyst::ParamsMultiMap &p); static bool remove(Cutelyst::Context *c, SkaffariError *e, const AdminAccount &a); - static void toStash(Cutelyst::Context *c, quint32 adminId); + static void toStash(Cutelyst::Context *c, dbid_t adminId); static AdminAccount fromStash(Cutelyst::Context *c); protected: QSharedDataPointer d; private: - static quint32 setAdminAccount(Cutelyst::Context *c, SkaffariError *error, const QString &user, const QByteArray &pass, qint16 type); - static bool rollbackAdminAccount(Cutelyst::Context *c, SkaffariError *error, quint32 adminId); + static dbid_t setAdminAccount(Cutelyst::Context *c, SkaffariError *error, const QString &user, const QByteArray &pass, qint16 type); + static bool rollbackAdminAccount(Cutelyst::Context *c, SkaffariError *error, dbid_t adminId); - static bool setAdminSettings(Cutelyst::Context *c, SkaffariError *error, quint32 adminId); - static bool rollbackAdminSettings(Cutelyst::Context *c, SkaffariError *error, quint32 adminId); + static bool setAdminSettings(Cutelyst::Context *c, SkaffariError *error, dbid_t adminId); + static bool rollbackAdminSettings(Cutelyst::Context *c, SkaffariError *error, dbid_t adminId); - static bool setAdminDomains(Cutelyst::Context *c, SkaffariError *error, quint32 adminId, const QList &domains); - static bool rollbackAdminDomains(Cutelyst::Context *c, SkaffariError *error, quint32 adminId); + static bool setAdminDomains(Cutelyst::Context *c, SkaffariError *error, dbid_t adminId, const QList &domains); + static bool rollbackAdminDomains(Cutelyst::Context *c, SkaffariError *error, dbid_t adminId); }; Q_DECLARE_METATYPE(AdminAccount) diff --git a/src/objects/adminaccount_p.h b/src/objects/adminaccount_p.h index 9a9cb23..bf066d5 100644 --- a/src/objects/adminaccount_p.h +++ b/src/objects/adminaccount_p.h @@ -27,7 +27,7 @@ class AdminAccountData : public QSharedData public: AdminAccountData() {} - AdminAccountData(quint32 _id, const QString &_username, qint16 _type, const QList &_domains) : + AdminAccountData(dbid_t _id, const QString &_username, qint16 _type, const QList &_domains) : id(_id), username(_username), type(_type), @@ -51,10 +51,10 @@ class AdminAccountData : public QSharedData ~AdminAccountData() {} - quint32 id; + dbid_t id; QString username; qint16 type; - QList domains; + QList domains; QString lang; QByteArray tz; quint8 maxDisplay; diff --git a/src/objects/domain.cpp b/src/objects/domain.cpp index f4caf23..fe6d034 100644 --- a/src/objects/domain.cpp +++ b/src/objects/domain.cpp @@ -46,14 +46,14 @@ Domain::Domain() : d(new DomainData) } -Domain::Domain(quint32 id, +Domain::Domain(dbid_t id, const QString& name, const QString& prefix, const QString& transport, - quint32 quota, + quota_size_t quota, quint32 maxAccounts, - quint32 domainQuota, - quint32 domainQuotaUsed, + quota_size_t domainQuota, + quota_size_t domainQuotaUsed, bool freeNames, bool freeAddress, const QVector &folders, @@ -89,12 +89,12 @@ Domain::~Domain() } -quint32 Domain::id() const +dbid_t Domain::id() const { return d->id; } -void Domain::setId(quint32 id) +void Domain::setId(dbid_t id) { d->id = id; } @@ -137,13 +137,13 @@ void Domain::setTransport(const QString &nTransport) } -quint32 Domain::getQuota() const +quota_size_t Domain::getQuota() const { return d->quota; } -void Domain::setQuota(quint32 nQuota) +void Domain::setQuota(quota_size_t nQuota) { d->quota = nQuota; } @@ -173,13 +173,13 @@ void Domain::setMaxAccounts(quint32 nMaxAccounts) } -quint32 Domain::getDomainQuota() const +quota_size_t Domain::getDomainQuota() const { return d->domainQuota; } -void Domain::setDomainQuota(quint32 nDomainQuota) +void Domain::setDomainQuota(quota_size_t nDomainQuota) { d->domainQuota = nDomainQuota; } @@ -197,13 +197,13 @@ void Domain::setHumanDomainQuota(const QString &humanDomainQuota) } -quint32 Domain::getDomainQuotaUsed() const +quota_size_t Domain::getDomainQuotaUsed() const { return d->domainQuotaUsed; } -void Domain::setDomainQuotaUsed(quint32 nDomainQuotaUsed) +void Domain::setDomainQuotaUsed(quota_size_t nDomainQuotaUsed) { d->domainQuotaUsed = nDomainQuotaUsed; } @@ -327,7 +327,7 @@ bool Domain::hasAccess(Cutelyst::Context *c) const ret = true; } else { - const quint32 uid = c->stash(QStringLiteral("userId")).value(); + const dbid_t uid = c->stash(QStringLiteral("userId")).value(); if (!d->admins.empty()) { for (int i = 0; i < d->admins.size(); ++i) { @@ -380,10 +380,10 @@ Domain Domain::create(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap ¶ if (Q_UNLIKELY(q.next())) { errorData->setErrorType(SkaffariError::InputError); errorData->setErrorText(c->translate("Domain", "The domain name “%1” is already in use.").arg(domainName)); - qCWarning(SK_DOMAIN, "Failed to create domain %s: name is already in use by domain ID %u", domainName.toUtf8().constData(), q.value(0).value()); + qCWarning(SK_DOMAIN, "Failed to create domain %s: name is already in use by domain ID %u", domainName.toUtf8().constData(), q.value(0).value()); } - quint32 quota = 0; + quota_size_t quota = 0; bool quotaOk = true; if (params.contains(QStringLiteral("humanQuota"))) { quota = Utils::humanToIntSize(c, params.value(QStringLiteral("humanQuota")), "aOk); @@ -393,7 +393,7 @@ Domain Domain::create(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap ¶ return dom; } } else { - quota = params.value(QStringLiteral("quota")).toULong("aOk); + quota = params.value(QStringLiteral("quota")).toULongLong("aOk); if (!quotaOk) { errorData->setErrorType(SkaffariError::InputError); errorData->setErrorText(c->translate("Domain", "Failed to parse quota string into integer value.")); @@ -401,7 +401,7 @@ Domain Domain::create(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap ¶ } } - quint32 domainQuota = 0; + quota_size_t domainQuota = 0; bool domainQuotaOk = true; if (params.contains(QStringLiteral("humanDomainQuota"))) { domainQuota = Utils::humanToIntSize(c, params.value(QStringLiteral("humanDomainQuota")), &domainQuotaOk); @@ -411,7 +411,7 @@ Domain Domain::create(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap ¶ return dom; } } else { - domainQuota = params.value(QStringLiteral("domainQuota")).toULong(&domainQuotaOk); + domainQuota = params.value(QStringLiteral("domainQuota")).toULongLong(&domainQuotaOk); if (!domainQuotaOk) { errorData->setErrorType(SkaffariError::InputError); errorData->setErrorText(c->translate("Domain", "Failed to parse quota string into integer value.")); @@ -440,14 +440,14 @@ Domain Domain::create(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap ¶ q.bindValue(QStringLiteral(":updated_at"), currentTimeUtc); if (Q_LIKELY(q.exec())) { - const quint32 domainId = q.lastInsertId().value(); + const dbid_t domainId = q.lastInsertId().value(); QVector foldersVect; for (const QString &folder : folders) { q = CPreparedSqlQueryThread(QStringLiteral("INSERT INTO folder (domain_id, name) VALUES (:domain_id, :name)")); q.bindValue(QStringLiteral(":domain_id"), domainId); q.bindValue(QStringLiteral(":name"), folder); if (Q_LIKELY(q.exec())) { - const quint32 folderId = q.lastInsertId().value(); + const dbid_t folderId = q.lastInsertId().value(); foldersVect.append(Folder(folderId, domainId, folder)); } else { errorData->setSqlError(q.lastError()); @@ -475,9 +475,9 @@ Domain Domain::create(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap ¶ dom.setCreated(Utils::toUserTZ(c, currentTimeUtc)); dom.setUpdated(Utils::toUserTZ(c, currentTimeUtc)); - dom.setHumanQuota(Utils::humanBinarySize(c, (quint64)dom.getQuota() * 1024)); - dom.setHumanDomainQuota(Utils::humanBinarySize(c, (quint64)dom.getDomainQuota() * 1024)); - dom.setHumanDomainQuotaUsed(Utils::humanBinarySize(c, (quint64)dom.getDomainQuotaUsed() * 1024)); + dom.setHumanQuota(Utils::humanBinarySize(c, dom.getQuota() * 1024)); + dom.setHumanDomainQuota(Utils::humanBinarySize(c, dom.getDomainQuota() * 1024)); + dom.setHumanDomainQuotaUsed(Utils::humanBinarySize(c, dom.getDomainQuotaUsed() * 1024)); } else { errorData->setSqlError(q.lastError()); qCCritical(SK_DOMAIN, "Failed to insert new domain %s into database: %s", qUtf8Printable(domainName), qUtf8Printable(q.lastError().text())); @@ -491,7 +491,7 @@ Domain Domain::create(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap ¶ } -Domain Domain::get(Cutelyst::Context *c, quint32 domId, SkaffariError *errorData) +Domain Domain::get(Cutelyst::Context *c, dbid_t domId, SkaffariError *errorData) { Domain dom; @@ -507,26 +507,26 @@ Domain Domain::get(Cutelyst::Context *c, quint32 domId, SkaffariError *errorData dom.setPrefix(q.value(0).toString()); dom.setName(QUrl::fromAce(q.value(1).toByteArray())); dom.setTransport(q.value(2).toString()); - dom.setQuota(q.value(3).value()); + dom.setQuota(q.value(3).value()); dom.setMaxAccounts(q.value(4).value()); - dom.setDomainQuota(q.value(5).value()); - dom.setDomainQuotaUsed(q.value(6).value()); + dom.setDomainQuota(q.value(5).value()); + dom.setDomainQuotaUsed(q.value(6).value()); dom.setFreeNamesEnabled(q.value(7).toBool()); dom.setFreeAddressEnabled(q.value(8).toBool()); dom.setAccounts(q.value(9).value()); dom.setCreated(Utils::toUserTZ(c, q.value(10).toDateTime())); dom.setUpdated(Utils::toUserTZ(c, q.value(11).toDateTime())); - dom.setHumanQuota(Utils::humanBinarySize(c, (quint64)dom.getQuota() * 1024)); - dom.setHumanDomainQuota(Utils::humanBinarySize(c, (quint64)dom.getDomainQuota() * 1024)); - dom.setHumanDomainQuotaUsed(Utils::humanBinarySize(c, (quint64)dom.getDomainQuotaUsed() * 1024)); + dom.setHumanQuota(Utils::humanBinarySize(c, dom.getQuota() * 1024)); + dom.setHumanDomainQuota(Utils::humanBinarySize(c, dom.getDomainQuota() * 1024)); + dom.setHumanDomainQuotaUsed(Utils::humanBinarySize(c, dom.getDomainQuotaUsed() * 1024)); q = CPreparedSqlQueryThread(QStringLiteral("SELECT id, name FROM folder WHERE domain_id = :domain_id")); q.bindValue(QStringLiteral(":domain_id"), domId); if (Q_LIKELY(q.exec())) { QVector folders; while (q.next()) { - folders.append(Folder(q.value(0).value(), domId, q.value(1).toString())); + folders.append(Folder(q.value(0).value(), domId, q.value(1).toString())); } dom.setFolders(folders); } else { @@ -551,7 +551,7 @@ Domain Domain::get(Cutelyst::Context *c, quint32 domId, SkaffariError *errorData if (Q_LIKELY(q.exec())) { QVector admins; while (q.next()) { - admins.append(SimpleAdmin(q.value(0).value(), q.value(1).toString())); + admins.append(SimpleAdmin(q.value(0).value(), q.value(1).toString())); } dom.setAdmins(admins); } else { @@ -577,30 +577,30 @@ std::vector Domain::list(Cutelyst::Context *c, SkaffariError *errorData, q = CPreparedSqlQueryThread(QStringLiteral("SELECT dom.id, dom.domain_name, dom.prefix, dom.transport, dom.quota, dom.maxaccounts, dom.domainquota, dom.domainquotaused, dom.freenames, dom.freeaddress, dom.accountcount, dom.created_at, dom.updated_at FROM domain dom ORDER BY dom.domain_name ASC")); } else { q = CPreparedSqlQueryThread(QStringLiteral("SELECT dom.id, dom.domain_name, dom.prefix, dom.transport, dom.quota, dom.maxaccounts, dom.domainquota, dom.domainquotaused, dom.freenames, dom.freeaddress, dom.accountcount, dom.created_at, dom.updated_at FROM domain dom LEFT JOIN domainadmin da ON dom.id = da.domain_id WHERE da.admin_id = :admin_id ORDER BY dom.domain_name ASC")); - q.bindValue(QStringLiteral(":admin_id"), QVariant::fromValue(user.id().toULong())); + q.bindValue(QStringLiteral(":admin_id"), QVariant::fromValue(user.id().toULong())); } if (Q_LIKELY(q.exec())) { lst.reserve(q.size()); while (q.next()) { - Domain dom(q.value(0).value(), + Domain dom(q.value(0).value(), QUrl::fromAce(q.value(1).toByteArray()), q.value(2).toString(), q.value(3).toString(), - q.value(4).value(), + q.value(4).value(), q.value(5).value(), - q.value(6).value(), - q.value(7).value(), + q.value(6).value(), + q.value(7).value(), q.value(8).toBool(), q.value(9).toBool(), QVector(), q.value(10).value(), Utils::toUserTZ(c, q.value(11).toDateTime()), Utils::toUserTZ(c, q.value(12).toDateTime())); - dom.setHumanQuota(Utils::humanBinarySize(c, static_cast(dom.getQuota()) * Q_UINT64_C(1024))); - dom.setHumanDomainQuota(Utils::humanBinarySize(c, static_cast(dom.getDomainQuota()) * Q_UINT64_C(1024))); - dom.setHumanDomainQuotaUsed(Utils::humanBinarySize(c, static_cast(dom.getDomainQuotaUsed()) * Q_UINT64_C(1024))); + dom.setHumanQuota(Utils::humanBinarySize(c, dom.getQuota() * Q_UINT64_C(1024))); + dom.setHumanDomainQuota(Utils::humanBinarySize(c, dom.getDomainQuota() * Q_UINT64_C(1024))); + dom.setHumanDomainQuotaUsed(Utils::humanBinarySize(c, dom.getDomainQuotaUsed() * Q_UINT64_C(1024))); lst.push_back(dom); } } else { @@ -701,7 +701,7 @@ bool Domain::update(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap &p, Ska const QDateTime currentTimeUtc = QDateTime::currentDateTimeUtc(); - quint32 quota = 0; + quota_size_t quota = 0; bool quotaOk = true; if (p.contains(QStringLiteral("humanQuota"))) { quota = Utils::humanToIntSize(c, p.value(QStringLiteral("humanQuota")), "aOk); @@ -711,7 +711,7 @@ bool Domain::update(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap &p, Ska return ret; } } else { - quota = p.value(QStringLiteral("quota"), QString::number(d->getQuota())).toULong("aOk); + quota = p.value(QStringLiteral("quota"), QString::number(d->getQuota())).toULongLong("aOk); if (!quotaOk) { e->setErrorType(SkaffariError::InputError); e->setErrorText(c->translate("Domain", "Failed to parse quota string into integer value.")); @@ -721,7 +721,7 @@ bool Domain::update(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap &p, Ska if (u.value(QStringLiteral("type")).value() == 0) { - quint32 domainQuota = 0; + quota_size_t domainQuota = 0; bool domainQuotaOk = true; if (p.contains(QStringLiteral("humanDomainQuota"))) { domainQuota = Utils::humanToIntSize(c, p.value(QStringLiteral("humanDomainQuota")), &domainQuotaOk); @@ -731,7 +731,7 @@ bool Domain::update(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap &p, Ska return ret; } } else { - domainQuota = p.value(QStringLiteral("domainQuota"), QString::number(d->getDomainQuota())).toULong(&domainQuotaOk); + domainQuota = p.value(QStringLiteral("domainQuota"), QString::number(d->getDomainQuota())).toULongLong(&domainQuotaOk); if (!domainQuotaOk) { e->setErrorType(SkaffariError::InputError); e->setErrorText(c->translate("Domain", "Failed to parse quota string into integer value.")); @@ -761,10 +761,10 @@ bool Domain::update(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap &p, Ska } d->setQuota(quota); - d->setHumanQuota(Utils::humanBinarySize(c, static_cast(quota) * Q_UINT64_C(1024))); + d->setHumanQuota(Utils::humanBinarySize(c, quota * Q_UINT64_C(1024))); d->setMaxAccounts(maxAccounts); d->setDomainQuota(domainQuota); - d->setHumanDomainQuota(Utils::humanBinarySize(c, static_cast(domainQuota) * Q_UINT64_C(1024))); + d->setHumanDomainQuota(Utils::humanBinarySize(c, domainQuota * Q_UINT64_C(1024))); d->setFreeNamesEnabled(freeNames); d->setFreeAddressEnabled(freeAddress); d->setTransport(transport); @@ -786,7 +786,7 @@ bool Domain::update(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap &p, Ska } d->setQuota(quota); - d->setHumanQuota(Utils::humanBinarySize(c, static_cast(quota) * Q_UINT64_C(1024))); + d->setHumanQuota(Utils::humanBinarySize(c, quota * Q_UINT64_C(1024))); d->setUpdated(Utils::toUserTZ(c, currentTimeUtc)); ret = true; @@ -807,7 +807,7 @@ bool Domain::update(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap &p, Ska } else { QStringList newFolders; QStringList currentFolderNames; - QList deletedFolders; + QList deletedFolders; const QVector currentFolders = d->getFolders(); for (const Folder &folder : currentFolders) { currentFolderNames << folder.getName(); @@ -823,8 +823,8 @@ bool Domain::update(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap &p, Ska } if (!deletedFolders.empty()) { - const QList deletedFoldersConst = deletedFolders; - for (quint32 fid : deletedFoldersConst) { + const QList deletedFoldersConst = deletedFolders; + for (dbid_t fid : deletedFoldersConst) { q = CPreparedSqlQueryThread(QStringLiteral("DELETE FROM folder WHERE id = :id")); q.bindValue(QStringLiteral(":id"), fid); if (Q_UNLIKELY(!q.exec())) { @@ -852,7 +852,7 @@ bool Domain::update(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap &p, Ska qCCritical(SK_DOMAIN) << "Failed to query default folders for domain" << d->getName() << "from database:" << q.lastError().text(); } else { while (q.next()) { - foldersVect.append(Folder(q.value(0).value(), d->id(), q.value(1).toString())); + foldersVect.append(Folder(q.value(0).value(), d->id(), q.value(1).toString())); } } d->setFolders(foldersVect); @@ -866,7 +866,7 @@ bool Domain::update(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap &p, Ska } -void Domain::toStash(Cutelyst::Context *c, quint32 domainId) +void Domain::toStash(Cutelyst::Context *c, dbid_t domainId) { Q_ASSERT_X(c, "domain to stash", "invalid context object"); @@ -898,7 +898,7 @@ Domain Domain::fromStash(Cutelyst::Context *c) } -bool Domain::checkAccess(Cutelyst::Context *c, quint32 domainId) +bool Domain::checkAccess(Cutelyst::Context *c, dbid_t domainId) { bool allowed = false; diff --git a/src/objects/domain.h b/src/objects/domain.h index 67b296f..5c99576 100644 --- a/src/objects/domain.h +++ b/src/objects/domain.h @@ -32,6 +32,7 @@ #include "simpleadmin.h" #include "folder.h" +#include "../../common/global.h" Q_DECLARE_LOGGING_CATEGORY(SK_DOMAIN) @@ -50,21 +51,21 @@ class Domain { public: Domain(); - Domain(quint32 id, const QString &name, const QString &prefix, const QString &transport, quint32 quota, quint32 maxAccounts, quint32 domainQuota, quint32 domainQuotaUsed, bool freeNames, bool freeAddress, const QVector &folders, quint32 accounts, const QDateTime &created, const QDateTime &updated); + Domain(dbid_t id, const QString &name, const QString &prefix, const QString &transport, quota_size_t quota, quint32 maxAccounts, quota_size_t domainQuota, quota_size_t domainQuotaUsed, bool freeNames, bool freeAddress, const QVector &folders, quint32 accounts, const QDateTime &created, const QDateTime &updated); Domain(const Domain &other); Domain& operator=(const Domain &other); ~Domain(); - quint32 id() const; + dbid_t id() const; QString getName() const; QString getPrefix() const; QString getTransport() const; - quint32 getQuota() const; + quota_size_t getQuota() const; QString getHumanQuota() const; quint32 getMaxAccounts() const; - quint32 getDomainQuota() const; + quota_size_t getDomainQuota() const; QString getHumanDomainQuota() const; - quint32 getDomainQuotaUsed() const; + quota_size_t getDomainQuotaUsed() const; QString getHumanDomainQuotaUsed() const; bool isFreeNamesEnabled() const; bool isFreeAddressEnabled() const; @@ -87,16 +88,16 @@ class Domain float domainQuotaUsagePercent() const; - void setId(quint32 id); + void setId(dbid_t id); void setName(const QString &nName); void setPrefix(const QString &nPrefix); void setTransport(const QString &nTransport); - void setQuota(quint32 nQuota); + void setQuota(quota_size_t nQuota); void setHumanQuota(const QString &nHumanQuota); void setMaxAccounts(quint32 nMaxAccounts); - void setDomainQuota(quint32 nDomainQuota); + void setDomainQuota(quota_size_t nDomainQuota); void setHumanDomainQuota(const QString &humanDomainQuota); - void setDomainQuotaUsed(quint32 nDomainQuotaUsed); + void setDomainQuotaUsed(quota_size_t nDomainQuotaUsed); void setHumanDomainQuotaUsed(const QString &humanDomainQuotaUsed); void setFreeNamesEnabled(bool nFreeNames); void setFreeAddressEnabled(bool nFreeAddress); @@ -116,7 +117,7 @@ class Domain bool hasAccess(Cutelyst::Context *c) const; static Domain create(Cutelyst::Context *c, const Cutelyst::ParamsMultiMap ¶ms, SkaffariError *errorData); - static Domain get(Cutelyst::Context *c, quint32 domId, SkaffariError *errorData); + static Domain get(Cutelyst::Context *c, dbid_t domId, SkaffariError *errorData); static std::vector list(Cutelyst::Context *c, SkaffariError *errorData, const Cutelyst::AuthenticationUser &user); /*! @@ -155,7 +156,7 @@ class Domain * \param e Pointer to an object taking error information. * \return True on success. */ - static void toStash(Cutelyst::Context *c, quint32 domainId); + static void toStash(Cutelyst::Context *c, dbid_t domainId); /*! * \brief Returns the current domain from the context stash that has been set by toStash(). @@ -165,7 +166,7 @@ class Domain */ static Domain fromStash(Cutelyst::Context *c); - static bool checkAccess(Cutelyst::Context *c, quint32 domainId = 0); + static bool checkAccess(Cutelyst::Context *c, dbid_t domainId = 0); static bool accessGranted(Cutelyst::Context *c); diff --git a/src/objects/domain_p.h b/src/objects/domain_p.h index 40718bf..238eaa2 100644 --- a/src/objects/domain_p.h +++ b/src/objects/domain_p.h @@ -38,7 +38,7 @@ class DomainData : public QSharedData public: DomainData() {} - DomainData(quint32 _id, const QString &_name, const QString &_prefix, const QString &_transport, quint32 _quota, quint32 _maxAccounts, quint32 _domainQuota, quint32 _domainQuotaUsed, bool _freeNames, bool _freeAddress, const QVector &_folders, quint32 _accounts, const QDateTime &_created, const QDateTime &_updated) : + DomainData(dbid_t _id, const QString &_name, const QString &_prefix, const QString &_transport, quota_size_t _quota, quint32 _maxAccounts, quota_size_t _domainQuota, quota_size_t _domainQuotaUsed, bool _freeNames, bool _freeAddress, const QVector &_folders, quint32 _accounts, const QDateTime &_created, const QDateTime &_updated) : id(_id), name(_name), prefix(_prefix), @@ -78,16 +78,16 @@ class DomainData : public QSharedData ~DomainData() {} - quint32 id = 0; + dbid_t id = 0; QString name; QString prefix; QString transport; - quint32 quota = 0; + quota_size_t quota = 0; QString humanQuota; quint32 maxAccounts = 0; - quint32 domainQuota = 0; + quota_size_t domainQuota = 0; QString humanDomainQuota; - quint32 domainQuotaUsed = 0; + quota_size_t domainQuotaUsed = 0; QString humanDomainQuotaUsed; bool freeNames = false; bool freeAddress = false; diff --git a/src/objects/folder.cpp b/src/objects/folder.cpp index 646b6aa..ddf1570 100644 --- a/src/objects/folder.cpp +++ b/src/objects/folder.cpp @@ -25,7 +25,7 @@ Folder::Folder() : } -Folder::Folder(quint32 id, quint32 domainId, const QString &name) : +Folder::Folder(dbid_t id, dbid_t domainId, const QString &name) : d(new FolderData(id, domainId, name)) { @@ -52,25 +52,25 @@ Folder::~Folder() } -quint32 Folder::getId() const +dbid_t Folder::getId() const { return d->id; } -void Folder::setId(quint32 id) +void Folder::setId(dbid_t id) { d->id = id; } -quint32 Folder::getDomainId() const +dbid_t Folder::getDomainId() const { return d->domainId; } -void Folder::setDomainId(quint32 domainId) +void Folder::setDomainId(dbid_t domainId) { d->domainId = domainId; } diff --git a/src/objects/folder.h b/src/objects/folder.h index 74d8ee2..4f4390e 100644 --- a/src/objects/folder.h +++ b/src/objects/folder.h @@ -21,6 +21,7 @@ #include #include +#include "../../common/global.h" class FolderData; @@ -28,17 +29,17 @@ class Folder { public: Folder(); - Folder(quint32 id, quint32 domainId, const QString &name); + Folder(dbid_t id, dbid_t domainId, const QString &name); Folder(const Folder &other); Folder& operator=(const Folder &other); ~Folder(); - quint32 getId() const; - quint32 getDomainId() const; + dbid_t getId() const; + dbid_t getDomainId() const; QString getName() const; - void setId(quint32 id); - void setDomainId(quint32 domainId); + void setId(dbid_t id); + void setDomainId(dbid_t domainId); void setName(const QString &name); protected: diff --git a/src/objects/folder_p.h b/src/objects/folder_p.h index b59a942..e9263c0 100644 --- a/src/objects/folder_p.h +++ b/src/objects/folder_p.h @@ -27,7 +27,7 @@ class FolderData : public QSharedData public: FolderData() {} - FolderData(quint32 _id, quint32 _domainId, const QString &_name) : + FolderData(dbid_t _id, dbid_t _domainId, const QString &_name) : id(_id), domainId(_domainId), name(_name) @@ -42,8 +42,8 @@ class FolderData : public QSharedData ~FolderData() {} - quint32 id = 0; - quint32 domainId = 0; + dbid_t id = 0; + dbid_t domainId = 0; QString name; }; diff --git a/src/objects/simpleadmin.cpp b/src/objects/simpleadmin.cpp index f572888..60670ff 100644 --- a/src/objects/simpleadmin.cpp +++ b/src/objects/simpleadmin.cpp @@ -24,7 +24,7 @@ SimpleAdmin::SimpleAdmin() : d(new SimpleAdminData) } -SimpleAdmin::SimpleAdmin(quint32 id, const QString &name) : +SimpleAdmin::SimpleAdmin(dbid_t id, const QString &name) : d(new SimpleAdminData(id, name)) { @@ -51,7 +51,7 @@ SimpleAdmin::~SimpleAdmin() } -quint32 SimpleAdmin::id() const +dbid_t SimpleAdmin::id() const { return d->id; } diff --git a/src/objects/simpleadmin.h b/src/objects/simpleadmin.h index f3cec3f..f37a5e8 100644 --- a/src/objects/simpleadmin.h +++ b/src/objects/simpleadmin.h @@ -23,6 +23,7 @@ #include #include #include +#include "../../common/global.h" class SimpleAdminData; @@ -30,12 +31,12 @@ class SimpleAdmin { public: SimpleAdmin(); - SimpleAdmin(quint32 id, const QString &name); + SimpleAdmin(dbid_t id, const QString &name); SimpleAdmin(const SimpleAdmin &other); SimpleAdmin& operator=(const SimpleAdmin &other); ~SimpleAdmin(); - quint32 id() const; + dbid_t id() const; QString name() const; private: diff --git a/src/objects/simpleadmin_p.h b/src/objects/simpleadmin_p.h index faddf85..335522d 100644 --- a/src/objects/simpleadmin_p.h +++ b/src/objects/simpleadmin_p.h @@ -27,7 +27,7 @@ class SimpleAdminData : public QSharedData public: SimpleAdminData() {} - SimpleAdminData(quint32 _id, const QString &_name) : + SimpleAdminData(dbid_t _id, const QString &_name) : id(_id), name(_name) {} @@ -40,7 +40,7 @@ class SimpleAdminData : public QSharedData ~SimpleAdminData() {} - quint32 id = 0; + dbid_t id = 0; QString name; }; diff --git a/src/objects/simpledomain.cpp b/src/objects/simpledomain.cpp index 331215f..a9d0d38 100644 --- a/src/objects/simpledomain.cpp +++ b/src/objects/simpledomain.cpp @@ -32,7 +32,7 @@ SimpleDomain::SimpleDomain() : d(new SimpleDomainData) } -SimpleDomain::SimpleDomain(quint32 id, const QString &name) : +SimpleDomain::SimpleDomain(dbid_t id, const QString &name) : d(new SimpleDomainData(id, name)) { @@ -58,7 +58,7 @@ SimpleDomain::~SimpleDomain() } -quint32 SimpleDomain::id() const +dbid_t SimpleDomain::id() const { return d->id; } @@ -70,7 +70,7 @@ QString SimpleDomain::name() const } -std::vector SimpleDomain::list(Cutelyst::Context *c, SkaffariError *e, quint16 userType, quint32 adminId) +std::vector SimpleDomain::list(Cutelyst::Context *c, SkaffariError *e, quint16 userType, dbid_t adminId) { std::vector lst; @@ -92,7 +92,7 @@ std::vector SimpleDomain::list(Cutelyst::Context *c, SkaffariError } while (q.next()) { - lst.push_back(SimpleDomain(q.value(0).value(), QUrl::fromAce(q.value(1).toByteArray()))); + lst.push_back(SimpleDomain(q.value(0).value(), QUrl::fromAce(q.value(1).toByteArray()))); } if (lst.size() > 1) { @@ -104,7 +104,7 @@ std::vector SimpleDomain::list(Cutelyst::Context *c, SkaffariError } -QJsonArray SimpleDomain::listJson(Cutelyst::Context *c, SkaffariError *e, quint16 userType, quint32 adminId) +QJsonArray SimpleDomain::listJson(Cutelyst::Context *c, SkaffariError *e, quint16 userType, dbid_t adminId) { QJsonArray lst; diff --git a/src/objects/simpledomain.h b/src/objects/simpledomain.h index 74e4c8f..a546142 100644 --- a/src/objects/simpledomain.h +++ b/src/objects/simpledomain.h @@ -24,6 +24,7 @@ #include #include #include +#include "../../common/global.h" namespace Cutelyst { class Context; @@ -46,7 +47,7 @@ class SimpleDomain /*! * \brief Constructs a new SimpleDomain with given database \a id and domain \a name. */ - SimpleDomain(quint32 id, const QString &name); + SimpleDomain(dbid_t id, const QString &name); /*! * \brief Constructs a copy of \a other. @@ -68,7 +69,7 @@ class SimpleDomain * * \c 0 by default. */ - quint32 id() const; + dbid_t id() const; /*! * \brief Returns the domain name. @@ -83,7 +84,7 @@ class SimpleDomain * \param adminId The database ID of the admin user to determine domain access. * \return List of simple domain objects. */ - static std::vector list(Cutelyst::Context *c, SkaffariError *e, quint16 userType, quint32 adminId); + static std::vector list(Cutelyst::Context *c, SkaffariError *e, quint16 userType, dbid_t adminId); /*! * \brief Returns a JSON array of domains for the admin defined by \a adminId. @@ -93,7 +94,7 @@ class SimpleDomain * \param adminId The database ID of the admin user to determine domain access. * \return JSON array containing objects with domain ID and domain name. */ - static QJsonArray listJson(Cutelyst::Context *c , SkaffariError *e, quint16 userType, quint32 adminId); + static QJsonArray listJson(Cutelyst::Context *c , SkaffariError *e, quint16 userType, dbid_t adminId); private: QSharedDataPointer d; diff --git a/src/objects/simpledomain_p.h b/src/objects/simpledomain_p.h index f439df8..0427ea3 100644 --- a/src/objects/simpledomain_p.h +++ b/src/objects/simpledomain_p.h @@ -38,7 +38,7 @@ class SimpleDomainData : public QSharedData public: SimpleDomainData() {} - SimpleDomainData(quint32 _id, const QString &_name) : + SimpleDomainData(dbid_t _id, const QString &_name) : id(_id), name(_name) {} @@ -51,7 +51,7 @@ class SimpleDomainData : public QSharedData ~SimpleDomainData() {} - quint32 id = 0; + dbid_t id = 0; QString name; }; diff --git a/src/root.cpp b/src/root.cpp index 52f5b3c..3cc624c 100644 --- a/src/root.cpp +++ b/src/root.cpp @@ -30,6 +30,8 @@ #include #include +#include "../common/global.h" + using namespace Cutelyst; Root::Root(QObject *parent) : Controller(parent) @@ -101,7 +103,7 @@ bool Root::Auto(Context* c) StatusMessage::load(c); c->stash({ - {QStringLiteral("userId"), QVariant::fromValue(user.id().toULong())}, + {QStringLiteral("userId"), QVariant::fromValue(user.id().toULong())}, {QStringLiteral("userType"), user.value(QStringLiteral("type"))}, {QStringLiteral("userName"), user.value(QStringLiteral("username"))}, {QStringLiteral("userMaxDisplay"), Session::value(c, QStringLiteral("maxdisplay"), SkaffariConfig::defMaxdisplay()).value()}, diff --git a/src/skaffari.cpp b/src/skaffari.cpp index 5d155aa..65b3136 100644 --- a/src/skaffari.cpp +++ b/src/skaffari.cpp @@ -49,6 +49,7 @@ #include "utils/skaffariconfig.h" #include "../common/config.h" +#include "../common/global.h" #include "root.h" #include "authstoresql.h" #include "login.h" @@ -77,6 +78,8 @@ bool Skaffari::init() QCoreApplication::setApplicationName(QStringLiteral("Skaffari")); QCoreApplication::setApplicationVersion(QStringLiteral(SKAFFARI_VERSION)); + qRegisterMetaType("quota_size_t"); + qRegisterMetaType("dbid_t"); qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); diff --git a/src/utils/skaffariconfig.cpp b/src/utils/skaffariconfig.cpp index b8e4611..99bcdf0 100644 --- a/src/utils/skaffariconfig.cpp +++ b/src/utils/skaffariconfig.cpp @@ -28,8 +28,8 @@ QCryptographicHash::Algorithm SkaffariConfig::m_admPwAlgorithm = static_cast(); SkaffariConfig::m_admPwMinlength = admins.value(QStringLiteral("pwminlength"), SK_DEF_ADM_PWMINLENGTH).value(); - SkaffariConfig::m_defDomainquota = defaults.value(QStringLiteral("domainquota"), SK_DEF_DEF_DOMAINQUOTA).value(); - SkaffariConfig::m_defQuota = defaults.value(QStringLiteral("quota"), SK_DEF_DEF_QUOTA).value(); + SkaffariConfig::m_defDomainquota = defaults.value(QStringLiteral("domainquota"), SK_DEF_DEF_DOMAINQUOTA).value(); + SkaffariConfig::m_defQuota = defaults.value(QStringLiteral("quota"), SK_DEF_DEF_QUOTA).value(); SkaffariConfig::m_defMaxaccounts = defaults.value(QStringLiteral("maxaccounts"), SK_DEF_DEF_MAXACCOUNTS).value(); SkaffariConfig::m_defLanguage = defaults.value(QStringLiteral("language"), QLatin1String(SK_DEF_DEF_LANGUAGE)).toString(); SkaffariConfig::m_defTimezone = defaults.value(QStringLiteral("timezone"), QLatin1String(SK_DEF_DEF_TIMEZONE)).toString(); @@ -92,8 +92,8 @@ QCryptographicHash::Algorithm SkaffariConfig::admPwAlgorithm() { return m_admPwA quint32 SkaffariConfig::admPwRounds() { return m_admPwRounds; } quint8 SkaffariConfig::admPwMinlength() { return m_admPwMinlength; } -quint32 SkaffariConfig::defDomainquota() { return SkaffariConfig::m_defDomainquota; } -quint32 SkaffariConfig::defQuota() { return SkaffariConfig::m_defQuota; } +quota_size_t SkaffariConfig::defDomainquota() { return SkaffariConfig::m_defDomainquota; } +quota_size_t SkaffariConfig::defQuota() { return SkaffariConfig::m_defQuota; } quint32 SkaffariConfig::defMaxaccounts() { return SkaffariConfig::m_defMaxaccounts; } QString SkaffariConfig::defLanguage() { return SkaffariConfig::m_defLanguage; } QString SkaffariConfig::defTimezone() { return SkaffariConfig::m_defTimezone; } diff --git a/src/utils/skaffariconfig.h b/src/utils/skaffariconfig.h index e128d75..11e6d18 100644 --- a/src/utils/skaffariconfig.h +++ b/src/utils/skaffariconfig.h @@ -22,6 +22,7 @@ #include #include #include "../../common/password.h" +#include "../../common/global.h" #include "../imap/skaffariimap.h" #include "../objects/account.h" @@ -43,8 +44,8 @@ class SkaffariConfig static quint32 admPwRounds(); static quint8 admPwMinlength(); - static quint32 defDomainquota(); - static quint32 defQuota(); + static quota_size_t defDomainquota(); + static quota_size_t defQuota(); static quint32 defMaxaccounts(); static QString defLanguage(); static QString defTimezone(); @@ -72,8 +73,8 @@ class SkaffariConfig static quint32 m_admPwRounds; static quint8 m_admPwMinlength; - static quint32 m_defDomainquota; - static quint32 m_defQuota; + static quota_size_t m_defDomainquota; + static quota_size_t m_defQuota; static quint32 m_defMaxaccounts; static QString m_defLanguage; static QString m_defTimezone; diff --git a/src/utils/utils.cpp b/src/utils/utils.cpp index f82955c..fbdf8c6 100644 --- a/src/utils/utils.cpp +++ b/src/utils/utils.cpp @@ -51,7 +51,7 @@ QDateTime Utils::toUserTZ(Cutelyst::Context *c, const QDateTime &dt) -QString Utils::humanBinarySize(Cutelyst::Context *c, quint64 sizeInByte) +QString Utils::humanBinarySize(Cutelyst::Context *c, quota_size_t sizeInByte) { QString sizeStr; @@ -86,9 +86,9 @@ QString Utils::getUserName(Cutelyst::Context *c) } -quint32 Utils::humanToIntSize(Cutelyst::Context *c, const QString &size, bool *ok) +quota_size_t Utils::humanToIntSize(Cutelyst::Context *c, const QString &size, bool *ok) { - quint32 ret = 0; + quota_size_t ret = 0; Q_ASSERT_X(ok, "convert human quota string to KiB", "invalid pointer to a boolean succeed value (ok)"); @@ -123,17 +123,17 @@ quint32 Utils::humanToIntSize(Cutelyst::Context *c, const QString &size, bool *o _size = _size / 1024.0f; - // we have to check if the size fits into the quint32 even after rounding - // as rounding can also round up, we will give an extra margin of 1 to the - // maximum value of unsigned 32bit integer - if (_size > 4294967294.0f) { - *ok = false; - return ret; - } +// // we have to check if the size fits into the quint32 even after rounding +// // as rounding can also round up, we will give an extra margin of 1 to the +// // maximum value of unsigned 32bit integer +// if (_size > 4294967294.0f) { +// *ok = false; +// return ret; +// } qlonglong _ret = std::llround(_size); - ret = static_cast(_ret); + ret = static_cast(_ret); return ret; } diff --git a/src/utils/utils.h b/src/utils/utils.h index 579b50b..5566d9c 100644 --- a/src/utils/utils.h +++ b/src/utils/utils.h @@ -20,6 +20,7 @@ #define UTILS_H #include +#include "../../common/global.h" namespace Cutelyst { class Context; @@ -31,7 +32,7 @@ class Utils Utils(); static QDateTime toUserTZ(Cutelyst::Context *c, const QDateTime &dt); - static QString humanBinarySize(Cutelyst::Context *c, quint64 sizeInByte); + static QString humanBinarySize(Cutelyst::Context *c, quota_size_t sizeInByte); static QString getUserName(Cutelyst::Context *c); /*! @@ -44,7 +45,7 @@ class Utils * \param ok Pointer to a boolean value that will be \c true if conversion succeeded. * \return The quota size in KiB. */ - static quint32 humanToIntSize(Cutelyst::Context *c, const QString &size, bool *ok); + static quota_size_t humanToIntSize(Cutelyst::Context *c, const QString &size, bool *ok); }; #endif // UTILS_H