mirror of
https://gitee.com/xiarenalofs/squad-rain-ops-mini.git
synced 2026-08-08 14:25:33 +08:00
122 lines
5.5 KiB
C#
122 lines
5.5 KiB
C#
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using RainOpsMini.Services;
|
|
using RainOpsMini.Models;
|
|
using RainOpsMini.Plugins;
|
|
using RainOpsMini.Helpers;
|
|
using System.IO;
|
|
using System.Threading.Tasks;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace RainOpsMini.Apis
|
|
{
|
|
public static class FrpApi
|
|
{
|
|
public static void MapFrpApis(this IEndpointRouteBuilder app)
|
|
{
|
|
// API: 获取 FRP 状态
|
|
// 返回 FRP 进程是否运行、PID、启动时间等
|
|
app.MapGet("/api/frp/status", (FrpManager frp) =>
|
|
{
|
|
return Results.Ok(new
|
|
{
|
|
isRunning = frp.IsRunning,
|
|
processId = frp.ProcessId,
|
|
startTime = frp.StartTime,
|
|
autoRestartEnabled = frp.AutoRestartEnabled,
|
|
restartIntervalMinutes = frp.RestartIntervalMinutes,
|
|
nextRestartTime = frp.NextRestartTime
|
|
});
|
|
});
|
|
|
|
// API: 启动 FRP
|
|
// 手动启动 FRP 进程
|
|
app.MapPost("/api/frp/start", (FrpManager frp, HttpContext ctx) =>
|
|
{
|
|
if (!ctx.User.HasClaim("Permission", "frp.manage") && !ctx.User.HasClaim("Permission", "all") && ctx.User.FindFirst("IsSuperAdmin")?.Value != "true") return Results.Unauthorized();
|
|
try
|
|
{
|
|
frp.Start();
|
|
return Results.Ok(new { message = "FRP started" });
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return Results.BadRequest(new { error = ex.Message });
|
|
}
|
|
});
|
|
|
|
// API: 停止 FRP
|
|
// 手动停止 FRP 进程
|
|
app.MapPost("/api/frp/stop", (FrpManager frp, HttpContext ctx) =>
|
|
{
|
|
if (!ctx.User.HasClaim("Permission", "frp.manage") && !ctx.User.HasClaim("Permission", "all") && ctx.User.FindFirst("IsSuperAdmin")?.Value != "true") return Results.Unauthorized();
|
|
frp.Stop();
|
|
return Results.Ok(new { message = "FRP stopped" });
|
|
});
|
|
|
|
// API: 重启 FRP
|
|
// 手动重启 FRP 进程
|
|
app.MapPost("/api/frp/restart", (FrpManager frp, HttpContext ctx) =>
|
|
{
|
|
if (!ctx.User.HasClaim("Permission", "frp.manage") && !ctx.User.HasClaim("Permission", "all") && ctx.User.FindFirst("IsSuperAdmin")?.Value != "true") return Results.Unauthorized();
|
|
try
|
|
{
|
|
frp.Restart();
|
|
return Results.Ok(new { message = "FRP restarted" });
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return Results.BadRequest(new { error = ex.Message });
|
|
}
|
|
});
|
|
|
|
// API: 获取 FRP 配置
|
|
// 读取 frpc.ini 内容
|
|
app.MapGet("/api/frp/config", (FrpManager frp, HttpContext ctx) =>
|
|
{
|
|
if (!ctx.User.HasClaim("Permission", "frp.manage") && !ctx.User.HasClaim("Permission", "all") && ctx.User.FindFirst("IsSuperAdmin")?.Value != "true") return Results.Unauthorized();
|
|
return Results.Ok(new { content = frp.GetConfig() });
|
|
});
|
|
|
|
// API: 保存 FRP 配置
|
|
// 写入 frpc.ini 内容
|
|
app.MapPost("/api/frp/config", (FrpManager frp, FrpConfigModel model, HttpContext ctx) =>
|
|
{
|
|
if (!ctx.User.HasClaim("Permission", "frp.manage") && !ctx.User.HasClaim("Permission", "all") && ctx.User.FindFirst("IsSuperAdmin")?.Value != "true") return Results.Unauthorized();
|
|
if (string.IsNullOrEmpty(model.Content)) return Results.BadRequest(new { error = "Content is empty" });
|
|
frp.SaveConfig(model.Content);
|
|
return Results.Ok(new { message = "Config saved" });
|
|
});
|
|
|
|
// API: 保存 FRP 设置
|
|
// 更新 FRP 自动重启策略
|
|
app.MapPost("/api/frp/settings", (FrpManager frp, FrpSettingsModel model, HttpContext ctx) =>
|
|
{
|
|
if (!ctx.User.HasClaim("Permission", "frp.manage") && !ctx.User.HasClaim("Permission", "all") && ctx.User.FindFirst("IsSuperAdmin")?.Value != "true") return Results.Unauthorized();
|
|
frp.SetAutoRestart(model.AutoRestartEnabled, model.RestartIntervalMinutes);
|
|
return Results.Ok(new { message = "Settings saved" });
|
|
});
|
|
|
|
// API: 获取 FRP 日志
|
|
// 返回最近的 FRP 运行日志
|
|
app.MapGet("/api/frp/logs", (FrpManager frp, HttpContext ctx) =>
|
|
{
|
|
if (!ctx.User.HasClaim("Permission", "frp.manage") && !ctx.User.HasClaim("Permission", "all") && ctx.User.FindFirst("IsSuperAdmin")?.Value != "true") return Results.Unauthorized();
|
|
return Results.Ok(frp.GetLogs());
|
|
});
|
|
|
|
// API: 清空 FRP 日志
|
|
// 清除内存中的 FRP 日志
|
|
app.MapPost("/api/frp/logs/clear", (FrpManager frp, HttpContext ctx) =>
|
|
{
|
|
if (!ctx.User.HasClaim("Permission", "frp.manage") && !ctx.User.HasClaim("Permission", "all") && ctx.User.FindFirst("IsSuperAdmin")?.Value != "true") return Results.Unauthorized();
|
|
frp.ClearLogs();
|
|
return Results.Ok(new { message = "Logs cleared" });
|
|
});
|
|
}
|
|
}
|
|
}
|