add xray client id to the clients table
This commit is contained in:
parent
393e289784
commit
3d7a46d058
3 changed files with 127 additions and 13 deletions
|
|
@ -3,6 +3,8 @@
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
|
#include <QUuid>
|
||||||
|
#include <qlogging.h>
|
||||||
|
|
||||||
#include "containers/containers_defs.h"
|
#include "containers/containers_defs.h"
|
||||||
#include "core/controllers/serverController.h"
|
#include "core/controllers/serverController.h"
|
||||||
|
|
@ -13,8 +15,8 @@ XrayConfigurator::XrayConfigurator(std::shared_ptr<Settings> settings, const QSh
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
QString XrayConfigurator::createConfig(const ServerCredentials &credentials, DockerContainer container, const QJsonObject &containerConfig,
|
QString XrayConfigurator::createConfig(const ServerCredentials &credentials, DockerContainer container,
|
||||||
ErrorCode &errorCode)
|
const QJsonObject &containerConfig, ErrorCode &errorCode)
|
||||||
{
|
{
|
||||||
QString config = m_serverController->replaceVars(amnezia::scriptData(ProtocolScriptType::xray_template, container),
|
QString config = m_serverController->replaceVars(amnezia::scriptData(ProtocolScriptType::xray_template, container),
|
||||||
m_serverController->genVarsForScript(credentials, container, containerConfig));
|
m_serverController->genVarsForScript(credentials, container, containerConfig));
|
||||||
|
|
@ -25,11 +27,13 @@ QString XrayConfigurator::createConfig(const ServerCredentials &credentials, Doc
|
||||||
|
|
||||||
QString xrayUuid = m_serverController->getTextFileFromContainer(container, credentials, amnezia::protocols::xray::uuidPath, errorCode);
|
QString xrayUuid = m_serverController->getTextFileFromContainer(container, credentials, amnezia::protocols::xray::uuidPath, errorCode);
|
||||||
xrayUuid.replace("\n", "");
|
xrayUuid.replace("\n", "");
|
||||||
|
qDebug() << "===>> xrayUuid: " << xrayUuid;
|
||||||
QString xrayShortId =
|
QString xrayShortId =
|
||||||
m_serverController->getTextFileFromContainer(container, credentials, amnezia::protocols::xray::shortidPath, errorCode);
|
m_serverController->getTextFileFromContainer(container, credentials, amnezia::protocols::xray::shortidPath, errorCode);
|
||||||
xrayShortId.replace("\n", "");
|
xrayShortId.replace("\n", "");
|
||||||
|
|
||||||
|
QString xrayUserId = QUuid::createUuid().toString(QUuid::WithoutBraces);
|
||||||
|
|
||||||
if (errorCode != ErrorCode::NoError) {
|
if (errorCode != ErrorCode::NoError) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
@ -37,6 +41,8 @@ QString XrayConfigurator::createConfig(const ServerCredentials &credentials, Doc
|
||||||
config.replace("$XRAY_CLIENT_ID", xrayUuid);
|
config.replace("$XRAY_CLIENT_ID", xrayUuid);
|
||||||
config.replace("$XRAY_PUBLIC_KEY", xrayPublicKey);
|
config.replace("$XRAY_PUBLIC_KEY", xrayPublicKey);
|
||||||
config.replace("$XRAY_SHORT_ID", xrayShortId);
|
config.replace("$XRAY_SHORT_ID", xrayShortId);
|
||||||
|
config.replace("$XRAY_USER_ID", xrayUserId);
|
||||||
|
|
||||||
|
qDebug() << "===>> xrayUserId: " << xrayUserId;
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,8 @@ ErrorCode ClientManagementModel::updateModel(const DockerContainer container, co
|
||||||
error = getOpenVpnClients(container, credentials, serverController, count);
|
error = getOpenVpnClients(container, credentials, serverController, count);
|
||||||
} else if (container == DockerContainer::WireGuard || container == DockerContainer::Awg) {
|
} else if (container == DockerContainer::WireGuard || container == DockerContainer::Awg) {
|
||||||
error = getWireGuardClients(container, credentials, serverController, count);
|
error = getWireGuardClients(container, credentials, serverController, count);
|
||||||
|
} else if (container == DockerContainer::Xray) {
|
||||||
|
error = getXrayClients(container, credentials, serverController, count);
|
||||||
}
|
}
|
||||||
if (error != ErrorCode::NoError) {
|
if (error != ErrorCode::NoError) {
|
||||||
endResetModel();
|
endResetModel();
|
||||||
|
|
@ -232,6 +234,35 @@ ErrorCode ClientManagementModel::getWireGuardClients(const DockerContainer conta
|
||||||
}
|
}
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
ErrorCode ClientManagementModel::getXrayClients(const DockerContainer container, const ServerCredentials& credentials,
|
||||||
|
const QSharedPointer<ServerController> &serverController, int &count)
|
||||||
|
{
|
||||||
|
ErrorCode error = ErrorCode::NoError;
|
||||||
|
|
||||||
|
const QString xrayClientIdFile = QStringLiteral("/opt/amnezia/xray/xray_uuid.key");
|
||||||
|
const QString xrayClientId = serverController->getTextFileFromContainer(container, credentials, xrayClientIdFile, error);
|
||||||
|
if (error != ErrorCode::NoError) {
|
||||||
|
logger.error() << "Failed to get the xray client id file from the server";
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
QStringList xrayClientIds { xrayClientId };
|
||||||
|
|
||||||
|
for (auto &xrayClientId : xrayClientIds) {
|
||||||
|
if (!isClientExists(xrayClientId)) {
|
||||||
|
QJsonObject client;
|
||||||
|
client[configKey::clientId] = xrayClientId;
|
||||||
|
|
||||||
|
QJsonObject userData;
|
||||||
|
userData[configKey::clientName] = QStringLiteral("Client %1").arg(count);
|
||||||
|
userData[configKey::userData] = userData;
|
||||||
|
|
||||||
|
m_clientsTable.push_back(client);
|
||||||
|
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
ErrorCode ClientManagementModel::wgShow(const DockerContainer container, const ServerCredentials &credentials,
|
ErrorCode ClientManagementModel::wgShow(const DockerContainer container, const ServerCredentials &credentials,
|
||||||
const QSharedPointer<ServerController> &serverController, std::vector<WgShowData> &data)
|
const QSharedPointer<ServerController> &serverController, std::vector<WgShowData> &data)
|
||||||
|
|
@ -413,10 +444,27 @@ ErrorCode ClientManagementModel::revokeClient(const int row, const DockerContain
|
||||||
auto client = m_clientsTable.at(row).toObject();
|
auto client = m_clientsTable.at(row).toObject();
|
||||||
QString clientId = client.value(configKey::clientId).toString();
|
QString clientId = client.value(configKey::clientId).toString();
|
||||||
|
|
||||||
if (container == DockerContainer::OpenVpn || container == DockerContainer::ShadowSocks || container == DockerContainer::Cloak) {
|
switch(container)
|
||||||
errorCode = revokeOpenVpn(row, container, credentials, serverIndex, serverController);
|
{
|
||||||
} else if (container == DockerContainer::WireGuard || container == DockerContainer::Awg) {
|
case DockerContainer::OpenVpn:
|
||||||
errorCode = revokeWireGuard(row, container, credentials, serverController);
|
case DockerContainer::ShadowSocks:
|
||||||
|
case DockerContainer::Cloak: {
|
||||||
|
errorCode = revokeOpenVpn(row, container, credentials, serverIndex, serverController);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DockerContainer::WireGuard:
|
||||||
|
case DockerContainer::Awg: {
|
||||||
|
errorCode = revokeWireGuard(row, container, credentials, serverController);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DockerContainer::Xray: {
|
||||||
|
errorCode = revokeXray(row, container, credentials, serverController);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
logger.warning() << "Unknown container type was received";
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (errorCode == ErrorCode::NoError) {
|
if (errorCode == ErrorCode::NoError) {
|
||||||
|
|
@ -454,13 +502,26 @@ ErrorCode ClientManagementModel::revokeClient(const QJsonObject &containerConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
Proto protocol;
|
Proto protocol;
|
||||||
if (container == DockerContainer::ShadowSocks || container == DockerContainer::Cloak) {
|
|
||||||
|
switch(container)
|
||||||
|
{
|
||||||
|
case DockerContainer::ShadowSocks:
|
||||||
|
case DockerContainer::Cloak: {
|
||||||
protocol = Proto::OpenVpn;
|
protocol = Proto::OpenVpn;
|
||||||
} else if (container == DockerContainer::OpenVpn || container == DockerContainer::WireGuard || container == DockerContainer::Awg) {
|
break;
|
||||||
|
}
|
||||||
|
case DockerContainer::OpenVpn:
|
||||||
|
case DockerContainer::WireGuard:
|
||||||
|
case DockerContainer::Awg:
|
||||||
|
case DockerContainer::Xray: {
|
||||||
protocol = ContainerProps::defaultProtocol(container);
|
protocol = ContainerProps::defaultProtocol(container);
|
||||||
} else {
|
break;
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
logger.warning() << "Unknown container type was received";
|
||||||
return ErrorCode::NoError;
|
return ErrorCode::NoError;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
auto protocolConfig = ContainerProps::getProtocolConfigFromContainer(protocol, containerConfig);
|
auto protocolConfig = ContainerProps::getProtocolConfigFromContainer(protocol, containerConfig);
|
||||||
|
|
||||||
|
|
@ -478,11 +539,28 @@ ErrorCode ClientManagementModel::revokeClient(const QJsonObject &containerConfig
|
||||||
return errorCode;
|
return errorCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (container == DockerContainer::OpenVpn || container == DockerContainer::ShadowSocks || container == DockerContainer::Cloak) {
|
switch (container)
|
||||||
|
{
|
||||||
|
case DockerContainer::OpenVpn:
|
||||||
|
case DockerContainer::ShadowSocks:
|
||||||
|
case DockerContainer::Cloak: {
|
||||||
errorCode = revokeOpenVpn(row, container, credentials, serverIndex, serverController);
|
errorCode = revokeOpenVpn(row, container, credentials, serverIndex, serverController);
|
||||||
} else if (container == DockerContainer::WireGuard || container == DockerContainer::Awg) {
|
break;
|
||||||
errorCode = revokeWireGuard(row, container, credentials, serverController);
|
|
||||||
}
|
}
|
||||||
|
case DockerContainer::WireGuard:
|
||||||
|
case DockerContainer::Awg: {
|
||||||
|
errorCode = revokeWireGuard(row, container, credentials, serverController);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DockerContainer::Xray: {
|
||||||
|
errorCode = revokeXray(row, container, credentials, serverController);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
logger.warning() << "Unknown container type was received";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return errorCode;
|
return errorCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -585,6 +663,32 @@ ErrorCode ClientManagementModel::revokeWireGuard(const int row, const DockerCont
|
||||||
return ErrorCode::NoError;
|
return ErrorCode::NoError;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ErrorCode ClientManagementModel::revokeXray(const int row,
|
||||||
|
const DockerContainer container,
|
||||||
|
const ServerCredentials &credentials,
|
||||||
|
const QSharedPointer<ServerController> &serverController)
|
||||||
|
{
|
||||||
|
ErrorCode error = ErrorCode::NoError;
|
||||||
|
|
||||||
|
const QString xrayClientIdFile = QStringLiteral("/opt/amnezia/xray/xray_uuid.key");
|
||||||
|
const QString xrayClientId = serverController->getTextFileFromContainer(container, credentials, xrayClientIdFile, error);
|
||||||
|
if (error != ErrorCode::NoError) {
|
||||||
|
logger.error() << "Failed to get the xray client id file from the server";
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto client = m_clientsTable.at(row).toObject();
|
||||||
|
QString clientId = client.value(configKey::clientId).toString();
|
||||||
|
|
||||||
|
// remove from /opt/amnezia/xray/server.json
|
||||||
|
|
||||||
|
beginRemoveRows(QModelIndex(), row, row);
|
||||||
|
m_clientsTable.removeAt(row);
|
||||||
|
endRemoveRows();
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
QHash<int, QByteArray> ClientManagementModel::roleNames() const
|
QHash<int, QByteArray> ClientManagementModel::roleNames() const
|
||||||
{
|
{
|
||||||
QHash<int, QByteArray> roles;
|
QHash<int, QByteArray> roles;
|
||||||
|
|
|
||||||
|
|
@ -62,11 +62,15 @@ private:
|
||||||
const QSharedPointer<ServerController> &serverController);
|
const QSharedPointer<ServerController> &serverController);
|
||||||
ErrorCode revokeWireGuard(const int row, const DockerContainer container, const ServerCredentials &credentials,
|
ErrorCode revokeWireGuard(const int row, const DockerContainer container, const ServerCredentials &credentials,
|
||||||
const QSharedPointer<ServerController> &serverController);
|
const QSharedPointer<ServerController> &serverController);
|
||||||
|
ErrorCode revokeXray(const int row, const DockerContainer container, const ServerCredentials &credentials,
|
||||||
|
const QSharedPointer<ServerController> &serverController);
|
||||||
|
|
||||||
ErrorCode getOpenVpnClients(const DockerContainer container, const ServerCredentials &credentials,
|
ErrorCode getOpenVpnClients(const DockerContainer container, const ServerCredentials &credentials,
|
||||||
const QSharedPointer<ServerController> &serverController, int &count);
|
const QSharedPointer<ServerController> &serverController, int &count);
|
||||||
ErrorCode getWireGuardClients(const DockerContainer container, const ServerCredentials &credentials,
|
ErrorCode getWireGuardClients(const DockerContainer container, const ServerCredentials &credentials,
|
||||||
const QSharedPointer<ServerController> &serverController, int &count);
|
const QSharedPointer<ServerController> &serverController, int &count);
|
||||||
|
ErrorCode getXrayClients(const DockerContainer container, const ServerCredentials& credentials,
|
||||||
|
const QSharedPointer<ServerController> &serverController, int &count);
|
||||||
|
|
||||||
ErrorCode wgShow(const DockerContainer container, const ServerCredentials &credentials,
|
ErrorCode wgShow(const DockerContainer container, const ServerCredentials &credentials,
|
||||||
const QSharedPointer<ServerController> &serverController, std::vector<WgShowData> &data);
|
const QSharedPointer<ServerController> &serverController, std::vector<WgShowData> &data);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue