refactor: common/Credentials (#4979)

Use full path in includes
Sort includes
Move anon namespace out of chatterino namespace
Use auto * where possible
Disable convert-member-function-to-static check for all member functions
Don't use else after return
Removed empty constructor
Replace use of `boost::variant` with `std::variant`

Co-authored-by: nerix <nerixdev@outlook.de>
This commit is contained in:
pajlada
2023-11-26 19:38:31 +01:00
committed by GitHub
parent 5b741a8eb6
commit 1f09035bfb
3 changed files with 128 additions and 124 deletions
+1
View File
@@ -63,6 +63,7 @@
- Dev: Removed direct dependency on Qt 5 compatibility module. (#4906) - Dev: Removed direct dependency on Qt 5 compatibility module. (#4906)
- Dev: Refactor `Emoji`'s EmojiMap into a vector. (#4980) - Dev: Refactor `Emoji`'s EmojiMap into a vector. (#4980)
- Dev: Refactor `DebugCount` and add copy button to debug popup. (#4921) - Dev: Refactor `DebugCount` and add copy button to debug popup. (#4921)
- Dev: Refactor `common/Credentials`. (#4979)
- Dev: Changed lifetime of context menus. (#4924) - Dev: Changed lifetime of context menus. (#4924)
- Dev: Refactor `ChannelView`, removing a bunch of clang-tidy warnings. (#4926) - Dev: Refactor `ChannelView`, removing a bunch of clang-tidy warnings. (#4926)
- Dev: Refactor `IrcMessageHandler`, removing a bunch of clang-tidy warnings & changing its public API. (#4927) - Dev: Refactor `IrcMessageHandler`, removing a bunch of clang-tidy warnings & changing its public API. (#4927)
+61 -58
View File
@@ -1,13 +1,17 @@
#include "Credentials.hpp" #include "common/Credentials.hpp"
#include "debug/AssertInGuiThread.hpp" #include "debug/AssertInGuiThread.hpp"
#include "singletons/Paths.hpp" #include "singletons/Paths.hpp"
#include "singletons/Settings.hpp" #include "singletons/Settings.hpp"
#include "util/CombinePath.hpp" #include "util/CombinePath.hpp"
#include "util/Overloaded.hpp" #include "util/Overloaded.hpp"
#include "util/Variant.hpp"
#include <QJsonDocument> #include <QJsonDocument>
#include <QJsonObject> #include <QJsonObject>
#include <QSaveFile>
#include <variant>
#ifndef NO_QTKEYCHAIN #ifndef NO_QTKEYCHAIN
# ifdef CMAKE_BUILD # ifdef CMAKE_BUILD
@@ -20,8 +24,6 @@
# include "keychain.h" # include "keychain.h"
# endif # endif
#endif #endif
#include <boost/variant.hpp>
#include <QSaveFile>
#define FORMAT_NAME \ #define FORMAT_NAME \
([&] { \ ([&] { \
@@ -29,11 +31,12 @@
return QString("chatterino:%1:%2").arg(provider).arg(name_); \ return QString("chatterino:%1:%2").arg(provider).arg(name_); \
})() })()
namespace chatterino {
namespace { namespace {
bool useKeyring()
{ using namespace chatterino;
bool useKeyring()
{
#ifdef NO_QTKEYCHAIN #ifdef NO_QTKEYCHAIN
return false; return false;
#endif #endif
@@ -41,45 +44,43 @@ namespace {
{ {
return false; return false;
} }
else
{
#ifdef Q_OS_LINUX #ifdef Q_OS_LINUX
return getSettings()->useKeyring; return getSettings()->useKeyring;
#else #else
return true; return true;
#endif #endif
} }
}
// Insecure storage: // Insecure storage:
QString insecurePath() QString insecurePath()
{ {
return combinePath(getPaths()->settingsDirectory, "credentials.json"); return combinePath(getPaths()->settingsDirectory, "credentials.json");
} }
QJsonDocument loadInsecure() QJsonDocument loadInsecure()
{ {
QFile file(insecurePath()); QFile file(insecurePath());
file.open(QIODevice::ReadOnly); file.open(QIODevice::ReadOnly);
return QJsonDocument::fromJson(file.readAll()); return QJsonDocument::fromJson(file.readAll());
} }
void storeInsecure(const QJsonDocument &doc) void storeInsecure(const QJsonDocument &doc)
{ {
QSaveFile file(insecurePath()); QSaveFile file(insecurePath());
file.open(QIODevice::WriteOnly); file.open(QIODevice::WriteOnly);
file.write(doc.toJson()); file.write(doc.toJson());
file.commit(); file.commit();
} }
QJsonDocument &insecureInstance() QJsonDocument &insecureInstance()
{ {
static auto store = loadInsecure(); static auto store = loadInsecure();
return store; return store;
} }
void queueInsecureSave() void queueInsecureSave()
{ {
static bool isQueued = false; static bool isQueued = false;
if (!isQueued) if (!isQueued)
@@ -90,29 +91,29 @@ namespace {
isQueued = false; isQueued = false;
}); });
} }
} }
// QKeychain runs jobs asyncronously, so we have to assure that set/erase // QKeychain runs jobs asyncronously, so we have to assure that set/erase
// jobs gets executed in order. // jobs gets executed in order.
struct SetJob { struct SetJob {
QString name; QString name;
QString credential; QString credential;
}; };
struct EraseJob { struct EraseJob {
QString name; QString name;
}; };
using Job = boost::variant<SetJob, EraseJob>; using Job = std::variant<SetJob, EraseJob>;
static std::queue<Job> &jobQueue() std::queue<Job> &jobQueue()
{ {
static std::queue<Job> jobs; static std::queue<Job> jobs;
return jobs; return jobs;
} }
static void runNextJob() void runNextJob()
{ {
#ifndef NO_QTKEYCHAIN #ifndef NO_QTKEYCHAIN
auto &&queue = jobQueue(); auto &&queue = jobQueue();
@@ -122,10 +123,10 @@ namespace {
auto &&item = queue.front(); auto &&item = queue.front();
if (item.which() == 0) // set job std::visit(
{ variant::Overloaded{
auto set = boost::get<SetJob>(item); [](const SetJob &set) {
auto job = new QKeychain::WritePasswordJob("chatterino"); auto *job = new QKeychain::WritePasswordJob("chatterino");
job->setAutoDelete(true); job->setAutoDelete(true);
job->setKey(set.name); job->setKey(set.name);
job->setTextData(set.credential); job->setTextData(set.credential);
@@ -134,11 +135,9 @@ namespace {
runNextJob(); runNextJob();
}); });
job->start(); job->start();
} },
else // erase job [](const EraseJob &erase) {
{ auto *job = new QKeychain::DeletePasswordJob("chatterino");
auto erase = boost::get<EraseJob>(item);
auto job = new QKeychain::DeletePasswordJob("chatterino");
job->setAutoDelete(true); job->setAutoDelete(true);
job->setKey(erase.name); job->setKey(erase.name);
QObject::connect(job, &QKeychain::Job::finished, qApp, QObject::connect(job, &QKeychain::Job::finished, qApp,
@@ -146,15 +145,17 @@ namespace {
runNextJob(); runNextJob();
}); });
job->start(); job->start();
} },
},
item);
queue.pop(); queue.pop();
} }
#endif #endif
} }
static void queueJob(Job &&job) void queueJob(Job &&job)
{ {
auto &&queue = jobQueue(); auto &&queue = jobQueue();
queue.push(std::move(job)); queue.push(std::move(job));
@@ -162,19 +163,19 @@ namespace {
{ {
runNextJob(); runNextJob();
} }
} }
} // namespace } // namespace
namespace chatterino {
Credentials &Credentials::instance() Credentials &Credentials::instance()
{ {
static Credentials creds; static Credentials creds;
return creds; return creds;
} }
Credentials::Credentials() // NOLINTNEXTLINE(readability-convert-member-functions-to-static)
{
}
void Credentials::get(const QString &provider, const QString &name_, void Credentials::get(const QString &provider, const QString &name_,
QObject *receiver, QObject *receiver,
std::function<void(const QString &)> &&onLoaded) std::function<void(const QString &)> &&onLoaded)
@@ -187,7 +188,7 @@ void Credentials::get(const QString &provider, const QString &name_,
{ {
#ifndef NO_QTKEYCHAIN #ifndef NO_QTKEYCHAIN
// if NO_QTKEYCHAIN is set, then this code is never used either way // if NO_QTKEYCHAIN is set, then this code is never used either way
auto job = new QKeychain::ReadPasswordJob("chatterino"); auto *job = new QKeychain::ReadPasswordJob("chatterino");
job->setAutoDelete(true); job->setAutoDelete(true);
job->setKey(name); job->setKey(name);
QObject::connect( QObject::connect(
@@ -207,6 +208,7 @@ void Credentials::get(const QString &provider, const QString &name_,
} }
} }
// NOLINTNEXTLINE(readability-convert-member-functions-to-static)
void Credentials::set(const QString &provider, const QString &name_, void Credentials::set(const QString &provider, const QString &name_,
const QString &credential) const QString &credential)
{ {
@@ -233,6 +235,7 @@ void Credentials::set(const QString &provider, const QString &name_,
} }
} }
// NOLINTNEXTLINE(readability-convert-member-functions-to-static)
void Credentials::erase(const QString &provider, const QString &name_) void Credentials::erase(const QString &provider, const QString &name_)
{ {
assertInGuiThread(); assertInGuiThread();
+1 -1
View File
@@ -19,7 +19,7 @@ public:
void erase(const QString &provider, const QString &name); void erase(const QString &provider, const QString &name);
private: private:
Credentials(); Credentials() = default;
}; };
} // namespace chatterino } // namespace chatterino