1 /* 2 SPDX-FileCopyrightText: 2015-2017 Krzysztof Nowicki <krissn@op.pl> 3 4 SPDX-License-Identifier: LGPL-2.0-or-later 5 */ 6 7 #pragma once 8 9 #include <QHash> 10 #include <QString> 11 #include <QUrl> 12 13 #include "ewsjob.h" 14 #include "ewsserverversion.h" 15 #include "ewstypes.h" 16 17 namespace KIO 18 { 19 class Job; 20 } 21 22 class EwsPoxAutodiscoverRequest : public EwsJob 23 { 24 Q_OBJECT 25 public: 26 enum Action { 27 RedirectUrl = 0, 28 RedirectAddr, 29 Settings, 30 }; 31 32 enum ProtocolType { 33 ExchangeProto, 34 ExchangeProxyProto, 35 ExchangeWebProto, 36 UnknownProto, 37 }; 38 39 class Protocol 40 { 41 public: Protocol()42 Protocol() 43 : mType(UnknownProto) 44 { 45 } 46 isValid()47 bool isValid() const 48 { 49 return mType != UnknownProto; 50 } 51 type()52 ProtocolType type() const 53 { 54 return mType; 55 } 56 ewsUrl()57 const QString &ewsUrl() const 58 { 59 return mEwsUrl; 60 } 61 oabUrl()62 const QString &oabUrl() const 63 { 64 return mOabUrl; 65 } 66 67 private: 68 ProtocolType mType; 69 QString mEwsUrl; 70 QString mOabUrl; 71 friend class EwsPoxAutodiscoverRequest; 72 }; 73 74 EwsPoxAutodiscoverRequest(const QUrl &url, const QString &email, const QString &userAgent, bool useNTLMv2, QObject *parent); 75 ~EwsPoxAutodiscoverRequest() override; 76 serverVersion()77 const EwsServerVersion &serverVersion() const 78 { 79 return mServerVersion; 80 } 81 82 void dump() const; 83 84 void start() override; 85 action()86 Action action() const 87 { 88 return mAction; 89 } 90 protocol(ProtocolType type)91 const Protocol protocol(ProtocolType type) const 92 { 93 return mProtocols.value(type); 94 } 95 redirectAddr()96 const QString &redirectAddr() const 97 { 98 return mRedirectAddr; 99 } 100 redirectUrl()101 const QString &redirectUrl() const 102 { 103 return mRedirectUrl; 104 } 105 lastHttpUrl()106 const QUrl &lastHttpUrl() const 107 { 108 return mLastUrl; 109 } 110 111 protected: 112 void doSend(); 113 void prepare(const QString &body); 114 bool readResponse(QXmlStreamReader &reader); 115 116 protected Q_SLOTS: 117 void requestResult(KJob *job); 118 void requestData(KIO::Job *job, const QByteArray &data); 119 void requestRedirect(KIO::Job *job, const QUrl &url); 120 121 private: 122 bool readAccount(QXmlStreamReader &reader); 123 bool readProtocol(QXmlStreamReader &reader); 124 125 QString mResponseData; 126 QString mBody; 127 QUrl mUrl; 128 QString mEmail; 129 QString mUserAgent; 130 bool mUseNTLMv2; 131 EwsServerVersion mServerVersion; 132 Action mAction; 133 QString mRedirectUrl; 134 QString mRedirectAddr; 135 QHash<ProtocolType, Protocol> mProtocols; 136 QUrl mLastUrl; 137 }; 138 139