forked from Silverfish/proton-bridge
feat(GODT-2771): macOS cert install support in bridge-gui-test + placeholder QML.
This commit is contained in:
@ -42,6 +42,7 @@ void GRPCQtProxy::connectSignals() {
|
||||
connect(this, &GRPCQtProxy::setIsTelemetryDisabledReceived, &settingsTab, &SettingsTab::setIsTelemetryDisabled);
|
||||
connect(this, &GRPCQtProxy::setColorSchemeNameReceived, &settingsTab, &SettingsTab::setColorSchemeName);
|
||||
connect(this, &GRPCQtProxy::reportBugReceived, &settingsTab, &SettingsTab::setBugReport);
|
||||
connect(this, &GRPCQtProxy::installTLSCertificateReceived, &settingsTab, &SettingsTab::installTLSCertificate);
|
||||
connect(this, &GRPCQtProxy::exportTLSCertificatesReceived, &settingsTab, &SettingsTab::exportTLSCertificates);
|
||||
connect(this, &GRPCQtProxy::setIsStreamingReceived, &settingsTab, &SettingsTab::setIsStreaming);
|
||||
connect(this, &GRPCQtProxy::setClientPlatformReceived, &settingsTab, &SettingsTab::setClientPlatform);
|
||||
@ -119,6 +120,13 @@ void GRPCQtProxy::reportBug(QString const &osType, QString const &osVersion, QSt
|
||||
}
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
//
|
||||
//****************************************************************************************************************************************************
|
||||
void GRPCQtProxy::installTLSCertificate() {
|
||||
emit installTLSCertificateReceived();
|
||||
}
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
/// \param[in] folderPath The folder path.
|
||||
//****************************************************************************************************************************************************
|
||||
|
||||
@ -45,6 +45,7 @@ public: // member functions.
|
||||
void setColorSchemeName(QString const &name); ///< Forward a SetColorSchemeName call via a Qt Signal
|
||||
void reportBug(QString const &osType, QString const &osVersion, QString const &emailClient, QString const &address,
|
||||
QString const &description, bool includeLogs); ///< Forwards a ReportBug call via a Qt signal.
|
||||
void installTLSCertificate(); ///< Forwards a InstallTLScertificate call via a Qt signal.
|
||||
void exportTLSCertificates(QString const &folderPath); //< Forward an 'ExportTLSCertificates' call via a Qt signal.
|
||||
void setIsStreaming(bool isStreaming); ///< Forward a isStreaming internal messages via a Qt signal.
|
||||
void setClientPlatform(QString const &clientPlatform); ///< Forward a setClientPlatform call via a Qt signal.
|
||||
@ -67,6 +68,7 @@ signals:
|
||||
void setColorSchemeNameReceived(QString const &name); ///< Forward a SetColorScheme call via a Qt Signal
|
||||
void reportBugReceived(QString const &osType, QString const &osVersion, QString const &emailClient, QString const &address,
|
||||
QString const &description, bool includeLogs); ///< Signal for the ReportBug gRPC call
|
||||
void installTLSCertificateReceived(); ///< Signal for the InstallTLSCertificate gRPC call.
|
||||
void exportTLSCertificatesReceived(QString const &folderPath); ///< Signal for the ExportTLSCertificates gRPC call.
|
||||
void setIsStreamingReceived(bool isStreaming); ///< Signal for the IsStreaming internal message.
|
||||
void setClientPlatformReceived(QString const &clientPlatform); ///< Signal for the SetClientPlatform gRPC call.
|
||||
|
||||
@ -371,22 +371,6 @@ Status GRPCService::ReportBug(ServerContext *, ReportBugRequest const *request,
|
||||
}
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
/// \param[in] request The request
|
||||
//****************************************************************************************************************************************************
|
||||
Status GRPCService::ExportTLSCertificates(ServerContext *, StringValue const *request, Empty *response) {
|
||||
SettingsTab &tab = app().mainWindow().settingsTab();
|
||||
if (!tab.nextTLSCertExportWillSucceed()) {
|
||||
qtProxy_.sendDelayedEvent(newGenericErrorEvent(grpc::TLS_CERT_EXPORT_ERROR));
|
||||
}
|
||||
if (!tab.nextTLSKeyExportWillSucceed()) {
|
||||
qtProxy_.sendDelayedEvent(newGenericErrorEvent(grpc::TLS_KEY_EXPORT_ERROR));
|
||||
}
|
||||
qtProxy_.exportTLSCertificates(QString::fromStdString(request->value()));
|
||||
return Status::OK;
|
||||
}
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
/// \param[in] request The request.
|
||||
/// \return The status for the call.
|
||||
@ -768,9 +752,60 @@ Status GRPCService::ConfigureUserAppleMail(ServerContext *, ConfigureAppleMailRe
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
/// \param[in] request The request
|
||||
/// \param[in] writer The writer
|
||||
/// \return The status for the call.
|
||||
//****************************************************************************************************************************************************
|
||||
Status GRPCService::ExportTLSCertificates(ServerContext *, StringValue const *request, Empty *response) {
|
||||
app().log().debug(__FUNCTION__);
|
||||
SettingsTab &tab = app().mainWindow().settingsTab();
|
||||
if (!tab.nextTLSCertExportWillSucceed()) {
|
||||
qtProxy_.sendDelayedEvent(newGenericErrorEvent(grpc::TLS_CERT_EXPORT_ERROR));
|
||||
}
|
||||
if (!tab.nextTLSKeyExportWillSucceed()) {
|
||||
qtProxy_.sendDelayedEvent(newGenericErrorEvent(grpc::TLS_KEY_EXPORT_ERROR));
|
||||
}
|
||||
qtProxy_.exportTLSCertificates(QString::fromStdString(request->value()));
|
||||
return Status::OK;
|
||||
}
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
/// \param[in] response The reponse.
|
||||
/// \return The status for the call.
|
||||
//****************************************************************************************************************************************************
|
||||
Status GRPCService::IsTLSCertificateInstalled(ServerContext *, const Empty *request, BoolValue *response) {
|
||||
app().log().debug(__FUNCTION__);
|
||||
response->set_value(app().mainWindow().settingsTab().isTLSCertificateInstalled());
|
||||
return Status::OK;
|
||||
}
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
//
|
||||
//****************************************************************************************************************************************************
|
||||
Status GRPCService::InstallTLSCertificate(ServerContext *, Empty const *, Empty *) {
|
||||
app().log().debug(__FUNCTION__);
|
||||
SPStreamEvent event;
|
||||
qtProxy_.installTLSCertificate();
|
||||
switch (app().mainWindow().settingsTab().nextTLSCertIntallResult()) {
|
||||
case SettingsTab::TLSCertInstallResult::Success:
|
||||
event = newCertificateInstallSuccessEvent();
|
||||
break;
|
||||
case SettingsTab::TLSCertInstallResult::Canceled:
|
||||
event = newCertificateInstallCanceledEvent();
|
||||
break;
|
||||
default:
|
||||
event = newCertificateInstallCanceledEvent();
|
||||
break;
|
||||
}
|
||||
qtProxy_.sendDelayedEvent(event);
|
||||
return Status::OK;
|
||||
}
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
/// \param[in] request The request
|
||||
/// \param[in] writer The writer
|
||||
//****************************************************************************************************************************************************
|
||||
Status GRPCService::RunEventStream(ServerContext *ctx, EventStreamRequest const *request, ServerWriter<StreamEvent> *writer) {
|
||||
app().log().debug(__FUNCTION__);
|
||||
{
|
||||
@ -860,4 +895,3 @@ void GRPCService::finishLogin() {
|
||||
|
||||
qtProxy_.sendDelayedEvent(newLoginFinishedEvent(user->id(), alreadyExist));
|
||||
}
|
||||
|
||||
|
||||
@ -65,7 +65,6 @@ public: // member functions.
|
||||
grpc::Status ColorSchemeName(::grpc::ServerContext *, ::google::protobuf::Empty const *, ::google::protobuf::StringValue *response) override;
|
||||
grpc::Status CurrentEmailClient(::grpc::ServerContext *, ::google::protobuf::Empty const *, ::google::protobuf::StringValue *response) override;
|
||||
grpc::Status ReportBug(::grpc::ServerContext *, ::grpc::ReportBugRequest const *request, ::google::protobuf::Empty *) override;
|
||||
grpc::Status ExportTLSCertificates(::grpc::ServerContext *context, ::google::protobuf::StringValue const *request, ::google::protobuf::Empty *response) override;
|
||||
grpc::Status ForceLauncher(::grpc::ServerContext *, ::google::protobuf::StringValue const *request, ::google::protobuf::Empty *) override;
|
||||
grpc::Status SetMainExecutable(::grpc::ServerContext *, ::google::protobuf::StringValue const *request, ::google::protobuf::Empty *) override;
|
||||
grpc::Status Login(::grpc::ServerContext *, ::grpc::LoginRequest const *request, ::google::protobuf::Empty *) override;
|
||||
@ -94,6 +93,9 @@ public: // member functions.
|
||||
grpc::Status LogoutUser(::grpc::ServerContext *, ::google::protobuf::StringValue const *request, ::google::protobuf::Empty *) override;
|
||||
grpc::Status RemoveUser(::grpc::ServerContext *, ::google::protobuf::StringValue const *request, ::google::protobuf::Empty *) override;
|
||||
grpc::Status ConfigureUserAppleMail(::grpc::ServerContext *, ::grpc::ConfigureAppleMailRequest const *request, ::google::protobuf::Empty *) override;
|
||||
grpc::Status IsTLSCertificateInstalled(::grpc::ServerContext *, ::google::protobuf::Empty const*, ::google::protobuf::BoolValue *response) override;
|
||||
grpc::Status InstallTLSCertificate(::grpc::ServerContext *, ::google::protobuf::Empty const*, ::google::protobuf::Empty *) override;
|
||||
grpc::Status ExportTLSCertificates(::grpc::ServerContext *, ::google::protobuf::StringValue const *request, ::google::protobuf::Empty *) override;
|
||||
grpc::Status RunEventStream(::grpc::ServerContext *ctx, ::grpc::EventStreamRequest const *request, ::grpc::ServerWriter<::grpc::StreamEvent> *writer) override;
|
||||
grpc::Status StopEventStream(::grpc::ServerContext *, ::google::protobuf::Empty const *, ::google::protobuf::Empty *) override;
|
||||
bool sendEvent(bridgepp::SPStreamEvent const &event); ///< Queue an event for sending through the event stream.
|
||||
|
||||
@ -285,11 +285,20 @@ void SettingsTab::setBugReport(QString const &osType, QString const &osVersion,
|
||||
}
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
//
|
||||
//****************************************************************************************************************************************************
|
||||
void SettingsTab::installTLSCertificate() {
|
||||
ui_.labelLastTLSCertInstall->setText(QString("Last install: %1").arg(QDateTime::currentDateTime().toString(Qt::ISODateWithMs)));
|
||||
ui_.checkTLSCertIsInstalled->setChecked(this->nextTLSCertIntallResult() == TLSCertInstallResult::Success);
|
||||
}
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
/// \param[in] folderPath The folder path.
|
||||
//****************************************************************************************************************************************************
|
||||
void SettingsTab::exportTLSCertificates(QString const &folderPath) {
|
||||
ui_.labeLastTLSCertsExport->setText(QString("%1 Export to %2")
|
||||
ui_.labeLastTLSCertExport->setText(QString("%1 Export to %2")
|
||||
.arg(QDateTime::currentDateTime().toString(Qt::ISODateWithMs))
|
||||
.arg(folderPath));
|
||||
}
|
||||
@ -303,6 +312,22 @@ bool SettingsTab::nextBugReportWillSucceed() const {
|
||||
}
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
/// \return the state of the 'TLS Certificate is installed' check box.
|
||||
//****************************************************************************************************************************************************
|
||||
bool SettingsTab::isTLSCertificateInstalled() const {
|
||||
return ui_.checkTLSCertIsInstalled->isChecked();
|
||||
}
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
/// \return The value for the 'Next TLS cert install result'.
|
||||
//****************************************************************************************************************************************************
|
||||
SettingsTab::TLSCertInstallResult SettingsTab::nextTLSCertIntallResult() const {
|
||||
return TLSCertInstallResult(ui_.comboNextTLSCertInstallResult->currentIndex());
|
||||
}
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
/// \return true if the 'Next TLS key export will succeed' check box is checked
|
||||
//****************************************************************************************************************************************************
|
||||
@ -505,4 +530,11 @@ void SettingsTab::resetUI() {
|
||||
ui_.comboCacheError->setCurrentIndex(0);
|
||||
|
||||
ui_.checkAutomaticUpdate->setChecked(true);
|
||||
|
||||
ui_.checkTLSCertIsInstalled->setChecked(false);
|
||||
ui_.comboNextTLSCertInstallResult->setCurrentIndex(0);
|
||||
ui_.checkTLSCertExportWillSucceed->setChecked(true);
|
||||
ui_.checkTLSKeyExportWillSucceed->setChecked(true);
|
||||
ui_.labeLastTLSCertExport->setText("Last export: never");
|
||||
ui_.labelLastTLSCertInstall->setText("Last install: never");
|
||||
}
|
||||
|
||||
@ -28,6 +28,13 @@
|
||||
//****************************************************************************************************************************************************
|
||||
class SettingsTab : public QWidget {
|
||||
Q_OBJECT
|
||||
public: // data types.
|
||||
enum class TLSCertInstallResult {
|
||||
Success = 0,
|
||||
Canceled = 1,
|
||||
Failure = 2
|
||||
}; ///< Enumberation for the result of a TLS certificate installation.
|
||||
|
||||
public: // member functions.
|
||||
explicit SettingsTab(QWidget *parent = nullptr); ///< Default constructor.
|
||||
SettingsTab(SettingsTab const &) = delete; ///< Disabled copy-constructor.
|
||||
@ -54,6 +61,8 @@ public: // member functions.
|
||||
QString dependencyLicenseLink() const; ///< Get the content of the 'Dependency License Link' edit.
|
||||
QString landingPageLink() const; ///< Get the content of the 'Landing Page Link' edit.
|
||||
bool nextBugReportWillSucceed() const; ///< Get the status of the 'Next Bug Report Will Fail' check box.
|
||||
bool isTLSCertificateInstalled() const; ///< Get the status of the 'TLS Certificate is installed' check box.
|
||||
TLSCertInstallResult nextTLSCertIntallResult() const; ///< Get the value of the 'Next TLS Certificate install result' combo box.
|
||||
bool nextTLSCertExportWillSucceed() const; ///< Get the status of the 'Next TLS Cert export will succeed' check box.
|
||||
bool nextTLSKeyExportWillSucceed() const; ///< Get the status of the 'Next TLS Key export will succeed' check box.
|
||||
QString hostname() const; ///< Get the value of the 'Hostname' edit.
|
||||
@ -79,6 +88,7 @@ public slots:
|
||||
void setColorSchemeName(QString const &name); ///< Set the value for the 'Use Dark Theme' check box.
|
||||
void setBugReport(QString const &osType, QString const &osVersion, QString const &emailClient, QString const &address, QString const &description,
|
||||
bool includeLogs); ///< Set the content of the bug report box.
|
||||
void installTLSCertificate(); ///< Install the TLS certificate.
|
||||
void exportTLSCertificates(QString const &folderPath); ///< Export the TLS certificates.
|
||||
void setMailServerSettings(qint32 imapPort, qint32 smtpPort, bool useSSLForIMAP, bool useSSLForSMTP); ///< Change the mail server settings.
|
||||
void setIsDoHEnabled(bool enabled); ///< Set the value for the 'DoH Enabled' check box.
|
||||
|
||||
@ -370,7 +370,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupCache_2">
|
||||
<widget class="QGroupBox" name="groupCert">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
@ -380,34 +380,81 @@
|
||||
<property name="title">
|
||||
<string>TLS Certficates</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_9">
|
||||
<item>
|
||||
<widget class="QLabel" name="labeLastTLSCertsExport">
|
||||
<layout class="QGridLayout" name="gridLayout_4" columnstretch="1,1">
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="checkTLSCertIsInstalled">
|
||||
<property name="text">
|
||||
<string>Last Export: Never</string>
|
||||
<string>Certificate is installed</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QCheckBox" name="checkTLSCertExportWillSucceed">
|
||||
<property name="text">
|
||||
<string>TLS certificate export will succeed</string>
|
||||
<string>Certificate export will succeed</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QCheckBox" name="checkTLSKeyExportWillSucceed">
|
||||
<property name="text">
|
||||
<string>TLS private key export will succeed</string>
|
||||
<string>Key export will succeed</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLabel" name="labeLastTLSCertExport">
|
||||
<property name="text">
|
||||
<string>Last Export: never</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="labelLastTLSCertInstall">
|
||||
<property name="text">
|
||||
<string>Last install: never</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_14" stretch="0,1">
|
||||
<item>
|
||||
<widget class="QLabel" name="labelNextInstall">
|
||||
<property name="text">
|
||||
<string>Next install will</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboNextTLSCertInstallResult">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Succeed</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Be Canceled</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Fail</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@ -290,16 +290,6 @@ bool QMLBackend::isTLSCertificateInstalled() {
|
||||
}
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
//
|
||||
//****************************************************************************************************************************************************
|
||||
void QMLBackend::installTLSCertificate() {
|
||||
HANDLE_EXCEPTION(
|
||||
app().grpc().installTLSCertificate();
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
/// \return The value for the 'showOnStartup' property.
|
||||
//****************************************************************************************************************************************************
|
||||
@ -963,6 +953,15 @@ void QMLBackend::reportBug(QString const &category, QString const &description,
|
||||
}
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
//
|
||||
//****************************************************************************************************************************************************
|
||||
void QMLBackend::installTLSCertificate() {
|
||||
HANDLE_EXCEPTION(
|
||||
app().grpc().installTLSCertificate();
|
||||
)
|
||||
}
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
//
|
||||
//****************************************************************************************************************************************************
|
||||
|
||||
@ -65,7 +65,6 @@ public: // member functions.
|
||||
Q_INVOKABLE QString collectAnswers(quint8 categoryId) const; ///< Collect answer for a given set of questions.
|
||||
Q_INVOKABLE void clearAnswers(); ///< Clear all collected answers.
|
||||
Q_INVOKABLE bool isTLSCertificateInstalled(); ///< Check if the bridge certificate is installed in the OS keychain.
|
||||
Q_INVOKABLE void installTLSCertificate(); ///< Installs the Bridge TLS certificate in the Keychain.
|
||||
|
||||
public: // Qt/QML properties. Note that the NOTIFY-er signal is required even for read-only properties (QML warning otherwise)
|
||||
Q_PROPERTY(bool showOnStartup READ showOnStartup NOTIFY showOnStartupChanged)
|
||||
@ -197,6 +196,7 @@ public slots: // slot for signals received from QML -> To be forwarded to Bridge
|
||||
void installUpdate() const; ///< Slot for the update install.
|
||||
void triggerReset() const; ///< Slot for the triggering of reset.
|
||||
void reportBug(QString const &category, QString const &description, QString const &address, QString const &emailClient, bool includeLogs) const; ///< Slot for the bug report.
|
||||
void installTLSCertificate(); ///< Installs the Bridge TLS certificate in the Keychain.
|
||||
void exportTLSCertificates() const; ///< Slot for the export of the TLS certificates.
|
||||
void onResetFinished(); ///< Slot for the reset finish signal.
|
||||
void onVersionChanged(); ///< Slot for the version change signal.
|
||||
|
||||
@ -108,6 +108,7 @@
|
||||
<file>qml/SettingsView.qml</file>
|
||||
<file>qml/SetupWizard/ClientListItem.qml</file>
|
||||
<file>qml/SetupWizard/LeftPane.qml</file>
|
||||
<file>qml/SetupWizard/ClientConfigAppleMail.qml</file>
|
||||
<file>qml/SetupWizard/ClientConfigOutlookSelector.qml</file>
|
||||
<file>qml/SetupWizard/ClientConfigParameters.qml</file>
|
||||
<file>qml/SetupWizard/ClientConfigSelector.qml</file>
|
||||
|
||||
@ -0,0 +1,143 @@
|
||||
// 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/>.
|
||||
import QtQml
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Controls.impl
|
||||
import Proton
|
||||
|
||||
Item {
|
||||
id: root
|
||||
enum Screen {
|
||||
CertificateInstall = 0,
|
||||
ProfileInstall = 1
|
||||
}
|
||||
|
||||
property var wizard
|
||||
|
||||
function showAutoConfig() {
|
||||
certInstallButton.loading = false;
|
||||
if (Backend.isTLSCertificateInstalled()) {
|
||||
stack.currentIndex = ClientConfigAppleMail.Screen.ProfileInstall;
|
||||
} else {
|
||||
stack.currentIndex = ClientConfigAppleMail.Screen.CertificateInstall;
|
||||
}
|
||||
}
|
||||
|
||||
StackLayout {
|
||||
id: stack
|
||||
anchors.fill: parent
|
||||
|
||||
// stack index 0
|
||||
ColumnLayout {
|
||||
id: certificateInstall
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
|
||||
Connections {
|
||||
function onCertificateInstallCanceled() {
|
||||
// Note: this will lead to an error message in the final version.
|
||||
certInstallButton.loading = false;
|
||||
console.error("Certificate installation was canceled");
|
||||
}
|
||||
function onCertificateInstallFailed() {
|
||||
// Note: this will lead to an error page later.
|
||||
certInstallButton.loading = false;
|
||||
console.error("Certificate installation failed");
|
||||
}
|
||||
function onCertificateInstallSuccess() {
|
||||
certInstallButton.loading = false;
|
||||
console.error("Certification installed successfully");
|
||||
stack.currentIndex = ClientConfigAppleMail.Screen.ProfileInstall;
|
||||
}
|
||||
|
||||
target: Backend
|
||||
}
|
||||
Label {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
Layout.fillWidth: true
|
||||
colorScheme: wizard.colorScheme
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
text: "Certificate install placeholder"
|
||||
type: Label.LabelType.Heading
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
Button {
|
||||
id: certInstallButton
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: 48
|
||||
colorScheme: wizard.colorScheme
|
||||
enabled: !loading
|
||||
loading: false
|
||||
text: "Install Certificate Placeholder"
|
||||
|
||||
onClicked: {
|
||||
certInstallButton.loading = true;
|
||||
Backend.installTLSCertificate();
|
||||
}
|
||||
}
|
||||
Button {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: 32
|
||||
colorScheme: wizard.colorScheme
|
||||
enabled: !certInstallButton.loading
|
||||
secondary: true
|
||||
text: qsTr("Cancel")
|
||||
|
||||
onClicked: {
|
||||
wizard.closeWizard();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// stack index 1
|
||||
ColumnLayout {
|
||||
id: profileInstall
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
|
||||
Label {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
Layout.fillWidth: true
|
||||
colorScheme: wizard.colorScheme
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
text: "Profile install placeholder"
|
||||
type: Label.LabelType.Heading
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
Button {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: 48
|
||||
colorScheme: wizard.colorScheme
|
||||
text: "Install Profile Placeholder"
|
||||
|
||||
onClicked: {
|
||||
wizard.user.configureAppleMail(wizard.address);
|
||||
wizard.closeWizard();
|
||||
}
|
||||
}
|
||||
Button {
|
||||
Layout.fillWidth: true
|
||||
Layout.topMargin: 32
|
||||
colorScheme: wizard.colorScheme
|
||||
secondary: true
|
||||
text: qsTr("Cancel")
|
||||
|
||||
onClicked: {
|
||||
wizard.closeWizard();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -49,6 +49,7 @@ Item {
|
||||
|
||||
onClicked: {
|
||||
wizard.client = SetupWizard.Client.AppleMail;
|
||||
wizard.showAppleMailAutoConfig();
|
||||
}
|
||||
}
|
||||
ClientListItem {
|
||||
|
||||
@ -31,7 +31,8 @@ Item {
|
||||
Login,
|
||||
ClientConfigSelector,
|
||||
ClientConfigOutlookSelector,
|
||||
ClientConfigWarning
|
||||
ClientConfigWarning,
|
||||
ClientConfigAppleMail
|
||||
}
|
||||
enum RootStack {
|
||||
TwoPanesView,
|
||||
@ -80,6 +81,12 @@ Item {
|
||||
function closeWizard() {
|
||||
wizardEnded();
|
||||
}
|
||||
function showAppleMailAutoConfig() {
|
||||
rootStackLayout.currentIndex = SetupWizard.RootStack.TwoPanesView;
|
||||
leftContent.showClientSelector();
|
||||
rightContent.currentIndex = SetupWizard.ContentStack.ClientConfigAppleMail;
|
||||
clientConfigAppleMail.showAutoConfig();
|
||||
}
|
||||
function showClientConfig(user, address) {
|
||||
root.user = user;
|
||||
root.address = address;
|
||||
@ -222,6 +229,13 @@ Item {
|
||||
Layout.fillWidth: true
|
||||
wizard: root
|
||||
}
|
||||
// rightContent stack index 5
|
||||
ClientConfigAppleMail {
|
||||
id: clientConfigAppleMail
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
wizard: root
|
||||
}
|
||||
}
|
||||
LinkLabel {
|
||||
id: reportProblemLink
|
||||
|
||||
@ -804,11 +804,11 @@ grpc::Status GRPCClient::setCurrentKeychain(QString const &keychain) {
|
||||
|
||||
|
||||
//****************************************************************************************************************************************************
|
||||
/// \param[out] isInstalled is The Bridge certificate installed in the keychain.
|
||||
/// \param[out] outIsInstalled is The Bridge certificate installed in the keychain.
|
||||
/// \return The status for the call
|
||||
//****************************************************************************************************************************************************
|
||||
grpc::Status GRPCClient::isTLSCertificateInstalled(bool isInstalled) {
|
||||
return this->logGRPCCallStatus(this->getBool(&Bridge::Stub::IsTLSCertificateInstalled, isInstalled), __FUNCTION__);
|
||||
grpc::Status GRPCClient::isTLSCertificateInstalled(bool &outIsInstalled) {
|
||||
return this->logGRPCCallStatus(this->getBool(&Bridge::Stub::IsTLSCertificateInstalled, outIsInstalled), __FUNCTION__);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -204,7 +204,7 @@ public: // keychain related calls
|
||||
grpc::Status setCurrentKeychain(QString const &keychain);
|
||||
|
||||
public: // cert related calls
|
||||
grpc::Status isTLSCertificateInstalled(bool isInstalled); ///< Perform the 'IsTLSCertificateInstalled' gRPC call.
|
||||
grpc::Status isTLSCertificateInstalled(bool &outIsInstalled); ///< Perform the 'IsTLSCertificateInstalled' gRPC call.
|
||||
grpc::Status installTLSCertificate(); ///< Perform the 'InstallTLSCertificate' gRPC call.
|
||||
grpc::Status exportTLSCertificates(QString const &folderPath); ///< Performs the 'ExportTLSCertificates' gRPC call.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user