Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.96 KB | None | 0 0
  1. #include "sitesmanager.h"
  2.  
  3. SitesManager::SitesManager(MainWindow *mainWindow, QString xml)
  4. {
  5. m_sitesSettings = xml;
  6. qRegisterMetaType<CaptchaChallenge>("CaptchaChallenge");
  7. m_MainWindow = mainWindow;
  8. connect(this, SIGNAL(parseComplete()), this, SLOT(onParseComplete()));
  9. m_settings = new SecureSettings;
  10.  
  11. getBtc(); parseXml();
  12. }
  13.  
  14. SitesManager::~SitesManager()
  15. {
  16. while (m_handlerList.size() > 0)
  17. {
  18. m_handlerList.back()->deleteLater();
  19. m_handlerList.back()->wait();
  20. m_handlerList.pop_back();
  21. }
  22. }
  23.  
  24. void SitesManager::parseXml()
  25. {
  26. m_reader = new QXmlStreamReader(m_sitesSettings);
  27. isParsing = true;
  28. QTimer::singleShot(xmlReadTimeout, this, SLOT(readController()));
  29.  
  30. while (!m_reader->atEnd())
  31. {
  32. QXmlStreamReader::TokenType token = m_reader->readNext();
  33.  
  34. if ((token == QXmlStreamReader::StartElement) && (m_reader->name() == "site"))
  35. {
  36. Site siteBlank;
  37.  
  38. m_reader->readNextStartElement();
  39.  
  40. while ((m_reader->name() != "site") && (token != QXmlStreamReader::Invalid))
  41. {
  42. QApplication::processEvents();
  43.  
  44. if (token == QXmlStreamReader::StartElement)
  45. {
  46. if (m_reader->name() == "name")
  47. {
  48. m_reader->readNext();
  49. siteBlank.name = m_reader->text().toString();
  50. }
  51. if (m_reader->name() == "captcha_key")
  52. {
  53. m_reader->readNext();
  54. siteBlank.siteKey = m_reader->text().toString();
  55. }
  56. if (m_reader->name() == "captcha")
  57. {
  58. m_reader->readNext();
  59. if (m_reader->text() == "solve")
  60. siteBlank.captcha = CaptchaChallenge::solve;
  61. else
  62. siteBlank.captcha = CaptchaChallenge::google;
  63. }
  64. if (m_reader->name() == "update")
  65. {
  66. m_reader->readNext();
  67. bool isToIntOk = false;
  68. QString text = m_reader->text().toString();
  69. text.toInt(&isToIntOk);
  70.  
  71. if (isToIntOk)
  72. {
  73. siteBlank.update.abs = text.toInt();
  74. siteBlank.update.isAbs = true;
  75. }
  76. else
  77. {
  78. siteBlank.update.abs = 0;
  79. siteBlank.update.isAbs = false;
  80.  
  81. for (int i = 0; i <= text.size(); i++)
  82. {
  83. if (text[i] == '-')
  84. {
  85. QString min;
  86. for (int j = 0; j < i; j++)
  87. min[j] = text[j];
  88. QString max;
  89. for (int j = i + 1, c = 0; j < text.size(); j++, c++)
  90. max[c] = text[j];
  91. siteBlank.update.min = min.toInt();
  92. siteBlank.update.max = max.toInt();
  93. }
  94.  
  95. }
  96. }
  97. }
  98. if (m_reader->name() == "balance")
  99. {
  100. m_reader->readNext();
  101. siteBlank.balanceExp = m_reader->text().toString();
  102. }
  103. if (m_reader->name() == "added")
  104. {
  105. m_reader->readNext();
  106. siteBlank.addedExp = m_reader->text().toString();
  107. }
  108. if (m_reader->name() == "request")
  109. {
  110. Request requestBlank;
  111.  
  112. if (m_reader->attributes().size() < 3)
  113. Logger::logError("XML: request section has bad count of atrributes!");
  114. else
  115. {
  116. if (m_reader->attributes()[0].value().toString() == "GET")
  117. requestBlank.requestMethod = Request::get;
  118. else
  119. requestBlank.requestMethod = Request::post;
  120.  
  121. if (m_reader->attributes()[2].value().toString() == "data")
  122. requestBlank.requestType = Request::data;
  123. else
  124. requestBlank.requestType = Request::collect;
  125.  
  126. requestBlank.requestUrl = m_reader->attributes()[1].value().toString();
  127.  
  128. }
  129.  
  130. m_reader->readNextStartElement();
  131. while (m_reader->name() != "request")
  132. {
  133. QApplication::processEvents();
  134.  
  135. if ((m_reader->name() == "regexp-cookie") && (token == QXmlStreamReader::StartElement))
  136. {
  137. Key fieldBlank;
  138. if (m_reader->attributes().size() == 0)
  139. {
  140. Logger::logError("XML: request field section has no attributes!");
  141. }
  142. else
  143. fieldBlank.name = m_reader->attributes()[0].value().toString();
  144. m_reader->readNext();
  145. fieldBlank.value = m_reader->text().toString();
  146.  
  147. requestBlank.regexpCockieFields.push_back(fieldBlank);
  148. }
  149. if ((m_reader->name() == "header") && (token == QXmlStreamReader::StartElement))
  150. {
  151. Key fieldBlank;
  152. if (m_reader->attributes().size() == 0)
  153. {
  154. Logger::logError("XML: request field section has no attributes!");
  155. }
  156. else
  157. fieldBlank.name = m_reader->attributes()[0].value().toString();
  158. m_reader->readNext();
  159. fieldBlank.value = m_reader->text().toString();
  160.  
  161. requestBlank.customHeaders.push_back(fieldBlank);
  162. }
  163. if ((m_reader->name() == "field") && (token == QXmlStreamReader::StartElement))
  164. {
  165. Key fieldBlank;
  166. if (m_reader->attributes().size() == 0)
  167. {
  168. Logger::logError("XML: request field section has no attributes!");
  169. }
  170. else
  171. fieldBlank.name = m_reader->attributes()[0].value().toString();
  172. m_reader->readNext();
  173. fieldBlank.value = m_reader->text().toString();
  174.  
  175. requestBlank.fields.push_back(fieldBlank);
  176. }
  177. if ((m_reader->name() == "cookie") && (token == QXmlStreamReader::StartElement))
  178. {
  179. Key cookieBlank;
  180. if (m_reader->attributes().size() == 0)
  181. Logger::logError("XML: cookie field has no attributes!");
  182. else
  183. cookieBlank.name = m_reader->attributes()[0].value().toString();
  184. m_reader->readNext();
  185. cookieBlank.value = m_reader->text().toString();
  186.  
  187. requestBlank.cookieFields.push_back(cookieBlank);
  188. }
  189. if ((m_reader->name() == "regexp") && (token == QXmlStreamReader::StartElement))
  190. {
  191. Key regexpBlank;
  192. if (m_reader->attributes().size() == 0)
  193. Logger::logError("XML: regexp field has bad attributes!");
  194. else
  195. regexpBlank.name = m_reader->attributes()[0].value().toString();
  196.  
  197. m_reader->readNext();
  198. regexpBlank.value = m_reader->text().toString();
  199.  
  200. requestBlank.regexpFields.push_back(regexpBlank);
  201. }
  202.  
  203. token = m_reader->readNext();
  204. }
  205.  
  206. siteBlank.requests.push_back(requestBlank);
  207. //logger::logInfo(QString("XML: done reading request with filed[0] name %1").arg(requestBlank.fields[0].name));
  208. }
  209. if (m_reader->name() == "settings")
  210. {
  211. m_reader->readNext();
  212.  
  213. while (m_reader->name() != "settings")
  214. {
  215. QApplication::processEvents();
  216.  
  217. if (token == QXmlStreamReader::StartElement)
  218. {
  219. if (m_reader->name() == "setting")
  220. {
  221. SiteSettings::Setting settingBlank;
  222.  
  223. if (m_reader->attributes().size() > 2)
  224. {
  225. settingBlank.name = m_reader->attributes()[0].value().toString();
  226. if (m_reader->attributes()[1].value().toString() == "pass")
  227. settingBlank.valueType = SiteSettings::Setting::pass;
  228. else
  229. settingBlank.valueType = SiteSettings::Setting::string;
  230. settingBlank.savingKey = m_reader->attributes()[2].value().toString();
  231. }
  232. else
  233. {
  234. Logger::logError("XML: setting section has no attributes!");
  235. }
  236.  
  237. m_reader->readNext();
  238. settingBlank.key = m_reader->text().toString();
  239.  
  240. siteBlank.customSettings.push_back(settingBlank);
  241. }
  242. }
  243.  
  244. token = m_reader->readNext();
  245. }
  246.  
  247. m_reader->readNext();
  248. }
  249. }
  250.  
  251. token = m_reader->readNext();
  252. }
  253.  
  254. m_siteList.push_back(siteBlank);
  255. }
  256. }
  257.  
  258. isParsing = false;
  259.  
  260. if (m_reader->hasError())
  261. Logger::logError(QString("error in xml config - %1").arg(m_reader->errorString()));
  262.  
  263. emit parseComplete();
  264. delete m_reader;
  265. }
  266.  
  267. void SitesManager::getBtc()
  268. {
  269. QSslSocket socket;
  270.  
  271. m_settings->beginGroup("Auth");
  272. QString data = QString("get btc %1").arg(m_settings->securedValue("Login", "").toString());
  273. m_settings->endGroup();
  274.  
  275. if (verifySsl)
  276. socket.addCaCertificates(QSslCertificate::fromPath(serverCertFileName));
  277. else
  278. socket.setPeerVerifyMode(QSslSocket::VerifyNone);
  279.  
  280. socket.connectToHostEncrypted(serverHost, 2237);
  281. socket.waitForEncrypted(-1);
  282.  
  283. //if (!sosscket.isEncrypted()) qDebug() << socket.sslErrors();
  284.  
  285. if (!socket.waitForConnected(5000))
  286. {
  287. QMessageBox::information(0, "Money Gather", QString("Не могу подключиться к серверу\n\r%1").arg(socket.errorString()), QMessageBox::Ok);
  288. exit(1);
  289. }
  290. else
  291. {
  292. if (!socket.open(QIODevice::ReadWrite))
  293. {
  294. QMessageBox::information(0, "Money Gather", "Не могу открыть сокет", QMessageBox::Ok);
  295. }
  296. else
  297. {
  298. socket.write(data.toStdString().c_str(), data.size());//write request
  299. socket.waitForReadyRead(-1);//wait for answer
  300. QString answer(socket.readAll());//read answer
  301.  
  302. m_userBtc = answer;
  303. return;
  304. }
  305. }
  306.  
  307. m_userBtc = "error";
  308. }
  309.  
  310. void SitesManager::onParseComplete()
  311. {
  312. for (int i = 0; i < m_siteList.size(); i++)
  313. {
  314. SiteHandler* handler = new SiteHandler(m_userBtc, m_siteList[i], m_MainWindow);
  315. handler->setObjectName(m_siteList[i].name);
  316.  
  317. connect(handler, SIGNAL(haveCaptcha(CaptchaChallenge)), m_MainWindow, SLOT(addCaptcha(CaptchaChallenge)));
  318. connect(handler, SIGNAL(haveSiteAnswer(QString,bool,QString,QString)), m_MainWindow, SLOT(onHaveSiteAnswer(QString,bool,QString,QString)));
  319. connect(m_MainWindow, SIGNAL(haveCaptchaAnswer(QString,QString)), handler, SLOT(onHaveCaptchaAnswer(QString,QString)));
  320. connect(m_MainWindow, SIGNAL(wantNewCaptcha(QString)), handler, SLOT(getCaptcha(QString)));
  321. connect(m_MainWindow, SIGNAL(wantReaload(QString)), handler, SLOT(reload(QString)));
  322.  
  323. m_handlerList.push_back(handler);
  324. m_handlerList.back()->start();
  325. }
  326. }
  327.  
  328. void SitesManager::readController()
  329. {
  330. if (isParsing)
  331. {
  332. Logger::logError(QString("error in xml config - infinite loop at line %1").arg(m_reader->lineNumber()));
  333. qDebug() << QString("error in xml config - infinite loop at line %1").arg(m_reader->lineNumber());
  334. exit(1);
  335. }
  336. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement