using Microsoft.AspNetCore.Mvc;
using NewLife;
using Rainbow.Services;
namespace Rainbow.Web.Controllers;
/// <summary>OpenVPN 管理 API。通过 systemctl 管理 OpenVPN 服务</summary>
[ApiController]
[Route("api/openvpn")]
public class OpenVpnController : ControllerBase
{
private readonly ShellExecutor _shell;
public OpenVpnController(ShellExecutor shell) => _shell = shell;
/// <summary>获取 OpenVPN 服务状态</summary>
[HttpGet("status")]
public async Task<ActionResult> GetStatus()
{
var result = await _shell.ExecuteAsync("systemctl", "status openvpn");
return Ok(new { running = result.Success, output = result.Stdout });
}
/// <summary>启动 OpenVPN 服务</summary>
[HttpPost("start")]
public async Task<ActionResult> Start()
{
var result = await _shell.ExecuteAsync("systemctl", "start openvpn", true);
return Ok(new { success = result.Success, message = result.Success ? "已启动" : result.Stderr });
}
/// <summary>停止 OpenVPN 服务</summary>
[HttpPost("stop")]
public async Task<ActionResult> Stop()
{
var result = await _shell.ExecuteAsync("systemctl", "stop openvpn", true);
return Ok(new { success = result.Success });
}
/// <summary>重启 OpenVPN 服务</summary>
[HttpPost("restart")]
public async Task<ActionResult> Restart()
{
var result = await _shell.ExecuteAsync("systemctl", "restart openvpn", true);
return Ok(new { success = result.Success });
}
}
|