refactor: checking for server config files read permissions upon start

This commit is contained in:
Luiz Sardinha
2026-02-21 18:18:07 +01:00
committed by Chris Rizzitello
parent 2ecf91e50a
commit 7743d9008d
9 changed files with 144 additions and 60 deletions

View File

@ -383,12 +383,17 @@ void MainWindow::coreProcessError(CoreProcess::Error error)
); );
} else if (error == CoreProcess::Error::StartFailed) { } else if (error == CoreProcess::Error::StartFailed) {
show(); show();
QMessageBox::warning( auto message = tr("The Core executable could not be started.\n"
this, tr("Core cannot be started"), "Please check if you have sufficient permissions to run %1.")
tr("The Core executable could not be successfully started, " .arg(kCoreBinName);
"although it does exist. "
"Please check if you have sufficient permissions to run this program.") if (Settings::value(Settings::Core::CoreMode) == Settings::CoreMode::Server) {
); const auto mode =
Settings::value(Settings::Server::ExternalConfigFile).toBool() ? tr("read") : tr("read and write");
message.append(tr("\nAdditionally, check you are able to %1 the server config file: %2")
.arg(mode, Settings::serverConfigFile()));
}
QMessageBox::warning(this, kAppName, message);
} }
} }

View File

@ -330,11 +330,17 @@ void CoreProcess::start(std::optional<ProcessMode> processModeOption)
QStringList args = {coreMode}; QStringList args = {coreMode};
if (m_mode == Settings::CoreMode::Server) { if (m_mode == Settings::CoreMode::Server) {
const auto configFilename = persistServerConfig(); const auto [hasNeededPermissions, configFilename] = persistServerConfig();
if (configFilename.isEmpty()) { if (configFilename.isEmpty()) {
qFatal("config file name empty for server args"); qFatal("config file name empty for server args");
return; return;
} }
if (!hasNeededPermissions) {
setProcessState(ProcessState::Stopped);
setConnectionState(ConnectionState::Disconnected);
Q_EMIT error(Error::StartFailed);
return;
}
qInfo("core config file: %s", qPrintable(configFilename)); qInfo("core config file: %s", qPrintable(configFilename));
} }
@ -417,21 +423,22 @@ void CoreProcess::cleanup()
} }
} }
QString CoreProcess::persistServerConfig() const QPair<bool, QString> CoreProcess::persistServerConfig() const
{ {
if (Settings::value(Settings::Server::ExternalConfig).toBool()) { if (Settings::value(Settings::Server::ExternalConfig).toBool()) {
return Settings::value(Settings::Server::ExternalConfigFile).toString(); return {Settings::isServerConfigFileReadable(), Settings::value(Settings::Server::ExternalConfigFile).toString()};
} }
const auto configFilePath = Settings::defaultValue(Settings::Server::ExternalConfigFile).toString(); const auto configFilePath = Settings::defaultValue(Settings::Server::ExternalConfigFile).toString();
QFile configFile(configFilePath); QFile configFile(configFilePath);
if (!configFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) { if (!configFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
qFatal("failed to open core config file for write: %s", qPrintable(configFile.fileName())); qWarning() << "failed to open core config file for write:" << configFilePath;
return {false, configFile.fileName()};
} }
m_serverConfig.save(configFile); m_serverConfig.save(configFile);
configFile.close(); configFile.close();
return configFile.fileName(); return {Settings::isServerConfigFileReadable(), configFile.fileName()};
} }
void CoreProcess::setConnectionState(ConnectionState state) void CoreProcess::setConnectionState(ConnectionState state)

View File

@ -101,7 +101,7 @@ private:
void startProcessFromDaemon(const QStringList &args); void startProcessFromDaemon(const QStringList &args);
void stopForegroundProcess() const; void stopForegroundProcess() const;
void stopProcessFromDaemon(); void stopProcessFromDaemon();
QString persistServerConfig() const; QPair<bool, QString> persistServerConfig() const;
void setConnectionState(ConnectionState state); void setConnectionState(ConnectionState state);
void setProcessState(ProcessState state); void setProcessState(ProcessState state);
void checkLogLine(const QString &line); void checkLogLine(const QString &line);

View File

@ -402,10 +402,6 @@ Do you want to connect to the server?
<source>Please enter the hostname or IP address of the other computer.</source> <source>Please enter the hostname or IP address of the other computer.</source>
<translation type="unfinished">Introduzca el nombre de host o la dirección IP de la otra computadora.</translation> <translation type="unfinished">Introduzca el nombre de host o la dirección IP de la otra computadora.</translation>
</message> </message>
<message>
<source>Core cannot be started</source>
<translation type="unfinished">No se puede iniciar el núcleo</translation>
</message>
<message> <message>
<source>Save server configuration as...</source> <source>Save server configuration as...</source>
<translation type="unfinished">Guardar la configuración del servidor como...</translation> <translation type="unfinished">Guardar la configuración del servidor como...</translation>
@ -523,10 +519,6 @@ Nombres válidos:
<source>This computer&apos;s name:</source> <source>This computer&apos;s name:</source>
<translation type="unfinished">Nombre de esta computadora:</translation> <translation type="unfinished">Nombre de esta computadora:</translation>
</message> </message>
<message>
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
<translation type="unfinished">No se pudo iniciar el archivo ejecutable principal, aunque existe. Compruebe si tiene permisos suficientes para ejecutar este programa.</translation>
</message>
<message> <message>
<source>&amp;Configure Client</source> <source>&amp;Configure Client</source>
<translation type="unfinished">&amp;Configurar cliente</translation> <translation type="unfinished">&amp;Configurar cliente</translation>
@ -539,6 +531,26 @@ Nombres válidos:
<source>&lt;html&gt;Hostname or IP address of the server computer.&lt;br/&gt;May contain a comma seperated list.&lt;/html&gt;</source> <source>&lt;html&gt;Hostname or IP address of the server computer.&lt;br/&gt;May contain a comma seperated list.&lt;/html&gt;</source>
<translation type="unfinished">&lt;html&gt;Nome host o indirizzo IP del computer server.&lt;br/&gt;Può contenere un elenco separato da virgole.&lt;/html&gt;</translation> <translation type="unfinished">&lt;html&gt;Nome host o indirizzo IP del computer server.&lt;br/&gt;Può contenere un elenco separato da virgole.&lt;/html&gt;</translation>
</message> </message>
<message>
<source>read</source>
<translation type="unfinished">leer</translation>
</message>
<message>
<source>read and write</source>
<translation type="unfinished">leer y escribir</translation>
</message>
<message>
<source>The Core executable could not be started.
Please check if you have sufficient permissions to run %1.</source>
<translation type="unfinished">No se pudo iniciar el ejecutable Core.
Verifique si tiene permisos suficientes para ejecutar %1.</translation>
</message>
<message>
<source>
Additionally, check you are able to %1 the server config file: %2</source>
<translation type="unfinished">
Además, verifique que puede %1 el archivo de configuración del servidor: %2</translation>
</message>
</context> </context>
<context> <context>
<name>NewScreenWidget</name> <name>NewScreenWidget</name>

View File

@ -390,10 +390,6 @@ Vuoi connetterti al server?
<source>Please enter the hostname or IP address of the other computer.</source> <source>Please enter the hostname or IP address of the other computer.</source>
<translation>Inserisci l&apos;hostname o l&apos;indirizzo IP dell&apos;altro computer.</translation> <translation>Inserisci l&apos;hostname o l&apos;indirizzo IP dell&apos;altro computer.</translation>
</message> </message>
<message>
<source>Core cannot be started</source>
<translation>Impossibile avviare il core</translation>
</message>
<message> <message>
<source>Save server configuration as...</source> <source>Save server configuration as...</source>
<translation>Salva configurazione server come...</translation> <translation>Salva configurazione server come...</translation>
@ -523,10 +519,6 @@ Nomi validi:
<translation>Usa mouse e tastiera di un altro computer <translation>Usa mouse e tastiera di un altro computer
(imposta questo computer come client)</translation> (imposta questo computer come client)</translation>
</message> </message>
<message>
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
<translation type="unfinished">Non è stato possibile avviare correttamente l&apos;eseguibile Core, sebbene esista. Verifica di disporre delle autorizzazioni necessarie per eseguire questo programma.</translation>
</message>
<message> <message>
<source>&amp;Configure Client</source> <source>&amp;Configure Client</source>
<translation type="unfinished">&amp;Configurare il client</translation> <translation type="unfinished">&amp;Configurare il client</translation>
@ -539,6 +531,26 @@ Nomi validi:
<source>&lt;html&gt;Hostname or IP address of the server computer.&lt;br/&gt;May contain a comma seperated list.&lt;/html&gt;</source> <source>&lt;html&gt;Hostname or IP address of the server computer.&lt;br/&gt;May contain a comma seperated list.&lt;/html&gt;</source>
<translation type="unfinished">&lt;html&gt;Nome host o indirizzo IP del computer server.&lt;br/&gt;Può contenere un elenco separato da virgole.&lt;/html&gt;</translation> <translation type="unfinished">&lt;html&gt;Nome host o indirizzo IP del computer server.&lt;br/&gt;Può contenere un elenco separato da virgole.&lt;/html&gt;</translation>
</message> </message>
<message>
<source>read</source>
<translation type="unfinished">leggere</translation>
</message>
<message>
<source>read and write</source>
<translation type="unfinished">leggere e scrivere</translation>
</message>
<message>
<source>The Core executable could not be started.
Please check if you have sufficient permissions to run %1.</source>
<translation type="unfinished">Impossibile avviare l&apos;eseguibile Core.
Verifica di avere i permessi sufficienti per eseguire %1.</translation>
</message>
<message>
<source>
Additionally, check you are able to %1 the server config file: %2</source>
<translation type="unfinished">
Inoltre, verifica di poter %1 il file di configurazione del server: %2</translation>
</message>
</context> </context>
<context> <context>
<name>NewScreenWidget</name> <name>NewScreenWidget</name>

View File

@ -358,10 +358,6 @@ Do you want to connect to the server?
<source>Please enter the hostname or IP address of the other computer.</source> <source>Please enter the hostname or IP address of the other computer.</source>
<translation>IPアドレスかホスト名を入力してください</translation> <translation>IPアドレスかホスト名を入力してください</translation>
</message> </message>
<message>
<source>Core cannot be started</source>
<translation></translation>
</message>
<message> <message>
<source>Save server configuration as...</source> <source>Save server configuration as...</source>
<translation></translation> <translation></translation>
@ -523,10 +519,6 @@ Valid names:
<source>Suggested IP: </source> <source>Suggested IP: </source>
<translation>IPアドレス: </translation> <translation>IPアドレス: </translation>
</message> </message>
<message>
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
<translation></translation>
</message>
<message> <message>
<source>&amp;Configure Client</source> <source>&amp;Configure Client</source>
<translation> (&amp;C)</translation> <translation> (&amp;C)</translation>
@ -539,6 +531,26 @@ Valid names:
<source>&lt;html&gt;Hostname or IP address of the server computer.&lt;br/&gt;May contain a comma seperated list.&lt;/html&gt;</source> <source>&lt;html&gt;Hostname or IP address of the server computer.&lt;br/&gt;May contain a comma seperated list.&lt;/html&gt;</source>
<translation>&lt;html&gt; IP &lt;br/&gt;&lt;/html&gt;</translation> <translation>&lt;html&gt; IP &lt;br/&gt;&lt;/html&gt;</translation>
</message> </message>
<message>
<source>read</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>read and write</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Core executable could not be started.
Please check if you have sufficient permissions to run %1.</source>
<translation type="unfinished">Coreの実行ファイルを起動できませんでした
%1</translation>
</message>
<message>
<source>
Additionally, check you are able to %1 the server config file: %2</source>
<translation type="unfinished">
%1: %2</translation>
</message>
</context> </context>
<context> <context>
<name>NewScreenWidget</name> <name>NewScreenWidget</name>

View File

@ -358,10 +358,6 @@ Do you want to connect to the server?
<source>Please enter the hostname or IP address of the other computer.</source> <source>Please enter the hostname or IP address of the other computer.</source>
<translation> IP .</translation> <translation> IP .</translation>
</message> </message>
<message>
<source>Core cannot be started</source>
<translation> </translation>
</message>
<message> <message>
<source>Save server configuration as...</source> <source>Save server configuration as...</source>
<translation> ...</translation> <translation> ...</translation>
@ -523,10 +519,6 @@ Valid names:
<source>Suggested IP: </source> <source>Suggested IP: </source>
<translation type="unfinished"> IP: </translation> <translation type="unfinished"> IP: </translation>
</message> </message>
<message>
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
<translation> . .</translation>
</message>
<message> <message>
<source>&amp;Configure Client</source> <source>&amp;Configure Client</source>
<translation type="unfinished"> (&amp;C)</translation> <translation type="unfinished"> (&amp;C)</translation>
@ -539,6 +531,26 @@ Valid names:
<source>&lt;html&gt;Hostname or IP address of the server computer.&lt;br/&gt;May contain a comma seperated list.&lt;/html&gt;</source> <source>&lt;html&gt;Hostname or IP address of the server computer.&lt;br/&gt;May contain a comma seperated list.&lt;/html&gt;</source>
<translation>&lt;html&gt; IP .&lt;br/&gt; .&lt;/html&gt;</translation> <translation>&lt;html&gt; IP .&lt;br/&gt; .&lt;/html&gt;</translation>
</message> </message>
<message>
<source>read</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>read and write</source>
<translation type="unfinished"> </translation>
</message>
<message>
<source>The Core executable could not be started.
Please check if you have sufficient permissions to run %1.</source>
<translation type="unfinished">Core .
%1 .</translation>
</message>
<message>
<source>
Additionally, check you are able to %1 the server config file: %2</source>
<translation type="unfinished">
%1 : %2</translation>
</message>
</context> </context>
<context> <context>
<name>NewScreenWidget</name> <name>NewScreenWidget</name>

View File

@ -358,10 +358,6 @@ Do you want to connect to the server?
<source>Please enter the hostname or IP address of the other computer.</source> <source>Please enter the hostname or IP address of the other computer.</source>
<translation>Пожалуйста, введите имя хоста или IP-адрес другого компьютера.</translation> <translation>Пожалуйста, введите имя хоста или IP-адрес другого компьютера.</translation>
</message> </message>
<message>
<source>Core cannot be started</source>
<translation>Не удалось запустить ядро</translation>
</message>
<message> <message>
<source>Save server configuration as...</source> <source>Save server configuration as...</source>
<translation>Сохранить конфигурацию сервера как...</translation> <translation>Сохранить конфигурацию сервера как...</translation>
@ -523,10 +519,6 @@ Valid names:
<source>Suggested IP: </source> <source>Suggested IP: </source>
<translation>Рекомендуемый IP-адрес: </translation> <translation>Рекомендуемый IP-адрес: </translation>
</message> </message>
<message>
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
<translation>Не удалось запустить исполняемый файл ядра, хотя он существует. Проверьте наличие прав на запуск программы.</translation>
</message>
<message> <message>
<source>&amp;Configure Client</source> <source>&amp;Configure Client</source>
<translation type="unfinished">&amp;Настройка клиента</translation> <translation type="unfinished">&amp;Настройка клиента</translation>
@ -539,6 +531,26 @@ Valid names:
<source>&lt;html&gt;Hostname or IP address of the server computer.&lt;br/&gt;May contain a comma seperated list.&lt;/html&gt;</source> <source>&lt;html&gt;Hostname or IP address of the server computer.&lt;br/&gt;May contain a comma seperated list.&lt;/html&gt;</source>
<translation type="unfinished">&lt;html&gt;Имя хоста или IP-адрес серверного компьютера.&lt;br/&gt;Может содержать список, разделенный запятыми.&lt;/html&gt;</translation> <translation type="unfinished">&lt;html&gt;Имя хоста или IP-адрес серверного компьютера.&lt;br/&gt;Может содержать список, разделенный запятыми.&lt;/html&gt;</translation>
</message> </message>
<message>
<source>read</source>
<translation type="unfinished">прочитать</translation>
</message>
<message>
<source>read and write</source>
<translation type="unfinished">читать и записывать</translation>
</message>
<message>
<source>The Core executable could not be started.
Please check if you have sufficient permissions to run %1.</source>
<translation type="unfinished">Не удалось запустить исполняемый файл Core.
Проверьте, достаточно ли у вас прав для запуска %1.</translation>
</message>
<message>
<source>
Additionally, check you are able to %1 the server config file: %2</source>
<translation type="unfinished">
Также убедитесь, что вы можете %1 файл конфигурации сервера: %2</translation>
</message>
</context> </context>
<context> <context>
<name>NewScreenWidget</name> <name>NewScreenWidget</name>

View File

@ -358,10 +358,6 @@ Do you want to connect to the server?
<source>Please enter the hostname or IP address of the other computer.</source> <source>Please enter the hostname or IP address of the other computer.</source>
<translation> IP </translation> <translation> IP </translation>
</message> </message>
<message>
<source>Core cannot be started</source>
<translation></translation>
</message>
<message> <message>
<source>Save server configuration as...</source> <source>Save server configuration as...</source>
<translation>...</translation> <translation>...</translation>
@ -523,10 +519,6 @@ Valid names:
<source>Suggested IP: </source> <source>Suggested IP: </source>
<translation type="unfinished"> IP </translation> <translation type="unfinished"> IP </translation>
</message> </message>
<message>
<source>The Core executable could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source>
<translation type="unfinished">Core </translation>
</message>
<message> <message>
<source>&amp;Configure Client</source> <source>&amp;Configure Client</source>
<translation type="unfinished">(&amp;C)</translation> <translation type="unfinished">(&amp;C)</translation>
@ -539,6 +531,26 @@ Valid names:
<source>&lt;html&gt;Hostname or IP address of the server computer.&lt;br/&gt;May contain a comma seperated list.&lt;/html&gt;</source> <source>&lt;html&gt;Hostname or IP address of the server computer.&lt;br/&gt;May contain a comma seperated list.&lt;/html&gt;</source>
<translation type="unfinished">&lt;html&gt; IP &lt;br/&gt;&lt;/html&gt;</translation> <translation type="unfinished">&lt;html&gt; IP &lt;br/&gt;&lt;/html&gt;</translation>
</message> </message>
<message>
<source>read</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>read and write</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>The Core executable could not be started.
Please check if you have sufficient permissions to run %1.</source>
<translation type="unfinished">Core可执行文件
%1</translation>
</message>
<message>
<source>
Additionally, check you are able to %1 the server config file: %2</source>
<translation type="unfinished">
%1%2</translation>
</message>
</context> </context>
<context> <context>
<name>NewScreenWidget</name> <name>NewScreenWidget</name>