File indexing completed on 2025-02-02 05:08:35

0001 /*
0002     SPDX-FileCopyrightText: 2023-2024 Laurent Montel <montel.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 #pragma once
0007 
0008 #include "libaccountwizard_export.h"
0009 #include "resource.h"
0010 #include "transport.h"
0011 #include <QDebug>
0012 #include <QObject>
0013 class ServerTest;
0014 class LIBACCOUNTWIZARD_EXPORT AccountConfigurationBase : public QObject
0015 {
0016     Q_OBJECT
0017     Q_PROPERTY(QString incomingHostName READ incomingHostName WRITE setIncomingHostName NOTIFY incomingHostNameChanged FINAL)
0018     Q_PROPERTY(uint incomingPort READ incomingPort WRITE setIncomingPort NOTIFY incomingPortChanged FINAL)
0019     Q_PROPERTY(QString incomingUserName READ incomingUserName WRITE setIncomingUserName NOTIFY incomingUserNameChanged FINAL)
0020 
0021     Q_PROPERTY(QString outgoingHostName READ outgoingHostName WRITE setOutgoingHostName NOTIFY outgoingHostNameChanged FINAL)
0022     Q_PROPERTY(int outgoingPort READ outgoingPort WRITE setOutgoingPort NOTIFY outgoingPortChanged FINAL)
0023     Q_PROPERTY(QString outgoingUserName READ outgoingUserName WRITE setOutgoingUserName NOTIFY outgoingUserNameChanged FINAL)
0024     Q_PROPERTY(QStringList incomingProtocols READ incomingProtocols CONSTANT)
0025     Q_PROPERTY(QStringList securityProtocols READ securityProtocols CONSTANT)
0026     Q_PROPERTY(QStringList authenticationProtocols READ authenticationProtocols CONSTANT)
0027     Q_PROPERTY(bool configurationIsValid MEMBER mConfigurationIsValid NOTIFY configurationIsValidChanged FINAL)
0028     Q_PROPERTY(int currentIncomingProtocol READ currentIncomingProtocol WRITE setCurrentIncomingProtocol NOTIFY currentIncomingProtocolChanged FINAL)
0029     Q_PROPERTY(int currentIncomingSecurityProtocol READ currentIncomingSecurityProtocol WRITE setCurrentIncomingSecurityProtocol NOTIFY
0030                    currentIncomingSecurityProtocolChanged FINAL)
0031     Q_PROPERTY(int currentOutgoingSecurityProtocol READ currentOutgoingSecurityProtocol WRITE setCurrentOutgoingSecurityProtocol NOTIFY
0032                    currentOutgoingSecurityProtocolChanged FINAL)
0033     Q_PROPERTY(int currentIncomingAuthenticationProtocol READ currentIncomingAuthenticationProtocol WRITE setCurrentIncomingAuthenticationProtocol NOTIFY
0034                    currentIncomingAuthenticationProtocolChanged FINAL)
0035     Q_PROPERTY(int currentOutgoingAuthenticationProtocol READ currentOutgoingAuthenticationProtocol WRITE setCurrentOutgoingAuthenticationProtocol NOTIFY
0036                    currentOutgoingAuthenticationProtocolChanged FINAL)
0037 
0038     Q_PROPERTY(bool disconnectedModeEnabled READ disconnectedModeEnabled WRITE setDisconnectedModeEnabled NOTIFY disconnectedModeEnabledChanged FINAL)
0039 
0040     Q_PROPERTY(bool hasDisconnectedMode MEMBER mHasDisconnectedMode NOTIFY hasDisconnectedModeChanged FINAL)
0041     Q_PROPERTY(bool serverTestInProgress MEMBER mServerTestInProgress NOTIFY serverTestInProgressModeChanged FINAL)
0042 public:
0043     explicit AccountConfigurationBase(QObject *parent = nullptr);
0044     ~AccountConfigurationBase() override;
0045 
0046     [[nodiscard]] QString incomingHostName() const;
0047     void setIncomingHostName(const QString &newIncomingHostName);
0048 
0049     [[nodiscard]] uint incomingPort() const;
0050     void setIncomingPort(uint newPort);
0051 
0052     [[nodiscard]] QString incomingUserName() const;
0053     void setIncomingUserName(const QString &newIncomingUserName);
0054 
0055     [[nodiscard]] QString outgoingHostName() const;
0056     void setOutgoingHostName(const QString &newOutgoingHostName);
0057 
0058     [[nodiscard]] int outgoingPort() const;
0059     void setOutgoingPort(int newPort);
0060 
0061     [[nodiscard]] QString outgoingUserName() const;
0062     void setOutgoingUserName(const QString &newOutgoingUserName);
0063 
0064     [[nodiscard]] QStringList incomingProtocols() const;
0065     [[nodiscard]] QStringList securityProtocols() const;
0066     [[nodiscard]] QStringList authenticationProtocols() const;
0067 
0068     [[nodiscard]] int currentIncomingProtocol() const;
0069     void setCurrentIncomingProtocol(int newCurrentIncomingProtocol);
0070 
0071     [[nodiscard]] int currentIncomingSecurityProtocol() const;
0072     void setCurrentIncomingSecurityProtocol(int newCurrentIncomingSecurityProtocol);
0073 
0074     [[nodiscard]] int currentOutgoingSecurityProtocol() const;
0075     void setCurrentOutgoingSecurityProtocol(int newCurrentOutgoingSecurityProtocol);
0076 
0077     [[nodiscard]] int currentIncomingAuthenticationProtocol() const;
0078     void setCurrentIncomingAuthenticationProtocol(int newCurrentIncomingAuthenticationProtocols);
0079 
0080     [[nodiscard]] int currentOutgoingAuthenticationProtocol() const;
0081     void setCurrentOutgoingAuthenticationProtocol(int newCurrentOutgoingAuthenticationProtocols);
0082 
0083     [[nodiscard]] bool disconnectedModeEnabled() const;
0084     void setDisconnectedModeEnabled(bool disconnectedMode);
0085 
0086     Q_INVOKABLE void checkServer();
0087 
0088     void createAccount();
0089 
0090     void setEmail(const QString &email);
0091 
0092     void setPassword(const QString &newPassword);
0093 
0094     void setIdentityId(int id);
0095 
0096     int identityId() const;
0097 
0098 Q_SIGNALS:
0099     void incomingHostNameChanged();
0100     void incomingPortChanged();
0101     void incomingUserNameChanged();
0102 
0103     void outgoingHostNameChanged();
0104     void outgoingPortChanged();
0105     void outgoingUserNameChanged();
0106 
0107     void configurationIsValidChanged();
0108     void currentIncomingProtocolChanged();
0109 
0110     void currentIncomingSecurityProtocolChanged();
0111     void currentOutgoingSecurityProtocolChanged();
0112 
0113     void currentIncomingAuthenticationProtocolChanged();
0114     void currentOutgoingAuthenticationProtocolChanged();
0115 
0116     void disconnectedModeEnabledChanged();
0117 
0118     void hasDisconnectedModeChanged();
0119 
0120     void error(const QString &msg);
0121     void info(const QString &msg);
0122     void finished(const QString &msg);
0123 
0124     void serverTestInProgressModeChanged();
0125     void serverTestDone();
0126 
0127 protected:
0128     LIBACCOUNTWIZARD_NO_EXPORT virtual void createTransport();
0129     [[nodiscard]] LIBACCOUNTWIZARD_NO_EXPORT Transport::TransportInfo createTransportInfo() const;
0130     LIBACCOUNTWIZARD_NO_EXPORT virtual void generateResource(const Resource::ResourceInfo &info);
0131 
0132 private:
0133     LIBACCOUNTWIZARD_NO_EXPORT void createResource();
0134     [[nodiscard]] LIBACCOUNTWIZARD_NO_EXPORT Resource::ResourceInfo createPop3Resource() const;
0135     [[nodiscard]] LIBACCOUNTWIZARD_NO_EXPORT Resource::ResourceInfo createImapResource() const;
0136     [[nodiscard]] LIBACCOUNTWIZARD_NO_EXPORT Resource::ResourceInfo createKolabResource() const;
0137     LIBACCOUNTWIZARD_NO_EXPORT void checkConfiguration();
0138     [[nodiscard]] LIBACCOUNTWIZARD_NO_EXPORT QString convertOutgoingSecurityProtocol(int protocol) const;
0139     [[nodiscard]] LIBACCOUNTWIZARD_NO_EXPORT QString convertOutgoingAuthenticationProtocol(int protocol) const;
0140     [[nodiscard]] LIBACCOUNTWIZARD_NO_EXPORT QString generateUniqueAccountName() const;
0141     [[nodiscard]] LIBACCOUNTWIZARD_NO_EXPORT QString convertIncomingAuthenticationProtocol(int protocol) const;
0142     [[nodiscard]] LIBACCOUNTWIZARD_NO_EXPORT QString convertIncomingSecurityProtocol(int index) const;
0143     LIBACCOUNTWIZARD_NO_EXPORT void slotTestFail();
0144     LIBACCOUNTWIZARD_NO_EXPORT void slotTestResult(const QString &result);
0145 
0146     // Incoming
0147     QString mIncomingUserName;
0148     QString mIncomingHostName;
0149     uint mIncomingPort = 995;
0150 
0151     // Outgoing
0152     QString mOutgoingUserName;
0153     QString mOutgoingHostName;
0154 
0155     QString mPassword;
0156 
0157     int mOutgoingPort = 465;
0158 
0159     int mCurrentIncomingProtocol = 0; // POP3
0160 
0161     int mCurrentIncomingSecurityProtocol = 2; // NONE
0162     int mCurrentOutgoingSecurityProtocol = 2; // NONE
0163 
0164     int mCurrentIncomingAuthenticationProtocol = 0; // Clear Text
0165     int mCurrentOutgoingAuthenticationProtocol = 0; // Clear Text
0166 
0167     int mIdentityId = 0;
0168 
0169     // configuration is Valid
0170     bool mConfigurationIsValid = false;
0171 
0172     // Has DisconnectedMode
0173     bool mHasDisconnectedMode = false;
0174 
0175     bool mDisconnectedModeEnabled = false;
0176 
0177     bool mServerTestInProgress = false;
0178 
0179     ServerTest *mServerTest = nullptr;
0180 };
0181 QDebug operator<<(QDebug d, const AccountConfigurationBase &t);