mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2025-12-10 04:36:43 +00:00
fix(GODT-2807): fix issue where sessionID would not be removed from command-line on restart by bridge-gui.
This commit is contained in:
@ -20,6 +20,7 @@
|
||||
#include "QMLBackend.h"
|
||||
#include "SentryUtils.h"
|
||||
#include "Settings.h"
|
||||
#include <bridgepp/CLI/CLIUtils.h>
|
||||
#include <bridgepp/GRPC/GRPCClient.h>
|
||||
#include <bridgepp/Exception/Exception.h>
|
||||
#include <bridgepp/ProcessMonitor.h>
|
||||
@ -101,19 +102,23 @@ void AppController::onFatalError(Exception const &exception) {
|
||||
qApp->exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
/// \param[in] isCrashing Is the restart triggered by a crash.
|
||||
//****************************************************************************************************************************************************
|
||||
void AppController::restart(bool isCrashing) {
|
||||
if (!launcher_.isEmpty()) {
|
||||
QProcess p;
|
||||
log_->info(QString("Restarting - App : %1 - Args : %2").arg(launcher_, launcherArgs_.join(" ")));
|
||||
QStringList args = launcherArgs_;
|
||||
if (isCrashing) {
|
||||
args.append(noWindowFlag);
|
||||
}
|
||||
|
||||
p.startDetached(launcher_, args);
|
||||
p.waitForStarted();
|
||||
if (launcher_.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
QProcess p;
|
||||
QStringList args = stripStringParameterFromCommandLine("--session-id", launcherArgs_);
|
||||
if (isCrashing) {
|
||||
args.append(noWindowFlag);
|
||||
}
|
||||
|
||||
log_->info(QString("Restarting - App : %1 - Args : %2").arg(launcher_, args.join(" ")));
|
||||
p.startDetached(launcher_, args);
|
||||
p.waitForStarted();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -136,6 +136,7 @@ add_custom_command(
|
||||
|
||||
add_library(bridgepp
|
||||
bridgepp/BridgeUtils.cpp bridgepp/BridgeUtils.h
|
||||
bridgepp/CLI/CLIUtils.cpp bridgepp/CLI/CLIUtils.h
|
||||
bridgepp/Exception/Exception.h bridgepp/Exception/Exception.cpp
|
||||
bridgepp/GRPC/GRPCClient.cpp bridgepp/GRPC/GRPCClient.h
|
||||
bridgepp/GRPC/GRPCErrors.h bridgepp/GRPC/GRPCErrors.cpp
|
||||
@ -188,6 +189,7 @@ enable_testing()
|
||||
#*****************************************************************************************************************************************************
|
||||
add_executable(bridgepp-test EXCLUDE_FROM_ALL
|
||||
Test/TestBridgeUtils.cpp
|
||||
Test/TestCLI.cpp
|
||||
Test/TestException.cpp
|
||||
Test/TestSessionID.cpp
|
||||
Test/TestWorker.cpp Test/TestWorker.h
|
||||
|
||||
50
internal/frontend/bridge-gui/bridgepp/Test/TestCLI.cpp
Normal file
50
internal/frontend/bridge-gui/bridgepp/Test/TestCLI.cpp
Normal file
@ -0,0 +1,50 @@
|
||||
// Copyright (c) 2023 Proton AG
|
||||
//
|
||||
// This file is part of Proton Mail Bridge.
|
||||
//
|
||||
// Proton Mail Bridge is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Proton Mail Bridge is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Proton Mail Bridge. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
#include <bridgepp/CLI/CLIUtils.h>
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
|
||||
using namespace bridgepp;
|
||||
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
//
|
||||
//****************************************************************************************************************************************************
|
||||
TEST(CLI, stripStringParameterFromCommandLine) {
|
||||
struct Test {
|
||||
QStringList input;
|
||||
QStringList expectedOutput;
|
||||
};
|
||||
QList<Test> const tests = {
|
||||
{{}, {}},
|
||||
{{ "--a", "-b", "--C" }, { "--a", "-b", "--C" } },
|
||||
{{ "--string", "value" }, {} },
|
||||
{{ "--string" }, {} },
|
||||
{{ "--string", "value", "-b", "--C" }, { "-b", "--C" } },
|
||||
{{ "--string", "value", "-b", "--string", "value", "--C" }, { "-b", "--C" } },
|
||||
{{ "--string", "value", "-b", "--string", "value", "--C" }, { "-b", "--C" } },
|
||||
{{ "--string", "value", "-b", "--string"}, { "-b" } },
|
||||
{{ "--string", "--string", "value", "-b", "--string"}, { "value", "-b" } },
|
||||
};
|
||||
|
||||
for (Test const& test: tests) {
|
||||
EXPECT_EQ(stripStringParameterFromCommandLine("--string", test.input), test.expectedOutput);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,45 @@
|
||||
// Copyright (c) 2023 Proton AG
|
||||
//
|
||||
// This file is part of Proton Mail Bridge.
|
||||
//
|
||||
// Proton Mail Bridge is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Proton Mail Bridge is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Proton Mail Bridge. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
#include "CLIUtils.h"
|
||||
|
||||
|
||||
namespace bridgepp {
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
/// \param[in] paramName The parameter name, including prefix dashes (e.g. '--string').
|
||||
/// \param[in] commandLineParams The command-line parameters.
|
||||
/// \return The command-line parameters where all occurrences of paramName and it associated value have been removed. Comparison is case-sensitive.
|
||||
//****************************************************************************************************************************************************
|
||||
QStringList stripStringParameterFromCommandLine(QString const ¶mName, QStringList const &commandLineParams) {
|
||||
qint32 i = 0;
|
||||
QStringList result;
|
||||
while (i < commandLineParams.count()) {
|
||||
if (paramName == commandLineParams[i]) {
|
||||
i += 2;
|
||||
continue;
|
||||
}
|
||||
result.append(commandLineParams[i]);
|
||||
i++;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
} // namespace bridgepp
|
||||
@ -0,0 +1,32 @@
|
||||
// Copyright (c) 2023 Proton AG
|
||||
//
|
||||
// This file is part of Proton Mail Bridge.
|
||||
//
|
||||
// Proton Mail Bridge is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Proton Mail Bridge is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Proton Mail Bridge. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
#ifndef BRIDGEPP_CLI_UTILS_H
|
||||
#define BRIDGEPP_CLI_UTILS_H
|
||||
|
||||
|
||||
namespace bridgepp {
|
||||
|
||||
|
||||
QStringList stripStringParameterFromCommandLine(QString const ¶mName, QStringList const &commandLineParams); ///< Remove a string parameter from a list of command-line parameters.
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif // BRIDGEPP_CLI_UTILS_H
|
||||
Reference in New Issue
Block a user