File indexing completed on 2024-04-28 13:21:10
0001 /* 0002 SPDX-FileCopyrightText: 2020 David Edmundson <davidedmundson@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #pragma once 0008 0009 #include <QObject> 0010 #include <QThread> 0011 0012 class PamWorker; 0013 0014 class PamAuthenticator : public QObject 0015 { 0016 Q_OBJECT 0017 0018 Q_PROPERTY(bool busy READ isBusy NOTIFY busyChanged) 0019 0020 Q_PROPERTY(QString prompt READ getPrompt NOTIFY prompt) 0021 Q_PROPERTY(QString promptForSecret READ getPromptForSecret NOTIFY promptForSecret) 0022 0023 Q_PROPERTY(QString infoMessage READ getInfoMessage NOTIFY infoMessage) 0024 Q_PROPERTY(QString errorMessage READ getErrorMessage NOTIFY errorMessage) 0025 0026 Q_PROPERTY(bool unlocked READ isUnlocked NOTIFY succeeded) 0027 0028 public: 0029 PamAuthenticator(const QString &service, const QString &user, QObject *parent = nullptr); 0030 ~PamAuthenticator(); 0031 0032 bool isBusy() const; 0033 bool isUnlocked() const; 0034 0035 // Get prefix to de-duplicate from their signals. 0036 QString getPrompt() const; 0037 QString getPromptForSecret() const; 0038 QString getInfoMessage() const; 0039 QString getErrorMessage() const; 0040 0041 Q_SIGNALS: 0042 void busyChanged(); 0043 void promptForSecret(const QString &msg); 0044 void prompt(const QString &msg); 0045 void infoMessage(const QString &msg); 0046 void errorMessage(const QString &msg); 0047 void succeeded(); 0048 void failed(); 0049 0050 public Q_SLOTS: 0051 void tryUnlock(); 0052 void respond(const QByteArray &response); 0053 void cancel(); 0054 0055 protected: 0056 void init(const QString &service, const QString &user); 0057 void connectNotify(const QMetaMethod &signal) override; 0058 0059 private: 0060 void setBusy(bool busy); 0061 0062 const std::vector<std::pair<QMetaMethod, const QString &>> m_signalsToMembers; 0063 // NOTE Don't forget to reset in cancel as necessary 0064 QString m_prompt; 0065 QString m_promptForSecret; 0066 QString m_errorMessage; 0067 QString m_infoMessage; 0068 bool m_busy = false; 0069 bool m_unlocked = false; 0070 QThread m_thread; 0071 PamWorker *d; 0072 };