ImagingTools Core SDK
CRemoteStandardLoginGuiComp.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// Qt includes
6#include <QtCore/QThread>
7
8// ACF includes
9#include <iauth/ILogin.h>
10#include <iqt/ISettingsProvider.h>
11#include <iqtgui/TDesignerGuiCompBase.h>
12#include <iqtgui/TRestorableGuiWrap.h>
13#include <ilog/IMessageConsumer.h>
14
15// ImtCore includes
16#include <imtbase/TModelUpdateBinder.h>
17#include <imtcom/IConnectionStatusProvider.h>
18#include <imtauth/ISuperuserController.h>
19#include <imtauth/ISuperuserProvider.h>
20#include <GeneratedFiles/imtauthgui/ui_CRemoteStandardLoginGuiComp.h>
21
22
23namespace imtauthgui
24{
25
26
27class CRemoteStandardLoginGuiComp: public iqtgui::TRestorableGuiWrap<
28 iqtgui::TDesignerGuiCompBase<Ui::CRemoteStandardLoginGuiComp>>
29{
30 Q_OBJECT
31public:
32 enum UiState
33 {
34 US_USER_PASSWORD_LOGIN,
35 US_ENTER_SU_PASSWORD,
36 US_NO_CONNECTION_TO_SERVER,
37 US_WAIT_INDICATOR
38 };
39
40 typedef iqtgui::TRestorableGuiWrap<
41 iqtgui::TDesignerGuiCompBase<Ui::CRemoteStandardLoginGuiComp>> BaseClass;
42
43 I_BEGIN_COMPONENT(CRemoteStandardLoginGuiComp);
44 I_REGISTER_SUBELEMENT(LoginLog);
45 I_REGISTER_SUBELEMENT_INTERFACE(LoginLog, ilog::IMessageConsumer, ExtractLoginLog);
46 I_ASSIGN(m_loginCompPtr, "Login", "Login", false, "Login");
47 I_ASSIGN(m_superuserProviderCompPtr, "SuperuserProvider", "Superuser provider", false, "SuperuserProvider");
48 I_ASSIGN(m_settingsProviderCompPtr, "SettingsProvider", "Application settings provider", false, "SettingsProvider");
49 I_ASSIGN(m_superuserControllerCompPtr, "SuperuserController", "Superuser controller", false, "SuperuserController");
50 I_ASSIGN(m_loginStatusProviderCompPtr, "ConnectionStatusProvider", "Component for providing server connection status", false, "ConnectionStatusProvider");
51 I_ASSIGN(m_pumaLoginStatusProviderCompPtr, "PumaConnectionStatusProvider", "Component for providing puma server connection status", true, "PumaConnectionStatusProvider");
52 I_END_COMPONENT;
53
54 CRemoteStandardLoginGuiComp();
55 virtual bool eventFilter(QObject* watched, QEvent* event) override;
56
57protected:
58 // reimplemented (icomp::CComponentBase)
59 virtual void OnComponentCreated() override;
60 virtual void OnComponentDestroyed() override;
61
62 // reimplemented (iqtgui::CGuiComponentBase)
63 virtual void OnGuiShown() override;
64 virtual void OnGuiHidden() override;
65 virtual void OnGuiCreated() override;
66 virtual void OnGuiDestroyed() override;
67
68 // reimplemented (iqtgui::TRestorableGuiWrap)
69 virtual void OnRestoreSettings(const QSettings& settings) override;
70 virtual void OnSaveSettings(QSettings& settings) const override;
71
72private Q_SLOTS:
73 void on_LoginButton_clicked();
74 void on_SetPasswordButton_clicked();
75 void on_RefreshButton_clicked();
76 void on_PasswordEdit_textEdited(const QString& text);
77 void on_SuPasswordEdit_textEdited(const QString& text);
78 void on_SuConfirmPasswordEdit_textEdited(const QString& text);
79 void OnSetSuPasswordFinished();
80
81private:
82 void OnLoginUpdate(const istd::IChangeable::ChangeSet& changeSet, const iauth::ILogin* objectPtr);
83 void OnConnectionStatusUpdate(const istd::IChangeable::ChangeSet& changeSet, const imtcom::IConnectionStatusProvider* objectPtr);
84 void OnPumaConnectionStatusUpdate(const istd::IChangeable::ChangeSet& changeSet, const imtcom::IConnectionStatusProvider* objectPtr);
85 void UpdateLoginButtonsState();
86 void CheckMatchingPassword();
87
88 // Helper methods for refresh token management
89 bool TryRestoreSessionWithRefreshToken(const QString& userName, const QByteArray& refreshToken);
90 void SaveRefreshTokenIfRememberMe(QSettings& settings) const;
91 void ClearRefreshTokenIfNeeded(QSettings& settings) const;
92
93private:
94 class LoginLog: public ilog::IMessageConsumer
95 {
96 public:
97 LoginLog(CRemoteStandardLoginGuiComp& parent);
98
99 // reimplemented (ilog::IMessageConsumer)
100 virtual bool IsMessageSupported(int messageCategory = -1, int messageId = -1, const istd::IInformationProvider* messagePtr = NULL) const override;
101 virtual void AddMessage(const MessagePtr& messagePtr) override;
102
103 private:
104 CRemoteStandardLoginGuiComp& m_parent;
105 };
106
107 template <typename InterfaceType>
108 static InterfaceType* ExtractLoginLog(CRemoteStandardLoginGuiComp& parent)
109 {
110 return &parent.m_loginLog;
111 }
112
113 class SetSuPasswordThread: public QThread
114 {
115 public:
116 enum ThreadState
117 {
118 TS_UNKNOWN = 0,
119 TS_OK,
120 TS_FAILED
121 };
122
123 SetSuPasswordThread(CRemoteStandardLoginGuiComp& parent);
124
125 void Start(const QByteArray& suPassword);
126 ThreadState GetState();
127
128 protected:
129 // reimplemented (QThread)
130 virtual void run() override;
131
132 private:
133 CRemoteStandardLoginGuiComp& m_parent;
134 QByteArray m_suPassword;
135 ThreadState m_state;
136 };
137
138private:
139 I_REF(imtauth::ISuperuserProvider, m_superuserProviderCompPtr);
140 I_REF(imtauth::ISuperuserController, m_superuserControllerCompPtr);
141 I_REF(iauth::ILogin, m_loginCompPtr);
142 I_REF(iqt::ISettingsProvider, m_settingsProviderCompPtr);
143 I_REF(imtcom::IConnectionStatusProvider, m_loginStatusProviderCompPtr);
144 I_REF(imtcom::IConnectionStatusProvider, m_pumaLoginStatusProviderCompPtr);
145
149
150 LoginLog m_loginLog;
151 SetSuPasswordThread m_setSuPasswordThread;
152};
153
154
155} // namespace imtauthgui
156
157
Interface for monitoring network connection status with observable state changes.
Authentication UI Components Module.