File indexing completed on 2024-05-19 05:00:39

0001 /*
0002  * SPDX-FileCopyrightText: 2014 Daniel Vrátil <dvratil@redhat.com>
0003  * SPDX-FileCopyrightText: 2016 Elvis Angelaccio <elvis.angelaccio@kde.org>
0004  *
0005  * SPDX-License-Identifier: GPL-2.0-or-later
0006  *
0007  */
0008 
0009 #pragma once
0010 
0011 #include "abstractaccountmanager.h"
0012 
0013 namespace QKeychain
0014 {
0015 class Job;
0016 }
0017 
0018 class KeychainAccountManager : public AbstractAccountManager
0019 {
0020 public:
0021     virtual ~KeychainAccountManager()
0022     {
0023     }
0024 
0025     KGAPI2::AccountPtr account(const QString &accountName) override;
0026     KGAPI2::AccountPtr createAccount() override;
0027     KGAPI2::AccountPtr refreshAccount(const KGAPI2::AccountPtr &account) override;
0028     void removeAccount(const QString &accountName) override;
0029     QSet<QString> accounts() override;
0030 
0031 private:
0032     template<typename T>
0033     QByteArray serialize(const T &object);
0034 
0035     template<typename T>
0036     T deserialize(QByteArray *data);
0037 
0038     void storeAccount(const KGAPI2::AccountPtr &account);
0039 
0040     // Store/remove account names in/from gdrive-accounts keychain entry.
0041     void removeAccountName(const QString &accountName);
0042     void storeAccountName(const QString &accountName);
0043 
0044     QMap<QString, QString> readMap(const QString &accountName);
0045     void writeMap(const QString &accountName, const QMap<QString, QString> &map);
0046     void runKeychainJob(QKeychain::Job *job);
0047 
0048     QSet<QString> m_accounts;
0049 
0050     static QString s_apiKey;
0051     static QString s_apiSecret;
0052 };