package cc.mrbird.febs.firewall.controller;
import cc.mrbird.febs.common.annotation.ControllerEndpoint;
import cc.mrbird.febs.common.controller.BaseController;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.firewall.dto.CountryVo;
import cc.mrbird.febs.firewall.dto.SaveCountryRuleDto;
import cc.mrbird.febs.firewall.entity.FirewallCountryRule;
import cc.mrbird.febs.firewall.entity.FirewallSite;
import cc.mrbird.febs.firewall.mapper.FirewallSiteMapper;
import cc.mrbird.febs.firewall.service.IFirewallRuleService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotNull;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 防火墙管理控制器
*
* 提供站点、国家白名单的完整 CRUD + Nginx配置生成 + reload 等管理接口
*
* @author auto-generated
* @date 2026-07-31
*/
@Slf4j
@Validated
@RestController
@RequiredArgsConstructor
@RequestMapping(value = "/admin/firewall")
public class AdminFirewallController extends BaseController {
private final IFirewallRuleService firewallRuleService;
private final FirewallSiteMapper firewallSiteMapper;
// ==================== 站点数据表 CRUD ====================
/**
* 站点分页列表
*/
@GetMapping("/siteList")
public FebsResponse siteList(FirewallSite site, QueryRequest request) {
Map data = getDataTable(firewallRuleService.siteList(site, request));
return new FebsResponse().success().data(data);
}
/**
* 保存/更新站点
*/
@PostMapping("/site/save")
@ControllerEndpoint(operation = "保存防火墙站点")
public FebsResponse saveSite(@Validated FirewallSite site) {
return firewallRuleService.saveSite(site);
}
/**
* 删除站点
*/
@GetMapping("/site/delete/{id}")
@ControllerEndpoint(operation = "删除防火墙站点")
public FebsResponse deleteSite(@PathVariable @NotNull Long id) {
return firewallRuleService.deleteSite(id);
}
/**
* 查询所有启用站点(下拉框用)
*/
@GetMapping("/sites")
public FebsResponse listSites() {
List sites = firewallSiteMapper.selectList(
new LambdaQueryWrapper()
.eq(FirewallSite::getStatus, 1)
);
List