diff options
-rw-r--r-- | src/plugins/gitlab/gitlabparameters.h | 2 | ||||
-rw-r--r-- | src/plugins/gitlab/gitlabplugin.cpp | 24 | ||||
-rw-r--r-- | src/plugins/gitlab/gitlabplugin.h | 1 | ||||
-rw-r--r-- | src/plugins/gitlab/queryrunner.cpp | 16 | ||||
-rw-r--r-- | src/plugins/gitlab/queryrunner.h | 4 |
5 files changed, 42 insertions, 5 deletions
diff --git a/src/plugins/gitlab/gitlabparameters.h b/src/plugins/gitlab/gitlabparameters.h index e9106c86d9..1fb3b02a7f 100644 --- a/src/plugins/gitlab/gitlabparameters.h +++ b/src/plugins/gitlab/gitlabparameters.h @@ -57,7 +57,7 @@ public: unsigned short port = 0; bool secure = true; - bool validateCert = true; // TODO + bool validateCert = true; }; class GitLabParameters diff --git a/src/plugins/gitlab/gitlabplugin.cpp b/src/plugins/gitlab/gitlabplugin.cpp index 9a768c1e66..7b5f880966 100644 --- a/src/plugins/gitlab/gitlabplugin.cpp +++ b/src/plugins/gitlab/gitlabplugin.cpp @@ -307,6 +307,30 @@ GitLabOptionsPage *GitLabPlugin::optionsPage() return &dd->optionsPage; } +bool GitLabPlugin::handleCertificateIssue(const Utils::Id &serverId) +{ + QTC_ASSERT(dd, return false); + + GitLabServer server = dd->parameters.serverForId(serverId); + if (QMessageBox::question(Core::ICore::dialogParent(), + QCoreApplication::translate( + "GitLab::GitLabDialog", "Certificate Error"), + QCoreApplication::translate( + "GitLab::GitLabDialog", + "Server certificate for %1 cannot be authenticated.\n" + "Do you want to disable SSL verification for this server?\n" + "Note: This can expose you to man-in-the-middle attack.") + .arg(server.host)) + == QMessageBox::Yes) { + int index = dd->parameters.gitLabServers.indexOf(server); + server.validateCert = false; + dd->parameters.gitLabServers.replace(index, server); + emit dd->optionsPage.settingsChanged(); + return true; + } + return false; +} + void GitLabPlugin::linkedStateChanged(bool enabled) { QTC_ASSERT(dd, return); diff --git a/src/plugins/gitlab/gitlabplugin.h b/src/plugins/gitlab/gitlabplugin.h index f1abf1bd1e..7ff7a567c8 100644 --- a/src/plugins/gitlab/gitlabplugin.h +++ b/src/plugins/gitlab/gitlabplugin.h @@ -53,6 +53,7 @@ public: static GitLabParameters *globalParameters(); static GitLabProjectSettings *projectSettings(ProjectExplorer::Project *project); static GitLabOptionsPage *optionsPage(); + static bool handleCertificateIssue(const Utils::Id &serverId); static void linkedStateChanged(bool enabled); private: diff --git a/src/plugins/gitlab/queryrunner.cpp b/src/plugins/gitlab/queryrunner.cpp index ad15e748c7..0e54a99a09 100644 --- a/src/plugins/gitlab/queryrunner.cpp +++ b/src/plugins/gitlab/queryrunner.cpp @@ -102,9 +102,10 @@ QString Query::toString() const QueryRunner::QueryRunner(const Query &query, const Utils::Id &id, QObject *parent) : QObject(parent) + , m_serverId(id) { const GitLabParameters *p = GitLabPlugin::globalParameters(); - const auto server = p->serverForId(id); + const auto server = p->serverForId(m_serverId); QStringList args = server.curlArguments(); m_paginated = query.hasPaginatedResults(); if (m_paginated) @@ -161,7 +162,18 @@ void QueryRunner::processFinished() if (m_process.exitStatus() != QProcess::NormalExit) { errorTermination(tr("%1 crashed.").arg(executable)); return; - } else if (m_process.exitCode()) { + } else if (int exitCode = m_process.exitCode()) { + if (exitCode == 35 || exitCode == 60) { // common ssl certificate issues + if (GitLabPlugin::handleCertificateIssue(m_serverId)) { + m_running = false; + // prepend -k for re-requesting the same query + Utils::CommandLine cmdline = m_process.commandLine(); + cmdline.prependArgs({"-k"}); + m_process.setCommand(cmdline); + start(); + return; + } + } errorTermination(tr("%1 returned %2.").arg(executable).arg(m_process.exitCode())); return; } diff --git a/src/plugins/gitlab/queryrunner.h b/src/plugins/gitlab/queryrunner.h index ead892f55d..c002f9a561 100644 --- a/src/plugins/gitlab/queryrunner.h +++ b/src/plugins/gitlab/queryrunner.h @@ -25,12 +25,11 @@ #pragma once +#include <utils/id.h> #include <utils/qtcprocess.h> #include <QObject> -namespace Utils { class Id; } - namespace GitLab { class Query @@ -78,6 +77,7 @@ private: void processFinished(); Utils::QtcProcess m_process; + Utils::Id m_serverId; bool m_running = false; bool m_paginated = false; }; |