Share pages refactoring
This commit is contained in:
parent
396af917b5
commit
836075de10
15 changed files with 222 additions and 622 deletions
|
@ -14,8 +14,6 @@ class PageLogicBase : public QObject
|
|||
{
|
||||
Q_OBJECT
|
||||
AUTO_PROPERTY(bool, pageEnabled)
|
||||
// AUTO_PROPERTY(int, serverIndex)
|
||||
// AUTO_PROPERTY(DockerContainer, dockerContainer)
|
||||
|
||||
public:
|
||||
explicit PageLogicBase(UiLogic *uiLogic, QObject *parent = nullptr);
|
||||
|
|
|
@ -127,5 +127,5 @@ void ServerSettingsLogic::onLineEditDescriptionEditingFinished()
|
|||
void ServerSettingsLogic::onPushButtonShareFullClicked()
|
||||
{
|
||||
uiLogic()->shareConnectionLogic()->updateSharingPage(uiLogic()->selectedServerIndex, m_settings.serverCredentials(uiLogic()->selectedServerIndex), DockerContainer::None);
|
||||
emit uiLogic()->goToPage(Page::ShareConnection);
|
||||
emit uiLogic()->goToShareProtocolPage(Protocol::Any);
|
||||
}
|
||||
|
|
|
@ -23,161 +23,76 @@
|
|||
ShareConnectionLogic::ShareConnectionLogic(UiLogic *logic, QObject *parent):
|
||||
PageLogicBase(logic, parent),
|
||||
m_textEditShareOpenVpnCodeText{},
|
||||
m_pushButtonShareOpenVpnCopyEnabled{false},
|
||||
m_pushButtonShareOpenVpnSaveEnabled{false},
|
||||
m_lineEditShareShadowSocksStringText{},
|
||||
m_labelShareShadowSocksQrCodeText{},
|
||||
m_shareShadowSocksQrCodeText{},
|
||||
m_labelShareShadowSocksServerText{},
|
||||
m_labelShareShadowSocksPortText{},
|
||||
m_labelShareShadowSocksMethodText{},
|
||||
m_labelShareShadowSocksPasswordText{},
|
||||
m_plainTextEditShareCloakText{},
|
||||
m_textEditShareFullCodeText{},
|
||||
m_textEditShareCloakText{},
|
||||
m_textEditShareAmneziaCodeText{},
|
||||
m_pushButtonShareFullCopyText{tr("Copy")},
|
||||
m_pushButtonShareAmneziaCopyText{tr("Copy")},
|
||||
m_pushButtonShareOpenVpnCopyText{tr("Copy")},
|
||||
m_pushButtonShareShadowSocksCopyText{tr("Copy")},
|
||||
m_pushButtonShareCloakCopyText{tr("Copy")},
|
||||
m_pushButtonShareAmneziaGenerateEnabled{true},
|
||||
m_pushButtonShareAmneziaCopyEnabled{true},
|
||||
m_pushButtonShareAmneziaGenerateText{tr("Generate config")},
|
||||
m_pushButtonShareOpenVpnGenerateEnabled{true},
|
||||
m_pushButtonShareOpenVpnGenerateText{tr("Generate config")}
|
||||
{
|
||||
// TODO consider move to Component.onCompleted
|
||||
//updateSharingPage(uiLogic()->selectedServerIndex, m_settings.serverCredentials(uiLogic()->selectedServerIndex), uiLogic()->selectedDockerContainer);
|
||||
}
|
||||
|
||||
|
||||
void ShareConnectionLogic::onPushButtonShareFullCopyClicked()
|
||||
void ShareConnectionLogic::onUpdatePage()
|
||||
{
|
||||
QGuiApplication::clipboard()->setText(textEditShareFullCodeText());
|
||||
set_pushButtonShareFullCopyText(tr("Copied"));
|
||||
|
||||
QTimer::singleShot(3000, this, [this]() {
|
||||
set_pushButtonShareFullCopyText(tr("Copy"));
|
||||
});
|
||||
}
|
||||
|
||||
void ShareConnectionLogic::onPushButtonShareFullSaveClicked()
|
||||
{
|
||||
if (textEditShareFullCodeText().isEmpty()) return;
|
||||
|
||||
QString fileName = QFileDialog::getSaveFileName(nullptr, tr("Save AmneziaVPN config"),
|
||||
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "*.amnezia");
|
||||
QSaveFile save(fileName);
|
||||
save.open(QIODevice::WriteOnly);
|
||||
save.write(textEditShareFullCodeText().toUtf8());
|
||||
save.commit();
|
||||
}
|
||||
|
||||
void ShareConnectionLogic::onPushButtonShareAmneziaCopyClicked()
|
||||
{
|
||||
if (textEditShareAmneziaCodeText().isEmpty()) return;
|
||||
|
||||
QGuiApplication::clipboard()->setText(textEditShareAmneziaCodeText());
|
||||
set_pushButtonShareAmneziaCopyText(tr("Copied"));
|
||||
|
||||
QTimer::singleShot(3000, this, [this]() {
|
||||
set_pushButtonShareAmneziaCopyText(tr("Copy"));
|
||||
});
|
||||
}
|
||||
|
||||
void ShareConnectionLogic::onPushButtonShareAmneziaSaveClicked()
|
||||
{
|
||||
if (textEditShareAmneziaCodeText().isEmpty()) return;
|
||||
|
||||
QString fileName = QFileDialog::getSaveFileName(nullptr, tr("Save AmneziaVPN config"),
|
||||
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "*.amnezia");
|
||||
QSaveFile save(fileName);
|
||||
save.open(QIODevice::WriteOnly);
|
||||
save.write(textEditShareAmneziaCodeText().toUtf8());
|
||||
save.commit();
|
||||
}
|
||||
|
||||
void ShareConnectionLogic::onPushButtonShareOpenVpnCopyClicked()
|
||||
{
|
||||
QGuiApplication::clipboard()->setText(textEditShareOpenVpnCodeText());
|
||||
set_pushButtonShareOpenVpnCopyText(tr("Copied"));
|
||||
|
||||
QTimer::singleShot(3000, this, [this]() {
|
||||
set_pushButtonShareOpenVpnCopyText(tr("Copy"));
|
||||
});
|
||||
}
|
||||
|
||||
void ShareConnectionLogic::onPushButtonShareShadowSocksCopyClicked()
|
||||
{
|
||||
QGuiApplication::clipboard()->setText(lineEditShareShadowSocksStringText());
|
||||
set_pushButtonShareShadowSocksCopyText(tr("Copied"));
|
||||
|
||||
QTimer::singleShot(3000, this, [this]() {
|
||||
set_pushButtonShareShadowSocksCopyText(tr("Copy"));
|
||||
});
|
||||
}
|
||||
|
||||
void ShareConnectionLogic::onPushButtonShareCloakCopyClicked()
|
||||
{
|
||||
QGuiApplication::clipboard()->setText(plainTextEditShareCloakText());
|
||||
set_pushButtonShareCloakCopyText(tr("Copied"));
|
||||
|
||||
QTimer::singleShot(3000, this, [this]() {
|
||||
set_pushButtonShareCloakCopyText(tr("Copy"));
|
||||
});
|
||||
}
|
||||
|
||||
void ShareConnectionLogic::onPushButtonShareAmneziaGenerateClicked()
|
||||
{
|
||||
set_pushButtonShareAmneziaGenerateEnabled(false);
|
||||
set_pushButtonShareAmneziaCopyEnabled(false);
|
||||
set_pushButtonShareAmneziaGenerateText(tr("Generating..."));
|
||||
qApp->processEvents();
|
||||
|
||||
ServerCredentials credentials = m_settings.serverCredentials(uiLogic()->selectedServerIndex);
|
||||
QJsonObject containerConfig = m_settings.containerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer);
|
||||
containerConfig.insert(config_key::container, ContainerProps::containerToString(uiLogic()->selectedDockerContainer));
|
||||
|
||||
ErrorCode e = ErrorCode::NoError;
|
||||
for (Protocol p: ContainerProps::protocolsForContainer(uiLogic()->selectedDockerContainer)) {
|
||||
QJsonObject protoConfig = m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, p);
|
||||
|
||||
QString cfg = VpnConfigurator::genVpnProtocolConfig(credentials, uiLogic()->selectedDockerContainer, containerConfig, p, &e);
|
||||
if (e) {
|
||||
cfg = "Error generating config";
|
||||
break;
|
||||
}
|
||||
protoConfig.insert(config_key::last_config, cfg);
|
||||
|
||||
containerConfig.insert(ProtocolProps::protoToString(p), protoConfig);
|
||||
}
|
||||
|
||||
QByteArray ba;
|
||||
if (!e) {
|
||||
QJsonObject serverConfig = m_settings.server(uiLogic()->selectedServerIndex);
|
||||
serverConfig.remove(config_key::userName);
|
||||
serverConfig.remove(config_key::password);
|
||||
serverConfig.remove(config_key::port);
|
||||
serverConfig.insert(config_key::containers, QJsonArray {containerConfig});
|
||||
serverConfig.insert(config_key::defaultContainer, ContainerProps::containerToString(uiLogic()->selectedDockerContainer));
|
||||
|
||||
|
||||
ba = QJsonDocument(serverConfig).toJson().toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals);
|
||||
set_textEditShareAmneziaCodeText(QString("vpn://%1").arg(QString(ba)));
|
||||
set_textEditShareAmneziaCodeText("");
|
||||
QJsonObject serverConfig;
|
||||
// Full access
|
||||
if (shareFullAccess()) {
|
||||
serverConfig = m_settings.server(uiLogic()->selectedServerIndex);
|
||||
}
|
||||
// Container share
|
||||
else {
|
||||
set_textEditShareAmneziaCodeText(tr("Error while generating connection profile"));
|
||||
ServerCredentials credentials = m_settings.serverCredentials(uiLogic()->selectedServerIndex);
|
||||
QJsonObject containerConfig = m_settings.containerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer);
|
||||
containerConfig.insert(config_key::container, ContainerProps::containerToString(uiLogic()->selectedDockerContainer));
|
||||
|
||||
ErrorCode e = ErrorCode::NoError;
|
||||
for (Protocol p: ContainerProps::protocolsForContainer(uiLogic()->selectedDockerContainer)) {
|
||||
QJsonObject protoConfig = m_settings.protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, p);
|
||||
|
||||
QString cfg = VpnConfigurator::genVpnProtocolConfig(credentials, uiLogic()->selectedDockerContainer, containerConfig, p, &e);
|
||||
if (e) {
|
||||
cfg = "Error generating config";
|
||||
break;
|
||||
}
|
||||
protoConfig.insert(config_key::last_config, cfg);
|
||||
containerConfig.insert(ProtocolProps::protoToString(p), protoConfig);
|
||||
}
|
||||
|
||||
QByteArray ba;
|
||||
if (!e) {
|
||||
serverConfig = m_settings.server(uiLogic()->selectedServerIndex);
|
||||
serverConfig.remove(config_key::userName);
|
||||
serverConfig.remove(config_key::password);
|
||||
serverConfig.remove(config_key::port);
|
||||
serverConfig.insert(config_key::containers, QJsonArray {containerConfig});
|
||||
serverConfig.insert(config_key::defaultContainer, ContainerProps::containerToString(uiLogic()->selectedDockerContainer));
|
||||
}
|
||||
else {
|
||||
set_textEditShareAmneziaCodeText(tr("Error while generating connection profile"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
set_pushButtonShareAmneziaGenerateEnabled(true);
|
||||
set_pushButtonShareAmneziaCopyEnabled(true);
|
||||
set_pushButtonShareAmneziaGenerateText(tr("Generate config"));
|
||||
QByteArray ba = QJsonDocument(serverConfig).toJson().toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals);
|
||||
QString code = QString("vpn://%1").arg(QString(ba));
|
||||
set_textEditShareAmneziaCodeText(code);
|
||||
|
||||
QImage qr = updateQRCodeImage(code);
|
||||
set_shareAmneziaQrCodeText(imageToBase64(qr));
|
||||
}
|
||||
|
||||
void ShareConnectionLogic::onPushButtonShareOpenVpnGenerateClicked()
|
||||
{
|
||||
set_pushButtonShareOpenVpnGenerateEnabled(false);
|
||||
set_pushButtonShareOpenVpnCopyEnabled(false);
|
||||
set_pushButtonShareOpenVpnSaveEnabled(false);
|
||||
set_pushButtonShareOpenVpnGenerateText(tr("Generating..."));
|
||||
|
||||
ServerCredentials credentials = m_settings.serverCredentials(uiLogic()->selectedServerIndex);
|
||||
|
@ -189,49 +104,19 @@ void ShareConnectionLogic::onPushButtonShareOpenVpnGenerateClicked()
|
|||
|
||||
set_textEditShareOpenVpnCodeText(QJsonDocument::fromJson(cfg.toUtf8()).object()[config_key::config].toString());
|
||||
|
||||
set_pushButtonShareOpenVpnGenerateEnabled(true);
|
||||
set_pushButtonShareOpenVpnCopyEnabled(true);
|
||||
set_pushButtonShareOpenVpnSaveEnabled(true);
|
||||
set_pushButtonShareOpenVpnGenerateText(tr("Generate config"));
|
||||
}
|
||||
|
||||
void ShareConnectionLogic::onPushButtonShareOpenVpnSaveClicked()
|
||||
{
|
||||
QString fileName = QFileDialog::getSaveFileName(nullptr, tr("Save OpenVPN config"),
|
||||
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "*.ovpn");
|
||||
|
||||
QSaveFile save(fileName);
|
||||
save.open(QIODevice::WriteOnly);
|
||||
save.write(textEditShareOpenVpnCodeText().toUtf8());
|
||||
save.commit();
|
||||
}
|
||||
|
||||
|
||||
void ShareConnectionLogic::updateSharingPage(int serverIndex, const ServerCredentials &credentials,
|
||||
DockerContainer container)
|
||||
{
|
||||
uiLogic()->selectedDockerContainer = container;
|
||||
uiLogic()->selectedServerIndex = serverIndex;
|
||||
set_shareFullAccess(container == DockerContainer::None);
|
||||
|
||||
|
||||
// Full access
|
||||
if (container == DockerContainer::None) {
|
||||
|
||||
const QJsonObject &server = m_settings.server(uiLogic()->selectedServerIndex);
|
||||
|
||||
QByteArray ba = QJsonDocument(server).toJson().toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals);
|
||||
|
||||
set_textEditShareFullCodeText(QString("vpn://%1").arg(QString(ba)));
|
||||
}
|
||||
else {
|
||||
if (! shareFullAccess()) {
|
||||
for (Protocol p : ContainerProps::protocolsForContainer(container)) {
|
||||
if (p == Protocol::OpenVpn) {
|
||||
QString cfg = tr("Press Generate config");
|
||||
set_textEditShareOpenVpnCodeText(cfg);
|
||||
set_pushButtonShareOpenVpnCopyEnabled(false);
|
||||
set_pushButtonShareOpenVpnSaveEnabled(false);
|
||||
}
|
||||
else if (p == Protocol::ShadowSocks) {
|
||||
if (p == Protocol::ShadowSocks) {
|
||||
QJsonObject protoConfig = m_settings.protocolConfig(serverIndex, container, Protocol::ShadowSocks);
|
||||
QString cfg = protoConfig.value(config_key::last_config).toString();
|
||||
|
||||
|
@ -254,7 +139,7 @@ void ShareConnectionLogic::updateSharingPage(int serverIndex, const ServerCreden
|
|||
set_lineEditShareShadowSocksStringText(ssString);
|
||||
|
||||
QImage qr = updateQRCodeImage(ssString);
|
||||
set_labelShareShadowSocksQrCodeText(imageToBase64(qr));
|
||||
set_shareShadowSocksQrCodeText(imageToBase64(qr));
|
||||
|
||||
set_labelShareShadowSocksServerText(ssConfig.value("server").toString());
|
||||
set_labelShareShadowSocksPortText(ssConfig.value("server_port").toString());
|
||||
|
@ -263,7 +148,7 @@ void ShareConnectionLogic::updateSharingPage(int serverIndex, const ServerCreden
|
|||
|
||||
}
|
||||
else if (p == Protocol::Cloak) {
|
||||
set_plainTextEditShareCloakText(QString(""));
|
||||
set_textEditShareCloakText(QString(""));
|
||||
|
||||
QJsonObject protoConfig = m_settings.protocolConfig(serverIndex, container, Protocol::Cloak);
|
||||
QString cfg = protoConfig.value(config_key::last_config).toString();
|
||||
|
@ -281,29 +166,15 @@ void ShareConnectionLogic::updateSharingPage(int serverIndex, const ServerCreden
|
|||
cloakConfig.remove(config_key::transport_proto);
|
||||
cloakConfig.insert("ProxyMethod", "shadowsocks");
|
||||
|
||||
set_plainTextEditShareCloakText(QJsonDocument(cloakConfig).toJson());
|
||||
set_textEditShareCloakText(QJsonDocument(cloakConfig).toJson());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//ui->toolBox_share_connection->addItem(ui->page_share_amnezia, tr(" Share for Amnezia client"));
|
||||
|
||||
// Amnezia sharing
|
||||
// QJsonObject exportContainer;
|
||||
// for (Protocol p: protocolsForContainer(container)) {
|
||||
// QJsonObject protocolConfig = containerConfig.value(ProtocolProps::protoToString(p)).toObject();
|
||||
// protocolConfig.remove(config_key::last_config);
|
||||
// exportContainer.insert(ProtocolProps::protoToString(p), protocolConfig);
|
||||
// }
|
||||
// exportContainer.insert(config_key::container, containerToString(container));
|
||||
|
||||
// ui->textEdit_share_amnezia_code->setPlainText(QJsonDocument(exportContainer).toJson());
|
||||
|
||||
set_textEditShareAmneziaCodeText(tr(""));
|
||||
}
|
||||
|
||||
|
||||
QImage ShareConnectionLogic::updateQRCodeImage(const QString &text)
|
||||
{
|
||||
int levelIndex = 1;
|
||||
|
|
|
@ -11,40 +11,28 @@ class ShareConnectionLogic: public PageLogicBase
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
AUTO_PROPERTY(bool, shareFullAccess)
|
||||
|
||||
AUTO_PROPERTY(QString, textEditShareAmneziaCodeText)
|
||||
AUTO_PROPERTY(QString, shareAmneziaQrCodeText)
|
||||
|
||||
AUTO_PROPERTY(QString, textEditShareOpenVpnCodeText)
|
||||
AUTO_PROPERTY(bool, pushButtonShareOpenVpnCopyEnabled)
|
||||
AUTO_PROPERTY(bool, pushButtonShareOpenVpnSaveEnabled)
|
||||
AUTO_PROPERTY(QString, pushButtonShareOpenVpnGenerateText)
|
||||
|
||||
AUTO_PROPERTY(QString, lineEditShareShadowSocksStringText)
|
||||
AUTO_PROPERTY(QString, labelShareShadowSocksQrCodeText)
|
||||
AUTO_PROPERTY(QString, shareShadowSocksQrCodeText)
|
||||
AUTO_PROPERTY(QString, labelShareShadowSocksServerText)
|
||||
AUTO_PROPERTY(QString, labelShareShadowSocksPortText)
|
||||
AUTO_PROPERTY(QString, labelShareShadowSocksMethodText)
|
||||
AUTO_PROPERTY(QString, labelShareShadowSocksPasswordText)
|
||||
AUTO_PROPERTY(QString, plainTextEditShareCloakText)
|
||||
AUTO_PROPERTY(QString, textEditShareFullCodeText)
|
||||
AUTO_PROPERTY(QString, textEditShareAmneziaCodeText)
|
||||
AUTO_PROPERTY(QString, pushButtonShareFullCopyText)
|
||||
AUTO_PROPERTY(QString, pushButtonShareAmneziaCopyText)
|
||||
AUTO_PROPERTY(QString, pushButtonShareOpenVpnCopyText)
|
||||
AUTO_PROPERTY(QString, pushButtonShareShadowSocksCopyText)
|
||||
AUTO_PROPERTY(QString, pushButtonShareCloakCopyText)
|
||||
AUTO_PROPERTY(bool, pushButtonShareAmneziaGenerateEnabled)
|
||||
AUTO_PROPERTY(bool, pushButtonShareAmneziaCopyEnabled)
|
||||
AUTO_PROPERTY(QString, pushButtonShareAmneziaGenerateText)
|
||||
AUTO_PROPERTY(bool, pushButtonShareOpenVpnGenerateEnabled)
|
||||
AUTO_PROPERTY(QString, pushButtonShareOpenVpnGenerateText)
|
||||
|
||||
AUTO_PROPERTY(QString, textEditShareCloakText)
|
||||
|
||||
public:
|
||||
Q_INVOKABLE void onPushButtonShareFullCopyClicked();
|
||||
Q_INVOKABLE void onPushButtonShareFullSaveClicked();
|
||||
Q_INVOKABLE void onPushButtonShareAmneziaCopyClicked();
|
||||
Q_INVOKABLE void onPushButtonShareAmneziaSaveClicked();
|
||||
Q_INVOKABLE void onPushButtonShareOpenVpnCopyClicked();
|
||||
Q_INVOKABLE void onPushButtonShareShadowSocksCopyClicked();
|
||||
Q_INVOKABLE void onPushButtonShareCloakCopyClicked();
|
||||
Q_INVOKABLE void onPushButtonShareAmneziaGenerateClicked();
|
||||
Q_INVOKABLE void onPushButtonShareOpenVpnGenerateClicked();
|
||||
Q_INVOKABLE void onPushButtonShareOpenVpnSaveClicked();
|
||||
|
||||
Q_INVOKABLE virtual void onUpdatePage() override;
|
||||
|
||||
public:
|
||||
explicit ShareConnectionLogic(UiLogic *uiLogic, QObject *parent = nullptr);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue