added wireguard key revocation

This commit is contained in:
vladimir.kuznetsov 2023-01-16 20:24:37 +03:00
parent 3f99c52349
commit 3a210c5bab
2 changed files with 52 additions and 1 deletions

View file

@ -64,17 +64,19 @@ void ClientInfoLogic::onLineEditNameAliasEditingFinished()
model->setData(modelIndex, m_lineEditNameAliasText, ClientManagementModel::ClientRoles::NameRole); model->setData(modelIndex, m_lineEditNameAliasText, ClientManagementModel::ClientRoles::NameRole);
const DockerContainer selectedContainer = m_settings->defaultContainer(uiLogic()->selectedServerIndex); const DockerContainer selectedContainer = m_settings->defaultContainer(uiLogic()->selectedServerIndex);
const ServerCredentials credentials = m_settings->serverCredentials(uiLogic()->selectedServerIndex);
const QVector<amnezia::Proto> protocols = ContainerProps::protocolsForContainer(selectedContainer); const QVector<amnezia::Proto> protocols = ContainerProps::protocolsForContainer(selectedContainer);
if (!protocols.empty()) { if (!protocols.empty()) {
const Proto currentMainProtocol = protocols.front(); const Proto currentMainProtocol = protocols.front();
const QJsonObject clientsTable = model->getContent(currentMainProtocol); const QJsonObject clientsTable = model->getContent(currentMainProtocol);
ErrorCode error = m_serverController->setClientsList(m_settings->serverCredentials(uiLogic()->selectedServerIndex), ErrorCode error = m_serverController->setClientsList(credentials,
selectedContainer, selectedContainer,
currentMainProtocol, currentMainProtocol,
clientsTable); clientsTable);
isErrorOccured(error); isErrorOccured(error);
} }
m_serverController->disconnectFromHost(credentials);
set_busyIndicatorIsRunning(false); set_busyIndicatorIsRunning(false);
} }
@ -123,10 +125,58 @@ void ClientInfoLogic::onRevokeOpenVpnCertificateClicked()
set_busyIndicatorIsRunning(false); set_busyIndicatorIsRunning(false);
return; return;
} }
m_serverController->disconnectFromHost(credentials);
set_busyIndicatorIsRunning(false); set_busyIndicatorIsRunning(false);
} }
void ClientInfoLogic::onRevokeWireGuardKeyClicked() void ClientInfoLogic::onRevokeWireGuardKeyClicked()
{ {
set_busyIndicatorIsRunning(true);
ErrorCode error;
const DockerContainer container = m_settings->defaultContainer(uiLogic()->selectedServerIndex);
const ServerCredentials credentials = m_settings->serverCredentials(uiLogic()->selectedServerIndex);
const QString wireGuardConfigFile = "opt/amnezia/wireguard/wg0.conf";
const QString wireguardConfigString = m_serverController->getTextFileFromContainer(container, credentials, wireGuardConfigFile, &error);
if (isErrorOccured(error)) {
set_busyIndicatorIsRunning(false);
return;
}
auto model = qobject_cast<ClientManagementModel*>(uiLogic()->clientManagementModel());
const QModelIndex modelIndex = model->index(m_currentClientIndex);
const QString key = model->data(modelIndex, ClientManagementModel::ClientRoles::WireGuardPublicKey).toString();
auto configSections = wireguardConfigString.split("[", Qt::SkipEmptyParts);
for (auto &section : configSections) {
if (section.contains(key)) {
configSections.removeOne(section);
}
}
QString newWireGuardConfig = configSections.join("[");
newWireGuardConfig.insert(0, "[");
error = m_serverController->uploadTextFileToContainer(container, credentials, newWireGuardConfig,
protocols::wireguard::serverConfigPath,
QSsh::SftpOverwriteMode::SftpOverwriteExisting);
if (isErrorOccured(error)) {
set_busyIndicatorIsRunning(false);
return;
}
model->removeRows(m_currentClientIndex);
const QJsonObject clientsTable = model->getContent(Proto::WireGuard);
error = m_serverController->setClientsList(credentials, container, Proto::WireGuard, clientsTable);
if (isErrorOccured(error)) {
set_busyIndicatorIsRunning(false);
return;
}
error = m_serverController->runScript(credentials,
m_serverController->replaceVars("sudo docker exec -i $CONTAINER_NAME bash -c 'wg syncconf wg0 <(wg-quick strip /opt/amnezia/wireguard/wg0.conf)'",
m_serverController->genVarsForScript(credentials, container)));
if (isErrorOccured(error)) {
set_busyIndicatorIsRunning(false);
return;
}
m_serverController->disconnectFromHost(credentials);
set_busyIndicatorIsRunning(false);
} }

View file

@ -92,6 +92,7 @@ PageClientInfoBase {
text: qsTr("Revoke Key") text: qsTr("Revoke Key")
onClicked: { onClicked: {
ClientInfoLogic.onRevokeWireGuardKeyClicked() ClientInfoLogic.onRevokeWireGuardKeyClicked()
UiLogic.closePage()
} }
} }
} }