File indexing completed on 2024-12-01 11:13:18
0001 /* 0002 SPDX-FileCopyrightText: 2011 Ilia Kats <ilia-kats@gmx.net> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #ifndef OPENCONNECTAUTHWORKERTHREAD_H 0008 #define OPENCONNECTAUTHWORKERTHREAD_H 0009 0010 extern "C" { 0011 #include <openconnect.h> 0012 } 0013 0014 #if OPENCONNECT_CHECK_VER(3, 0) 0015 #define NEWGROUP_SUPPORTED 1 0016 #define AUTHGROUP_OPT(form) (void *)(form)->authgroup_opt 0017 #define AUTHGROUP_SELECTION(form) (form)->authgroup_selection 0018 #define FORMCHOICE(sopt, i) ((sopt)->choices[i]) 0019 #define IGNORE_OPT(opt) ((opt)->flags & OC_FORM_OPT_IGNORE) 0020 #else 0021 #define NEWGROUP_SUPPORTED 0 0022 #define AUTHGROUP_OPT(form) nullptr 0023 #define AUTHGROUP_SELECTION(form) 0 0024 #define FORMCHOICE(sopt, i) (&(sopt)->choices[i]) 0025 #define IGNORE_OPT(opt) 0 0026 0027 #define OC_FORM_RESULT_ERR -1 0028 #define OC_FORM_RESULT_OK 0 0029 #define OC_FORM_RESULT_CANCELLED 1 0030 #define OC_FORM_RESULT_NEWGROUP 2 0031 #endif 0032 0033 #if OPENCONNECT_CHECK_VER(4, 0) 0034 #define OC3DUP(x) (x) 0035 #else 0036 #define openconnect_set_option_value(opt, val) \ 0037 do { \ 0038 struct oc_form_opt *_o = (opt); \ 0039 free(_o->value); \ 0040 _o->value = strdup(val); \ 0041 } while (0) 0042 #define openconnect_free_cert_info(v, x) ::free(x) 0043 #define OC3DUP(x) strdup(x) 0044 #endif 0045 0046 #include <QThread> 0047 0048 class QMutex; 0049 class QWaitCondition; 0050 struct openconnect_info; 0051 0052 class OpenconnectAuthWorkerThread : public QThread 0053 { 0054 Q_OBJECT 0055 friend class OpenconnectAuthStaticWrapper; 0056 0057 public: 0058 OpenconnectAuthWorkerThread(QMutex *, QWaitCondition *, bool *, bool *, int); 0059 ~OpenconnectAuthWorkerThread() override; 0060 struct openconnect_info *getOpenconnectInfo(); 0061 0062 Q_SIGNALS: 0063 void validatePeerCert(const QString &, const QString &, const QString &, bool *); 0064 void processAuthForm(struct oc_auth_form *); 0065 void updateLog(const QString &, const int &); 0066 void writeNewConfig(const QString &); 0067 void cookieObtained(const int &); 0068 void initTokens(); 0069 0070 protected: 0071 void run() override; 0072 0073 private: 0074 int writeNewConfig(const char *, int); 0075 int validatePeerCert(void *, const char *); 0076 int processAuthFormP(struct oc_auth_form *); 0077 void writeProgress(int level, const char *, va_list); 0078 #if OPENCONNECT_CHECK_VER(5, 8) 0079 int openUri(struct openconnect_info *, const char *, void *); 0080 #endif 0081 0082 QMutex *m_mutex; 0083 QWaitCondition *m_waitForUserInput; 0084 bool *m_userDecidedToQuit; 0085 bool *m_formGroupChanged; 0086 struct openconnect_info *m_openconnectInfo; 0087 }; 0088 0089 #endif