Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "sitesmanager.h"
- SitesManager::SitesManager(MainWindow *mainWindow, QString xml)
- {
- m_sitesSettings = xml;
- qRegisterMetaType<CaptchaChallenge>("CaptchaChallenge");
- m_MainWindow = mainWindow;
- connect(this, SIGNAL(parseComplete()), this, SLOT(onParseComplete()));
- m_settings = new SecureSettings;
- getBtc(); parseXml();
- }
- SitesManager::~SitesManager()
- {
- while (m_handlerList.size() > 0)
- {
- m_handlerList.back()->deleteLater();
- m_handlerList.back()->wait();
- m_handlerList.pop_back();
- }
- }
- void SitesManager::parseXml()
- {
- m_reader = new QXmlStreamReader(m_sitesSettings);
- isParsing = true;
- QTimer::singleShot(xmlReadTimeout, this, SLOT(readController()));
- while (!m_reader->atEnd())
- {
- QXmlStreamReader::TokenType token = m_reader->readNext();
- if ((token == QXmlStreamReader::StartElement) && (m_reader->name() == "site"))
- {
- Site siteBlank;
- m_reader->readNextStartElement();
- while ((m_reader->name() != "site") && (token != QXmlStreamReader::Invalid))
- {
- QApplication::processEvents();
- if (token == QXmlStreamReader::StartElement)
- {
- if (m_reader->name() == "name")
- {
- m_reader->readNext();
- siteBlank.name = m_reader->text().toString();
- }
- if (m_reader->name() == "captcha_key")
- {
- m_reader->readNext();
- siteBlank.siteKey = m_reader->text().toString();
- }
- if (m_reader->name() == "captcha")
- {
- m_reader->readNext();
- if (m_reader->text() == "solve")
- siteBlank.captcha = CaptchaChallenge::solve;
- else
- siteBlank.captcha = CaptchaChallenge::google;
- }
- if (m_reader->name() == "update")
- {
- m_reader->readNext();
- bool isToIntOk = false;
- QString text = m_reader->text().toString();
- text.toInt(&isToIntOk);
- if (isToIntOk)
- {
- siteBlank.update.abs = text.toInt();
- siteBlank.update.isAbs = true;
- }
- else
- {
- siteBlank.update.abs = 0;
- siteBlank.update.isAbs = false;
- for (int i = 0; i <= text.size(); i++)
- {
- if (text[i] == '-')
- {
- QString min;
- for (int j = 0; j < i; j++)
- min[j] = text[j];
- QString max;
- for (int j = i + 1, c = 0; j < text.size(); j++, c++)
- max[c] = text[j];
- siteBlank.update.min = min.toInt();
- siteBlank.update.max = max.toInt();
- }
- }
- }
- }
- if (m_reader->name() == "balance")
- {
- m_reader->readNext();
- siteBlank.balanceExp = m_reader->text().toString();
- }
- if (m_reader->name() == "added")
- {
- m_reader->readNext();
- siteBlank.addedExp = m_reader->text().toString();
- }
- if (m_reader->name() == "request")
- {
- Request requestBlank;
- if (m_reader->attributes().size() < 3)
- Logger::logError("XML: request section has bad count of atrributes!");
- else
- {
- if (m_reader->attributes()[0].value().toString() == "GET")
- requestBlank.requestMethod = Request::get;
- else
- requestBlank.requestMethod = Request::post;
- if (m_reader->attributes()[2].value().toString() == "data")
- requestBlank.requestType = Request::data;
- else
- requestBlank.requestType = Request::collect;
- requestBlank.requestUrl = m_reader->attributes()[1].value().toString();
- }
- m_reader->readNextStartElement();
- while (m_reader->name() != "request")
- {
- QApplication::processEvents();
- if ((m_reader->name() == "regexp-cookie") && (token == QXmlStreamReader::StartElement))
- {
- Key fieldBlank;
- if (m_reader->attributes().size() == 0)
- {
- Logger::logError("XML: request field section has no attributes!");
- }
- else
- fieldBlank.name = m_reader->attributes()[0].value().toString();
- m_reader->readNext();
- fieldBlank.value = m_reader->text().toString();
- requestBlank.regexpCockieFields.push_back(fieldBlank);
- }
- if ((m_reader->name() == "header") && (token == QXmlStreamReader::StartElement))
- {
- Key fieldBlank;
- if (m_reader->attributes().size() == 0)
- {
- Logger::logError("XML: request field section has no attributes!");
- }
- else
- fieldBlank.name = m_reader->attributes()[0].value().toString();
- m_reader->readNext();
- fieldBlank.value = m_reader->text().toString();
- requestBlank.customHeaders.push_back(fieldBlank);
- }
- if ((m_reader->name() == "field") && (token == QXmlStreamReader::StartElement))
- {
- Key fieldBlank;
- if (m_reader->attributes().size() == 0)
- {
- Logger::logError("XML: request field section has no attributes!");
- }
- else
- fieldBlank.name = m_reader->attributes()[0].value().toString();
- m_reader->readNext();
- fieldBlank.value = m_reader->text().toString();
- requestBlank.fields.push_back(fieldBlank);
- }
- if ((m_reader->name() == "cookie") && (token == QXmlStreamReader::StartElement))
- {
- Key cookieBlank;
- if (m_reader->attributes().size() == 0)
- Logger::logError("XML: cookie field has no attributes!");
- else
- cookieBlank.name = m_reader->attributes()[0].value().toString();
- m_reader->readNext();
- cookieBlank.value = m_reader->text().toString();
- requestBlank.cookieFields.push_back(cookieBlank);
- }
- if ((m_reader->name() == "regexp") && (token == QXmlStreamReader::StartElement))
- {
- Key regexpBlank;
- if (m_reader->attributes().size() == 0)
- Logger::logError("XML: regexp field has bad attributes!");
- else
- regexpBlank.name = m_reader->attributes()[0].value().toString();
- m_reader->readNext();
- regexpBlank.value = m_reader->text().toString();
- requestBlank.regexpFields.push_back(regexpBlank);
- }
- token = m_reader->readNext();
- }
- siteBlank.requests.push_back(requestBlank);
- //logger::logInfo(QString("XML: done reading request with filed[0] name %1").arg(requestBlank.fields[0].name));
- }
- if (m_reader->name() == "settings")
- {
- m_reader->readNext();
- while (m_reader->name() != "settings")
- {
- QApplication::processEvents();
- if (token == QXmlStreamReader::StartElement)
- {
- if (m_reader->name() == "setting")
- {
- SiteSettings::Setting settingBlank;
- if (m_reader->attributes().size() > 2)
- {
- settingBlank.name = m_reader->attributes()[0].value().toString();
- if (m_reader->attributes()[1].value().toString() == "pass")
- settingBlank.valueType = SiteSettings::Setting::pass;
- else
- settingBlank.valueType = SiteSettings::Setting::string;
- settingBlank.savingKey = m_reader->attributes()[2].value().toString();
- }
- else
- {
- Logger::logError("XML: setting section has no attributes!");
- }
- m_reader->readNext();
- settingBlank.key = m_reader->text().toString();
- siteBlank.customSettings.push_back(settingBlank);
- }
- }
- token = m_reader->readNext();
- }
- m_reader->readNext();
- }
- }
- token = m_reader->readNext();
- }
- m_siteList.push_back(siteBlank);
- }
- }
- isParsing = false;
- if (m_reader->hasError())
- Logger::logError(QString("error in xml config - %1").arg(m_reader->errorString()));
- emit parseComplete();
- delete m_reader;
- }
- void SitesManager::getBtc()
- {
- QSslSocket socket;
- m_settings->beginGroup("Auth");
- QString data = QString("get btc %1").arg(m_settings->securedValue("Login", "").toString());
- m_settings->endGroup();
- if (verifySsl)
- socket.addCaCertificates(QSslCertificate::fromPath(serverCertFileName));
- else
- socket.setPeerVerifyMode(QSslSocket::VerifyNone);
- socket.connectToHostEncrypted(serverHost, 2237);
- socket.waitForEncrypted(-1);
- //if (!sosscket.isEncrypted()) qDebug() << socket.sslErrors();
- if (!socket.waitForConnected(5000))
- {
- QMessageBox::information(0, "Money Gather", QString("Не могу подключиться к серверу\n\r%1").arg(socket.errorString()), QMessageBox::Ok);
- exit(1);
- }
- else
- {
- if (!socket.open(QIODevice::ReadWrite))
- {
- QMessageBox::information(0, "Money Gather", "Не могу открыть сокет", QMessageBox::Ok);
- }
- else
- {
- socket.write(data.toStdString().c_str(), data.size());//write request
- socket.waitForReadyRead(-1);//wait for answer
- QString answer(socket.readAll());//read answer
- m_userBtc = answer;
- return;
- }
- }
- m_userBtc = "error";
- }
- void SitesManager::onParseComplete()
- {
- for (int i = 0; i < m_siteList.size(); i++)
- {
- SiteHandler* handler = new SiteHandler(m_userBtc, m_siteList[i], m_MainWindow);
- handler->setObjectName(m_siteList[i].name);
- connect(handler, SIGNAL(haveCaptcha(CaptchaChallenge)), m_MainWindow, SLOT(addCaptcha(CaptchaChallenge)));
- connect(handler, SIGNAL(haveSiteAnswer(QString,bool,QString,QString)), m_MainWindow, SLOT(onHaveSiteAnswer(QString,bool,QString,QString)));
- connect(m_MainWindow, SIGNAL(haveCaptchaAnswer(QString,QString)), handler, SLOT(onHaveCaptchaAnswer(QString,QString)));
- connect(m_MainWindow, SIGNAL(wantNewCaptcha(QString)), handler, SLOT(getCaptcha(QString)));
- connect(m_MainWindow, SIGNAL(wantReaload(QString)), handler, SLOT(reload(QString)));
- m_handlerList.push_back(handler);
- m_handlerList.back()->start();
- }
- }
- void SitesManager::readController()
- {
- if (isParsing)
- {
- Logger::logError(QString("error in xml config - infinite loop at line %1").arg(m_reader->lineNumber()));
- qDebug() << QString("error in xml config - infinite loop at line %1").arg(m_reader->lineNumber());
- exit(1);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement