File indexing completed on 2024-04-21 04:56:32

0001 /*
0002  *  SPDX-FileCopyrightText: 2013 Alejandro Fiestas Olivares <afiestas@kde.org>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef CREATE_ACCOUNT_JOB_H
0008 #define CREATE_ACCOUNT_JOB_H
0009 
0010 #include "kaccounts_export.h"
0011 
0012 #include <kjob.h>
0013 
0014 #include <QStringList>
0015 
0016 namespace Accounts
0017 {
0018 class Account;
0019 class Manager;
0020 class AccountService;
0021 }
0022 namespace SignOn
0023 {
0024 class Error;
0025 class Identity;
0026 class SessionData;
0027 class IdentityInfo;
0028 }
0029 
0030 namespace KAccounts
0031 {
0032 
0033 /**
0034  * @brief Create a new account for the specified provider
0035  */
0036 class KACCOUNTS_EXPORT CreateAccountJob : public KJob
0037 {
0038     Q_OBJECT
0039     Q_PROPERTY(QString providerName READ providerName WRITE setProviderName NOTIFY providerNameChanged)
0040 public:
0041     explicit CreateAccountJob(QObject *parent = nullptr);
0042     explicit CreateAccountJob(const QString &providerName, QObject *parent = nullptr);
0043 
0044     QString providerName() const
0045     {
0046         return m_providerName;
0047     }
0048     void setProviderName(const QString &name);
0049     void start() override;
0050 
0051 private Q_SLOTS:
0052     void processSession();
0053     void sessionError(const SignOn::Error &signOnError);
0054     void sessionResponse(const SignOn::SessionData &data);
0055     void info(const SignOn::IdentityInfo &info);
0056     void pluginFinished(const QString &screenName, const QString &secret, const QVariantMap &map);
0057     void pluginError(const QString &error);
0058     void pluginCancelled();
0059     void startAuthSession(const QVariantMap &data);
0060 
0061 Q_SIGNALS:
0062     void providerNameChanged();
0063 
0064 private:
0065     void loadPluginAndShowDialog(const QString &pluginName);
0066 
0067     QString m_providerName;
0068     QStringList m_disabledServices;
0069     Accounts::Manager *m_manager = nullptr;
0070     Accounts::Account *m_account = nullptr;
0071     Accounts::AccountService *m_accInfo = nullptr;
0072     SignOn::Identity *m_identity = nullptr;
0073     bool m_done = false;
0074 };
0075 
0076 };
0077 
0078 #endif // CREATE_ACCOUNT_JOB_H