diff --git a/neutrino-proxy-admin/src/api/securityGroup.js b/neutrino-proxy-admin/src/api/securityGroup.js new file mode 100644 index 00000000..c9456516 --- /dev/null +++ b/neutrino-proxy-admin/src/api/securityGroup.js @@ -0,0 +1,97 @@ +import request from '@/utils/request' + +const baseUri = '/security'; + +export function fetchGroupList() { + return request({ + url: `${baseUri}/group/s`, + method: 'get' + }) +} + +export function fetchGroupOne(groupId) { + return request({ + url: `${baseUri}/group/getOne?groupId=${groupId}`, + method: 'get' + }) +} + +export function createGroup(data) { + return request({ + url: `${baseUri}/group/create`, + method: 'post', + data + }) +} + +export function updateGroup(data) { + return request({ + url: `${baseUri}/group/update`, + method: 'post', + data + }) +} + +export function deleteGroup(groupId) { + return request({ + url: `${baseUri}/group/delete?groupId=${groupId}`, + method: 'post' + }) +} + +export function enableGroup(groupId) { + return request({ + url: `${baseUri}/group/enable?groupId=${groupId}`, + method: 'post' + }) +} + +export function disableGroup(groupId) { + return request({ + url: `${baseUri}/group/disable?groupId=${groupId}`, + method: 'post' + }) +} + +export function fetchRuleList(groupId) { + return request({ + url: `${baseUri}/rule/s?groupId=${groupId}`, + method: 'get' + }) +} + +export function createRule(data) { + return request({ + url: `${baseUri}/rule/create`, + method: 'post', + data + }) +} + +export function updateRule(data) { + return request({ + url: `${baseUri}/rule/update`, + method: 'post', + data + }) +} +export function deleteRule(ruleId) { + return request({ + url: `${baseUri}/rule/delete?ruleId=${ruleId}`, + method: 'post' + }) +} + +export function enableRule(ruleId) { + return request({ + url: `${baseUri}/rule/enable?ruleId=${ruleId}`, + method: 'post' + }) +} + +export function disableRule(ruleId) { + return request({ + url: `${baseUri}/rule/disable?ruleId=${ruleId}`, + method: 'post' + }) +} \ No newline at end of file diff --git a/neutrino-proxy-admin/src/lang/zh.js b/neutrino-proxy-admin/src/lang/zh.js index 4cc16d9b..27ed91f5 100644 --- a/neutrino-proxy-admin/src/lang/zh.js +++ b/neutrino-proxy-admin/src/lang/zh.js @@ -48,6 +48,8 @@ export default { user: '用户管理', system: '系统管理', portPool: '端口池管理', + securityGroup: '安全组管理', + securityRule: '安全规则管理', portGroup: '端口分组管理', protocal: '协议管理', proxy: '代理配置', @@ -128,6 +130,7 @@ export default { confirm: '确 定', userId: '用户ID', userName: '用户名', + name: '名称', group: '分组', groupName: '分组名称', groupPossessor: '分组所属', @@ -169,7 +172,17 @@ export default { totalFlow: '总流量', protocalName: '协议', supportStatus: '支持状态', - domainName: '域名' + domainName: '域名', + defaultPassType: '默认放行类型', + ruleName: '规则名称', + rule: '规则内容', + passType: '放行类型', + priority: '优先级', + ruleConfig: '规则配置', + portMappingBindSecurityGroup: '绑定安全组', + securityGroupBindPortMapping: '绑定端口映射', + bind: '绑定', + unbind: '解绑' }, button: { lookOver: '查看' diff --git a/neutrino-proxy-admin/src/router/index.js b/neutrino-proxy-admin/src/router/index.js index 3c246651..47a870f2 100644 --- a/neutrino-proxy-admin/src/router/index.js +++ b/neutrino-proxy-admin/src/router/index.js @@ -77,6 +77,8 @@ export const asyncRouterMap = [ { path: 'user', component: _import('system/user'), name: 'user', meta: { title: 'user' }}, { path: 'portGroup', component: _import('system/portGroup'), name: 'portGroup', meta: { title: 'portGroup' }}, { path: 'portPool', component: _import('system/portPool'), name: 'portPool', meta: { title: 'portPool' }}, + { path: 'securityGroup', component: _import('system/securityGroup'), name: 'securityGroup', meta: { title: 'securityGroup' }}, + { path: 'securityRule', component: _import('system/securityRule'), name: 'securityRule', meta: { title: 'securityRule' }, hidden: true}, { path: 'protocal', component: _import('system/protocal'), name: 'protocal', meta: { title: 'protocal' }}, { path: 'jobManager', component: _import('system/jobManager'), name: 'jobManager', meta: { title: 'jobManager' }} ] diff --git a/neutrino-proxy-admin/src/views/system/securityGroup.vue b/neutrino-proxy-admin/src/views/system/securityGroup.vue new file mode 100644 index 00000000..dea5b8d6 --- /dev/null +++ b/neutrino-proxy-admin/src/views/system/securityGroup.vue @@ -0,0 +1,310 @@ + + + + {{$t('table.add')}} + + + + + + + {{scope.row.id}} + + + + + {{scope.row.name}} + + + + + {{scope.row.description}} + + + + + {{scope.row.defaultPassType}} + + + + + {{scope.row.createTime}} + + + + + {{scope.row.updateTime}} + + + + + {{scope.row.enable}} + {{scope.row.enable}} + + + + + {{$t('table.edit')}} + {{$t('table.disable')}} + {{$t('table.enable')}} + + + {{$t('table.ruleConfig')}} + {{$t('table.securityGroupBindPortMapping')}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{$t('table.confirm')}} + + + + + + + + {{scope.row.id}} + + + + + {{scope.row.name}} + + + + + {{scope.row.description}} + + + + + {{scope.row.defaultPassType}} + + + + + {{$t('table.bind')}} + {{$t('table.unbind')}} + + + + + + + + + diff --git a/neutrino-proxy-admin/src/views/system/securityRule.vue b/neutrino-proxy-admin/src/views/system/securityRule.vue new file mode 100644 index 00000000..dfeda98e --- /dev/null +++ b/neutrino-proxy-admin/src/views/system/securityRule.vue @@ -0,0 +1,349 @@ + + + + + {{group.name}}安全组 + {{group.description}} + + + + {{$t('table.add')}} + + + + + + + {{scope.row.id}} + + + + + {{scope.row.name}} + + + + + {{scope.row.description}} + + + + + {{scope.row.rule}} + + + + + {{scope.row.passType}} + {{scope.row.passType}} + + + + + {{scope.row.priority}} + + + + + {{scope.row.createTime}} + + + + + {{scope.row.updateTime}} + + + + + {{scope.row.enable}} + {{scope.row.enable}} + + + + + {{$t('table.edit')}} + {{$t('table.disable')}} + {{$t('table.enable')}} + + + + + + + + + + + + + + + + + + + + + + 规则描述: + 单个ip:192.168.1.1,0:0:0:0:0:0:10.0.0.1, ipv6只支持单个ip判断 + 范围类型:192.168.1.0-192.168.1.255 + 掩码类型:192.168.1.0/24 + 泛型:0.0.0.0/ALL + 每个类型中间以英文逗号分隔,形如 192.168.1.1,192.168.3.0/24 是正确的 + + + + + + + + + + + + + + + + + + + + + + + + + + {{$t('table.confirm')}} + + + + + + + diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/constant/SecurityRulePassTypeEnum.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/constant/SecurityRulePassTypeEnum.java index 60991e30..07cd72c9 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/constant/SecurityRulePassTypeEnum.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/constant/SecurityRulePassTypeEnum.java @@ -6,9 +6,9 @@ import lombok.Getter; @AllArgsConstructor @Getter public enum SecurityRulePassTypeEnum { - DENY(-1, "DENY"), + DENY(0, "deny"), ALLOW(1, "allow"), - NONE(0, "none") + NONE(-1, "none") ; private final Integer code; diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/controller/SecurityController.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/controller/SecurityController.java index 0fb1b157..18dc335e 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/controller/SecurityController.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/controller/SecurityController.java @@ -36,6 +36,12 @@ public class SecurityController { return groupDOList.stream().map(SecurityGroupDO::toRes).collect(Collectors.toList()); } + @Get + @Mapping("/group/getOne") + public SecurityGroupRes getGroupOne(Integer groupId) { + return groupService.queryGroupOne(groupId).toRes(); + } + @Post @Mapping("/group/create") public void createGroup(SecurityGroupCreateReq req) { @@ -50,7 +56,7 @@ public class SecurityController { /** * 将级联删除对应规则,并更新缓存 - * @param groupId + * @param groupId 安全组Id */ @Post @Mapping("/group/delete") diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/SecurityGroupService.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/SecurityGroupService.java index d0c49abc..88732379 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/SecurityGroupService.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/SecurityGroupService.java @@ -61,6 +61,10 @@ public class SecurityGroupService { .eq(SecurityGroupDO::getUserId, SystemContextHolder.getUserId())); } + public SecurityGroupDO queryGroupOne(Integer groupId) { + return securityGroupMapper.selectById(groupId); + } + public void createGroup(SecurityGroupCreateReq req) { SecurityGroupDO groupDO = new SecurityGroupDO(); BeanUtil.copyProperties(req, groupDO); @@ -80,8 +84,8 @@ public class SecurityGroupService { } public void setGroupStatus(Integer groupId, EnableStatusEnum statusEnum) { - SecurityGroupDO groupDO = securityGroupMap.get(groupId); - if (groupDO == null || groupDO.getEnable() == EnableStatusEnum.DISABLE) { + SecurityGroupDO groupDO = securityGroupMapper.selectById(groupId); + if (groupDO == null) { throw new RuntimeException("指定的安全组不存在"); } groupDO.setEnable(statusEnum);