24 #include <QMutexLocker>
31 #include "SignOn/signonplugincommon.h"
32 #include "SignOn/uisessiondata.h"
33 #include "SignOn/uisessiondata_priv.h"
35 using namespace SignOn;
37 namespace SsoTest2PluginNS {
40 static bool is_canceled =
false;
41 static QEventLoop uiLoop;
42 static SignOn::UiSessionData uiData;
44 SsoTest2Plugin::SsoTest2Plugin(QObject *parent):
45 AuthPluginInterface(parent)
49 m_type = QLatin1String(
"ssotest2");
50 m_mechanisms = QStringList(QLatin1String(
"mech1"));
51 m_mechanisms += QLatin1String(
"mech2");
52 m_mechanisms += QLatin1String(
"mech3");
54 qRegisterMetaType<SignOn::SessionData>(
"SignOn::SessionData");
65 QMutexLocker locker(&mutex);
73 const QString &mechanism)
76 emit error(Error::MechanismNotAvailable);
80 QMetaObject::invokeMethod(
this,
83 Q_ARG(SignOn::SessionData, inData),
84 Q_ARG(QString, mechanism));
87 static QByteArray loadImage(
const QString &name)
90 QString resource = QLatin1String(
":/");
93 QImage realImage(resource + name);
95 buffer.open(QIODevice::ReadWrite);
97 realImage.save(&buffer);
101 static QVariantMap nameToParameters(
const QString &dialogName)
105 if (dialogName == QLatin1String(
"Browser")) {
110 data[
"OpenUrl"] =
"www.yahoo.com";
112 data[
"OpenUrl"] =
"www.google.com";
114 data[
"watchdog"] = QString(SSOUI_KEY_SLOT_ACCEPT);
116 }
else if (dialogName == QLatin1String(
"Login")) {
117 data[
"UserName"] =
"testUsername";
118 data[
"Secret"] =
"testSecret";
119 data[
"QueryMessageId"] = 0;
120 data[
"QueryUserName"] =
true;
121 data[
"QueryPassword"] =
true;
122 data[
"watchdog"] = QString(SSOUI_KEY_SLOT_ACCEPT);
123 }
else if (dialogName == QLatin1String(
"Captcha")) {
124 data[
"QueryMessageId"] = 0;
125 data[
"CaptchaImage"] = loadImage(
"Captcha1.jpg");
126 data[
"watchdog"] = QString(SSOUI_KEY_SLOT_REJECT);
127 }
else if (dialogName == QLatin1String(
"LoginAndCaptcha")) {
128 data[
"UserName"] =
"testUsername";
129 data[
"Secret"] =
"testSecret";
130 data[
"QueryMessageId"] = 0;
131 data[
"QueryUserName"] =
true;
132 data[
"QueryPassword"] =
true;
133 data[
"QueryMessageId"] = 0;
135 data[
"CaptchaImage"] = loadImage(
"Captcha1.jpg");
136 data[
"watchdog"] = QString(SSOUI_KEY_SLOT_REJECT);
142 void SsoTest2Plugin::execProcess(
const SignOn::SessionData &inData,
143 const QString &mechanism)
147 SsoTest2Data testData = inData.data<SsoTest2Data>();
148 QStringList chainOfResults;
150 for (
int i = 0; i < testData.ChainOfStates().length(); i++)
152 quint32 currState = testData.CurrentState();
154 QString(
"message from plugin, state : %1").arg(currState);
156 emit statusChanged(PLUGIN_STATE_WAITING, message);
157 usleep(0.1 * 1000000);
159 QString dialogName = testData.ChainOfStates().at(currState);
161 QVariantMap parameters = nameToParameters(dialogName);
162 SignOn::UiSessionData data(parameters);
164 emit userActionRequired(data);
167 int errorCode = data.QueryErrorCode();
169 if ( dialogName == QLatin1String(
"Browser") ) {
170 if ( errorCode == SignOn::QUERY_ERROR_NONE ||
171 errorCode == SignOn::QUERY_ERROR_BAD_URL )
172 chainOfResults.append(QLatin1String(
"OK"));
174 chainOfResults.append(QString(
"FAIL"));
175 }
else if ( dialogName == QLatin1String(
"Login") ) {
176 if (errorCode == SignOn::QUERY_ERROR_NONE)
177 chainOfResults.append(QLatin1String(
"OK"));
179 chainOfResults.append(QString(
"FAIL"));
180 }
else if ( dialogName == QLatin1String(
"Captcha") ||
181 dialogName == QLatin1String(
"LoginAndCaptcha") ) {
182 if (errorCode == SignOn::QUERY_ERROR_CANCELED)
183 chainOfResults.append(QLatin1String(
"OK"));
185 chainOfResults.append(QLatin1String(
"FAIL"));
188 testData.setCurrentState(currState+1);
192 TRACE() <<
"Operation is canceled";
193 QMutexLocker locker(&mutex);
195 emit error(Error::SessionCanceled);
199 if (!testData.ChainOfStates().length() ||
200 testData.CurrentState() >= (quint32)testData.ChainOfStates().length()) {
204 testData.setSecret(
"testSecret_after_test");
206 foreach(QString key, testData.propertyNames())
207 TRACE() << key <<
": " << testData.getProperty(key);
209 TRACE() <<
"Emit the signal";
213 emit result(testData);
221 TRACE() <<
"Completed";
230 QString imageName = QString(
"Captcha%1.jpg").arg(ii);
231 TRACE() << imageName;
232 uiData.setCaptchaImage(loadImage(imageName));
236 emit refreshed(uiData);
237 TRACE() <<
"Completed";