/*
* Copyright (c) 2025 Proton AG
*
* This file is part of ProtonVPN.
*
* ProtonVPN 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.
*
* ProtonVPN 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 ProtonVPN. If not, see .
*/
namespace ProtonVPN.Vpn.Management;
///
/// Collection of predefined messages to be send to OpenVPN management interface.
///
public class ManagementMessages
{
public ReceivedManagementMessage ReceivedMessage(string messageText)
{
return new ReceivedManagementMessage(messageText ?? "");
}
public ManagementMessage EchoOn()
{
return ManagementMessage("echo on");
}
public ManagementMessage StateOn()
{
return ManagementMessage("state on");
}
public ManagementMessage Bytecount()
{
return ManagementMessage("bytecount 1");
}
public ManagementMessage LogOn()
{
return ManagementMessage("log on");
}
public ManagementMessage HoldRelease()
{
return ManagementMessage("hold release");
}
public ManagementMessage Username(string username)
{
return ManagementMessage($"username 'Auth' {EscapedString(username)}");
}
public ManagementMessage Password(string password)
{
return ManagementMessage($"password 'Auth' {EscapedString(password)}");
}
public ManagementMessage Disconnect()
{
return ManagementMessage("signal SIGTERM");
}
public ManagementMessage Exit()
{
return ManagementMessage("exit");
}
private ManagementMessage ManagementMessage(string messageText)
{
return new ManagementMessage(messageText);
}
private static string EscapedString(string value)
{
return "\"" + value
.Replace("\\", "\\\\")
.Replace("\"", "\\\"")
.Replace(" ", "\\ ")
+ "\"";
}
}