File indexing completed on 2023-11-26 08:17:53

0001 /*
0002    SPDX-FileCopyrightText: 2017-2023 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "libruqolacore_export.h"
0010 #include <QObject>
0011 #include <QString>
0012 
0013 namespace QKeychain
0014 {
0015 class Job;
0016 }
0017 
0018 class QSettings;
0019 class LIBRUQOLACORE_EXPORT RocketChatAccountSettings : public QObject
0020 {
0021     Q_OBJECT
0022 public:
0023     explicit RocketChatAccountSettings(const QString &accountFileName = QString(), QObject *parent = nullptr);
0024     ~RocketChatAccountSettings() override;
0025 
0026     [[nodiscard]] bool isValid() const;
0027 
0028     [[nodiscard]] QString userId() const;
0029     void setUserId(const QString &userId);
0030 
0031     [[nodiscard]] QString authToken() const;
0032     void setAuthToken(const QString &authToken);
0033 
0034     // account info
0035     [[nodiscard]] QString serverUrl() const;
0036     void setServerUrl(const QString &serverUrl);
0037 
0038     [[nodiscard]] QString accountName() const;
0039     void setAccountName(const QString &accountName);
0040 
0041     [[nodiscard]] QString userName() const;
0042     void setUserName(const QString &userName);
0043 
0044     [[nodiscard]] QString twoFactorAuthenticationCode() const;
0045     void setTwoFactorAuthenticationCode(const QString &twoFactorAuthenticationCode);
0046 
0047     void logout();
0048     [[nodiscard]] QString cacheBasePath();
0049 
0050     [[nodiscard]] QString password() const;
0051     void setPassword(const QString &password);
0052 
0053     void removeSettings();
0054 
0055     [[nodiscard]] qint64 expireToken() const;
0056     void setExpireToken(qint64 expireToken);
0057 
0058     [[nodiscard]] bool tokenExpired() const;
0059 
0060     [[nodiscard]] bool accountEnabled() const;
0061     void setAccountEnabled(bool accountEnabled);
0062 
0063     [[nodiscard]] QString lastSelectedRoom() const;
0064     void setLastSelectedRoom(const QString &roomId);
0065 
0066     [[nodiscard]] QString displayName() const;
0067     void setDisplayName(const QString &displayName);
0068 
0069 Q_SIGNALS:
0070     void serverURLChanged();
0071     void userNameChanged();
0072     void userIdChanged();
0073     void accountNameChanged();
0074     void passwordChanged();
0075     void twoFactorAuthenticationCodeChanged();
0076     void enableAccountChanged();
0077     void displayNameChanged();
0078 
0079 private:
0080     Q_DISABLE_COPY(RocketChatAccountSettings)
0081     LIBRUQOLACORE_NO_EXPORT void initializeSettings(const QString &accountFileName);
0082     LIBRUQOLACORE_NO_EXPORT void slotPasswordRead(QKeychain::Job *job);
0083     LIBRUQOLACORE_NO_EXPORT void slotPasswordWritten(QKeychain::Job *job);
0084 
0085     QString mUserId;
0086     QString mAuthToken;
0087     QString mServerUrl;
0088     QString mAccountName;
0089     QString mDisplayName;
0090     QString mCachePath;
0091     QString mUserName;
0092     QString mPassword;
0093     bool mUseLdap = false;
0094     QString mTwoFactorAuthenticationCode;
0095     qint64 mExpireToken = -1;
0096     QSettings *mSetting = nullptr;
0097     bool mAccountEnabled = true;
0098 };