mirror of
https://github.com/chenx-dust/EZ4Connect.git
synced 2026-09-20 02:13:32 +08:00
feat: 支持证书认证 (#18)
* Initial plan * Add certificate file and password support for VPN connection Co-authored-by: chenx-dust <16610294+chenx-dust@users.noreply.github.com> * Update certificate file placeholder to mention both p12 and pfx formats Co-authored-by: chenx-dust <16610294+chenx-dust@users.noreply.github.com> * Complete certificate-based VPN connection support implementation Co-authored-by: chenx-dust <16610294+chenx-dust@users.noreply.github.com> * 修改 --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: chenx-dust <16610294+chenx-dust@users.noreply.github.com> Co-authored-by: Chenx Dust <chenx_dust@outlook.com>
This commit is contained in:
1
_codeql_detected_source_root
Symbolic link
1
_codeql_detected_source_root
Symbolic link
@@ -0,0 +1 @@
|
||||
.
|
||||
@@ -117,6 +117,24 @@ SettingWindow::SettingWindow(QWidget *parent, QSettings *inputSettings) :
|
||||
ui->totpSecretLineEdit->setEchoMode(state == Qt::Checked ? QLineEdit::Normal : QLineEdit::Password);
|
||||
});
|
||||
|
||||
connect(ui->certPasswordVisibleCheckBox, &QCheckBox::checkStateChanged,
|
||||
[&](Qt::CheckState state)
|
||||
{
|
||||
ui->certPasswordLineEdit->setEchoMode(state == Qt::Checked ? QLineEdit::Normal : QLineEdit::Password);
|
||||
});
|
||||
|
||||
connect(ui->certFileBrowseButton, &QPushButton::clicked,
|
||||
[&]()
|
||||
{
|
||||
QString filename = QFileDialog::getOpenFileName(this, "选择证书文件",
|
||||
QStandardPaths::writableLocation(QStandardPaths::HomeLocation),
|
||||
"P12 Certificate(*.p12 *.pfx);;All Files(*.*)");
|
||||
if (!filename.isEmpty())
|
||||
{
|
||||
ui->certFileLineEdit->setText(filename);
|
||||
}
|
||||
});
|
||||
|
||||
connect(ui->authSelectPushButton, &QPushButton::clicked, this, [&]() {
|
||||
authInfoWindow = new AuthInfoWindow(this);
|
||||
connect(authInfoWindow, &AuthInfoWindow::finishAuthInfo, this,
|
||||
@@ -151,6 +169,10 @@ void SettingWindow::loadSettings()
|
||||
QByteArray::fromBase64(settings->value("Credential/Password").toString().toUtf8())
|
||||
);
|
||||
ui->totpSecretLineEdit->setText(settings->value("Credential/TOTPSecret").toString());
|
||||
ui->certFileLineEdit->setText(settings->value("Credential/CertFile").toString());
|
||||
ui->certPasswordLineEdit->setText(
|
||||
QByteArray::fromBase64(settings->value("Credential/CertPassword").toString().toUtf8())
|
||||
);
|
||||
|
||||
ui->autoStartCheckBox->setChecked(settings->value("Common/AutoStart").toBool());
|
||||
ui->connectAfterStartCheckBox->setChecked(settings->value("Common/ConnectAfterStart").toBool());
|
||||
@@ -219,6 +241,8 @@ void SettingWindow::applySettings()
|
||||
settings->setValue("Credential/Username", ui->usernameLineEdit->text());
|
||||
settings->setValue("Credential/Password", QString(ui->passwordLineEdit->text().toUtf8().toBase64()));
|
||||
settings->setValue("Credential/TOTPSecret", ui->totpSecretLineEdit->text());
|
||||
settings->setValue("Credential/CertFile", ui->certFileLineEdit->text());
|
||||
settings->setValue("Credential/CertPassword", QString(ui->certPasswordLineEdit->text().toUtf8().toBase64()));
|
||||
|
||||
settings->setValue("Common/AutoStart", ui->autoStartCheckBox->isChecked());
|
||||
settings->setValue("Common/ConnectAfterStart", ui->connectAfterStartCheckBox->isChecked());
|
||||
|
||||
@@ -364,7 +364,7 @@
|
||||
<string>保存的信息</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_6">
|
||||
<item row="3" column="2">
|
||||
<item row="3" column="2" colspan="2">
|
||||
<widget class="QLineEdit" name="totpSecretLineEdit">
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::EchoMode::Password</enum>
|
||||
@@ -381,7 +381,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<item row="1" column="2" colspan="2">
|
||||
<widget class="QLineEdit" name="passwordLineEdit">
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::EchoMode::Password</enum>
|
||||
@@ -391,14 +391,14 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<item row="1" column="4">
|
||||
<widget class="QCheckBox" name="passwordVisibleCheckBox">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2" colspan="2">
|
||||
<item row="0" column="2" colspan="3">
|
||||
<widget class="QLineEdit" name="usernameLineEdit">
|
||||
<property name="placeholderText">
|
||||
<string>VPN 账号</string>
|
||||
@@ -428,7 +428,7 @@
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="3" column="3">
|
||||
<item row="3" column="4">
|
||||
<widget class="QCheckBox" name="totpSecretVisibleCheckBox">
|
||||
<property name="text">
|
||||
<string/>
|
||||
@@ -442,6 +442,51 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="certFileLabel">
|
||||
<property name="text">
|
||||
<string>证书文件</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="2">
|
||||
<widget class="QLineEdit" name="certFileLineEdit">
|
||||
<property name="placeholderText">
|
||||
<string>可选,p12/pfx 证书文件路径</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="3" colspan="2">
|
||||
<widget class="QPushButton" name="certFileBrowseButton">
|
||||
<property name="text">
|
||||
<string>浏览</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="certPasswordLabel">
|
||||
<property name="text">
|
||||
<string>证书密码</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="2" colspan="2">
|
||||
<widget class="QLineEdit" name="certPasswordLineEdit">
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::EchoMode::Password</enum>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>可选,证书密码</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="4">
|
||||
<widget class="QCheckBox" name="certPasswordVisibleCheckBox">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -741,6 +786,10 @@
|
||||
<tabstop>tabWidget</tabstop>
|
||||
<tabstop>usernameLineEdit</tabstop>
|
||||
<tabstop>passwordLineEdit</tabstop>
|
||||
<tabstop>totpSecretLineEdit</tabstop>
|
||||
<tabstop>certFileLineEdit</tabstop>
|
||||
<tabstop>certFileBrowseButton</tabstop>
|
||||
<tabstop>certPasswordLineEdit</tabstop>
|
||||
<tabstop>serverAddressLineEdit</tabstop>
|
||||
<tabstop>serverPortSpinBox</tabstop>
|
||||
<tabstop>dnsLineEdit</tabstop>
|
||||
|
||||
@@ -123,6 +123,8 @@ void ZjuConnectController::start(
|
||||
const QString& udpPortForwarding,
|
||||
const QString& customDNS,
|
||||
const QString& customProxyDomain,
|
||||
const QString& certFile,
|
||||
const QString& certPassword,
|
||||
const QString& extraArguments
|
||||
)
|
||||
{
|
||||
@@ -333,6 +335,18 @@ void ZjuConnectController::start(
|
||||
credentialList.append(totpSecret);
|
||||
}
|
||||
|
||||
if (!certFile.isEmpty())
|
||||
{
|
||||
args.append("-cert-file");
|
||||
args.append(certFile);
|
||||
}
|
||||
|
||||
if (!certPassword.isEmpty())
|
||||
{
|
||||
args.append("-cert-password");
|
||||
args.append(certPassword);
|
||||
}
|
||||
|
||||
zjuConnectProcess->start(program, credentialList + args);
|
||||
zjuConnectProcess->waitForStarted();
|
||||
if (zjuConnectProcess->state() == QProcess::NotRunning)
|
||||
|
||||
@@ -60,6 +60,8 @@ public:
|
||||
const QString& udpPortForwarding,
|
||||
const QString& customDNS,
|
||||
const QString& customProxyDomain,
|
||||
const QString& certFile,
|
||||
const QString& certPassword,
|
||||
const QString& extraArguments
|
||||
);
|
||||
|
||||
|
||||
@@ -183,6 +183,8 @@ void MainWindow::initZjuConnect()
|
||||
settings->value("ZJUConnect/UdpPortForwarding").toString(),
|
||||
settings->value("ZJUConnect/CustomDNS", "").toString(),
|
||||
settings->value("ZJUConnect/CustomProxyDomain", "").toString(),
|
||||
settings->value("Credential/CertFile", "").toString(),
|
||||
QByteArray::fromBase64(settings->value("Credential/CertPassword", "").toString().toUtf8()),
|
||||
settings->value("ZJUConnect/ExtraArguments", "").toString());
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user