summaryrefslogtreecommitdiff
path: root/src/plugins/gitlab
diff options
context:
space:
mode:
authorChristian Stenger <christian.stenger@qt.io>2022-06-08 09:00:23 +0200
committerChristian Stenger <christian.stenger@qt.io>2022-06-10 12:27:45 +0000
commit0cfd264279df9815b281aaac8e28717e9d79a9e7 (patch)
tree8a1b8b143fe000f7cd94b0c8d410300b6699c54c /src/plugins/gitlab
parentfdb413c9a7654f652e8770fde7ae8a574219f333 (diff)
downloadqt-creator-0cfd264279df9815b281aaac8e28717e9d79a9e7.tar.gz
GitLab: Handle certificate issues
Allow to bypass certificate verifications. Currently the bypassing is not stored into the settings, so this is not permanent. Change-Id: Ieb564464a28cf2d4973c6b1baa696d6c22b07177 Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/plugins/gitlab')
-rw-r--r--src/plugins/gitlab/gitlabparameters.h2
-rw-r--r--src/plugins/gitlab/gitlabplugin.cpp24
-rw-r--r--src/plugins/gitlab/gitlabplugin.h1
-rw-r--r--src/plugins/gitlab/queryrunner.cpp16
-rw-r--r--src/plugins/gitlab/queryrunner.h4
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;
};