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);