refactor: 枚举移入Models目录,命名空间更新为Rainbow.Entity.Models
大石头 authored at 2026-07-02 12:54:58
1.51 KiB
RainbowBridge
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 });
    }
}