Merge pull request #21 from namecheap/feature/RND-533-proxy-settings-from-windows-settings

Read proxy settings from OS settings (for Windows)
This commit is contained in:
Yurii Puchkov
2020-08-04 13:32:48 +03:00
committed by GitHub
2 changed files with 53 additions and 23 deletions

View File

@@ -50,6 +50,7 @@
ImgS3Uploader::ImgS3Uploader(const QPixmap &capture, QWidget *parent) :
QWidget(parent), m_pixmap(capture)
{
m_proxy = nullptr;
setWindowTitle(tr("Upload to ImgS3"));
setWindowIcon(QIcon(":img/app/flameshot.svg"));
@@ -64,28 +65,34 @@ ImgS3Uploader::ImgS3Uploader(const QPixmap &capture, QWidget *parent) :
m_vLayout->addWidget(m_spinner, 0, Qt::AlignHCenter);
m_vLayout->addWidget(m_infoLabel);
setAttribute(Qt::WA_DeleteOnClose);
// get enterprise settings
m_configEnterprise = new ConfigEnterprise();
// get s3 credentials
QSettings *settings = m_configEnterprise->settings();
settings->beginGroup("S3");
m_s3CredsUrl = settings->value("S3_CREDS_URL").toString();
m_s3XApiKey = settings->value("S3_X_API_KEY").toString();
settings->endGroup();
initNetwork();
upload();
}
void ImgS3Uploader::initNetwork() {
// Init network
m_NetworkAM = new QNetworkAccessManager(this);
connect(m_NetworkAM, &QNetworkAccessManager::finished, this, &ImgS3Uploader::handleReply);
m_NetworkAMCreds = new QNetworkAccessManager(this);
connect(m_NetworkAMCreds, &QNetworkAccessManager::finished, this, &ImgS3Uploader::handleCredsReply);
setAttribute(Qt::WA_DeleteOnClose);
// get enterprise settings
m_configEnterprise = new ConfigEnterprise();
// get proxy settings from "config.ini" file
QSettings *settings = m_configEnterprise->settings();
// get s3 credentials
settings->beginGroup("S3");
m_s3CredsUrl = settings->value("S3_CREDS_URL").toString();
m_s3XApiKey = settings->value("S3_X_API_KEY").toString();
settings->endGroup();
// set proxy server parameters
QString httpProxyHost = settings->value("HTTP_PROXY_HOST").toString();
if(httpProxyHost.length() > 0) {
qDebug() << "Using proxy server";
if(httpProxyHost.length() > 0 && m_proxy == nullptr) {
m_proxy = new QNetworkProxy();
if(settings->contains("HTTP_PROXY_TYPE")) {
@@ -111,21 +118,14 @@ ImgS3Uploader::ImgS3Uploader(const QPixmap &capture, QWidget *parent) :
break;
}
}
}
// set proxy server parameters
if(httpProxyHost.length() > 0) {
m_proxy->setHostName(httpProxyHost);
int nProxyPort = 3128;
if(settings->contains("HTTP_PROXY_PORT")) {
nProxyPort = settings->value("HTTP_PROXY_PORT").toInt();
}
m_proxy->setPort(nProxyPort);
qDebug() << "Proxy Host" << httpProxyHost;
qDebug() << "Proxy Port" << nProxyPort;
if(settings->contains("HTTP_PROXY_USER")) {
qDebug() << "Proxy user" << settings->value("HTTP_PROXY_PASSWORD").toString();
m_proxy->setUser(settings->value("HTTP_PROXY_USER").toString());
@@ -134,14 +134,43 @@ ImgS3Uploader::ImgS3Uploader(const QPixmap &capture, QWidget *parent) :
qDebug() << "Proxy password is not empty";
m_proxy->setPassword(settings->value("HTTP_PROXY_PASSWORD").toString());
}
}
else {
// Get proxy settings from OS settings
QNetworkProxyQuery q(QUrl(m_s3CredsUrl.toUtf8()));
q.setQueryType(QNetworkProxyQuery::UrlRequest);
q.setProtocolTag("http");
QList<QNetworkProxy> proxies = QNetworkProxyFactory::systemProxyForQuery(q);
if( proxies.size() > 0 && proxies[0].type() != QNetworkProxy::NoProxy ){
m_proxy = new QNetworkProxy();
m_proxy->setHostName(proxies[0].hostName());
m_proxy->setPort(proxies[0].port());
m_proxy->setType(proxies[0].type());
m_proxy->setUser(proxies[0].user());
m_proxy->setPassword(proxies[0].password());
}
}
if(m_proxy != nullptr) {
qDebug() << "Using proxy server";
qDebug() << "proxy host:" << m_proxy->hostName();
qDebug() << "proxy port:" << m_proxy->port();
qDebug() << "proxy type:" << m_proxy->type();
qDebug() << "proxy user:" << (m_proxy->user().length() > 0 ? m_proxy->user() : "no user");
qDebug() << "proxy password:" << (m_proxy->password().length() > 0 ? "***" : "no password");
QNetworkProxy::setApplicationProxy(*m_proxy);
m_NetworkAM->setProxy(*m_proxy);
m_NetworkAMCreds->setProxy(*m_proxy);
}
upload();
else {
qDebug() << "No proxy";
}
}
void ImgS3Uploader::handleReply(QNetworkReply *reply) {
m_spinner->deleteLater();
if (reply->error() == QNetworkReply::NoError) {

View File

@@ -48,6 +48,7 @@ private slots:
private:
void uploadToS3(QJsonDocument &response);
void initNetwork();
private:
ConfigEnterprise *m_configEnterprise;