Skip to content

Commit

Permalink
支持选择v2ray 节点,计划支持trojan 做前期工作
Browse files Browse the repository at this point in the history
  • Loading branch information
tokyohost committed Nov 19, 2024
1 parent cd1139a commit 904a5a8
Show file tree
Hide file tree
Showing 16 changed files with 286 additions and 14 deletions.
2 changes: 1 addition & 1 deletion ruoyi-admin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.5.15</version>
<configuration>
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
<fork>false</fork> <!-- 如果没有该配置,devtools不会生效 -->
</configuration>
<executions>
<execution>
Expand Down
14 changes: 12 additions & 2 deletions ruoyi-ui/src/api/system/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,16 @@ export function listServer(query) {
return request({
url: '/system/server/list',
method: 'get',
params: query
params: query,
timeout:90000
})
}
export function listAllServer(query) {
return request({
url: '/system/server/listAll',
method: 'get',
params: query
params: query,
timeout:45000
})
}

Expand All @@ -23,6 +25,14 @@ export function getServer(id) {
method: 'get'
})
}
export function getNodeList(type) {
return request({
url: '/system/server/queryV2NodeList',
method: 'get',
params:{nodeType:type},
timeout:90000
})
}
export function checkInstallStatus(id) {
return request({
url: '/system/server/checkInstallStatus/' + id,
Expand Down
55 changes: 49 additions & 6 deletions ruoyi-ui/src/views/system/server/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -141,10 +141,28 @@
<el-input v-model="form.user" placeholder="请输入user" />
</el-form-item>
<el-form-item label="密码" prop="passwd">
<el-input v-model="form.passwd" placeholder="请输入passwd" />
<el-input v-model="form.passwd" placeholder="请输入passwd" show-password />
</el-form-item>
<el-form-item label="nodeId" prop="nodeId">
<el-input v-model="form.nodeId" placeholder="请输入nodeId" />
<el-form-item label="节点类型" prop="nodeType">
<el-select v-model="form.nodeType" placeholder="请选择" @change="nodeTypeChange" clearable>
<el-option
v-for="item in nodeTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value" >
</el-option>
</el-select>
</el-form-item>
<el-form-item label="绑定节点" prop="nodeId">
<!-- <el-input v-model="form.nodeId" placeholder="请输入nodeId" />-->
<el-select v-model="form.nodeId" placeholder="请选择绑定节点" clearable>
<el-option
v-for="item in nodeList"
:key="item.nodeId"
:label="item.name"
:value="item.nodeId" >
</el-option>
</el-select>
</el-form-item>
<el-form-item label="XrayR 配置文件路径" prop="filePath">
<el-input v-model="form.filePath" placeholder="/etc/XrayR/config.yml" />
Expand Down Expand Up @@ -219,7 +237,7 @@ import {
addServer,
updateServer,
checkInstallStatus,
installStatus, quickHostReplace, updateVersion
installStatus, quickHostReplace, updateVersion, getNodeList
} from '@/api/system/server'
import { Loading } from 'element-ui'
import { listDomainAll } from '@/api/system/domain'
Expand Down Expand Up @@ -269,7 +287,16 @@ export default {
nodeId: null
},
// 表单参数
form: {},
form: {
filePath:"/etc/XrayR/config.yml"
},
nodeTypeOptions: [
{
value: 'vmess',
label: 'vmess'
},
],
nodeList: [],
formQuickHost: {
zoneName: '',
name: '',
Expand All @@ -286,6 +313,9 @@ export default {
user: [
{ required: true, message: '请输入用户名', trigger: 'blur' },
],
nodeType: [
{ required: true, message: '请选择节点类型', trigger: 'blur' },
],
passwd: [
{ required: true, message: '请输入密码', trigger: 'blur' },
],
Expand Down Expand Up @@ -324,6 +354,18 @@ export default {
this.loading = false;
});
},
nodeTypeChange(value) {
console.log(value)
let loadingInstance = Loading.service({ fullscreen: true });
getNodeList(value).then((res)=>{
console.log(res)
this.nodeList = res.data
loadingInstance.close();
}).catch((e)=>{
this.$message.error("查询失败")
loadingInstance.close();
})
},
cancelQuick() {
this.form = {}
this.formQuickHost = {}
Expand Down Expand Up @@ -364,7 +406,8 @@ export default {
port: null,
user: null,
passwd: null,
nodeId: null
nodeId: null,
filePath: "/etc/XrayR/config.yml"
};
this.resetForm("form");
},
Expand Down
4 changes: 4 additions & 0 deletions sql/1.2.0-update.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ALTER TABLE `v2_server`
ADD COLUMN `node_type` varchar(255) NULL COMMENT '节点类型' AFTER `remark`;

update v2_server set node_type = 'vmess' where 1=1
27 changes: 27 additions & 0 deletions v2node/src/main/java/com/ruoyi/system/constant/NodeTypeEnum.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.ruoyi.system.constant;

/**
* @author xuehui_li
* @Version 1.0
* @date 2024/11/19 9:45
* @Content
*/

public enum NodeTypeEnum {
VMESS("vmess");

String type;

NodeTypeEnum(String type) {
this.type = type;
}

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,15 @@ public AjaxResult quickHostReplace(@RequestBody V2Dns data)
public AjaxResult add(@RequestBody V2Server v2Server)
{
return toAjax(v2ServerService.insertV2Server(v2Server));
} /**
* 新增【请填写功能名称】
*/
@PreAuthorize("@ss.hasPermi('system:server:queryV2NodeList')")
@GetMapping(value = "/queryV2NodeList")
public AjaxResult queryV2NodeList( V2Server v2Server)
{

return v2ServerService.queryNodeList(v2Server);
}

/**
Expand All @@ -164,4 +173,6 @@ public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(v2ServerService.deleteV2ServerByIds(ids));
}


}
19 changes: 19 additions & 0 deletions v2node/src/main/java/com/ruoyi/system/domain/NodeVo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.ruoyi.system.domain;

import lombok.Data;

/**
* @author xuehui_li
* @Version 1.0
* @date 2024/11/19 9:39
* @Content
*/
@Data
public class NodeVo {

String name;

String currentDns;

Long nodeId;
}
10 changes: 10 additions & 0 deletions v2node/src/main/java/com/ruoyi/system/domain/V2Server.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,16 @@ public class V2Server extends BaseEntity

private String nodeName;

private String nodeType;

public String getNodeType() {
return nodeType;
}

public void setNodeType(String nodeType) {
this.nodeType = nodeType;
}

public String getNodeName() {
return nodeName;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.ruoyi.system.mapper;

import com.ruoyi.system.domain.NodeVo;

import java.util.List;

/**
* @author xuehui_li
* @Version 1.0
* @date 2024/11/19 9:53
* @Content
*/

public interface V2NodeVmessMapper {
List<NodeVo> queryList(NodeVo nodeVo);
}
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,6 @@ public interface IV2ServerService
AjaxResult quickHostReplace(V2Dns data);

AjaxResult updateVersion(Long id, String version);

AjaxResult queryNodeList(V2Server v2Server);
}
27 changes: 27 additions & 0 deletions v2node/src/main/java/com/ruoyi/system/service/V2Manager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.ruoyi.system.service;

import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;

/**
* @author xuehui_li
* @Version 1.0
* @date 2024/11/19 10:01
* @Content
*/
@Service
public class V2Manager {
HashMap<String, V2NodeService> nodeServiceMap = new HashMap<>();

public V2Manager(List<V2NodeService> serviceList) {
for (V2NodeService v2NodeService : serviceList) {
nodeServiceMap.put(v2NodeService.getType(), v2NodeService);
}
}

public V2NodeService getV2NodeService(String type) {
return nodeServiceMap.get(type);
}
}
18 changes: 18 additions & 0 deletions v2node/src/main/java/com/ruoyi/system/service/V2NodeService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.ruoyi.system.service;

import com.ruoyi.system.domain.NodeVo;

import java.util.List;

/**
* @author xuehui_li
* @Version 1.0
* @date 2024/11/19 9:38
* @Content
*/
public interface V2NodeService {

List<NodeVo> queryList(NodeVo nodeVo);

String getType();
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,19 @@
import com.ruoyi.common.enums.DataSourceType;
import com.ruoyi.common.utils.ShellUtil;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.NodeVo;
import com.ruoyi.system.domain.V2Dns;
import com.ruoyi.system.domain.V2Node;
import com.ruoyi.system.domain.V2Server;
import com.ruoyi.system.mapper.V2ServerMapper;
import com.ruoyi.system.service.ConfigService;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.IV2DnsService;
import com.ruoyi.system.service.IV2ServerService;
import com.ruoyi.system.service.*;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
* 【请填写功能名称】Service业务层处理
Expand All @@ -32,6 +31,9 @@ public class V2ServerServiceImpl implements IV2ServerService {
@Autowired
private V2ServerMapper v2ServerMapper;

@Autowired
private V2Manager manager;

@Autowired
private ShellUtil shellUtil;

Expand Down Expand Up @@ -251,4 +253,18 @@ public AjaxResult updateVersion(Long id, String version) {
shellone.close();
}
}

@Override
public AjaxResult queryNodeList(V2Server v2Server) {
if (StringUtils.isEmpty(v2Server.getNodeType())) {
return AjaxResult.success(new ArrayList<>());
}
V2NodeService v2NodeService = manager.getV2NodeService(v2Server.getNodeType());
if (Objects.isNull(v2NodeService)) {
return AjaxResult.error("不支持的节点类型");
}
List<NodeVo> nodeVos = v2NodeService.queryList(new NodeVo());

return AjaxResult.success(nodeVos);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.ruoyi.system.service.impl;

import com.ruoyi.common.annotation.DataSource;
import com.ruoyi.common.enums.DataSourceType;
import com.ruoyi.system.constant.NodeTypeEnum;
import com.ruoyi.system.domain.NodeVo;
import com.ruoyi.system.mapper.V2NodeVmessMapper;
import com.ruoyi.system.service.V2NodeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* @author xuehui_li
* @Version 1.0
* @date 2024/11/19 9:50
* @Content
*/
@Service
public class VmessServiceImpl implements V2NodeService {

@Autowired
V2NodeVmessMapper v2NodeVmessMapper;

@Override
@DataSource(value = DataSourceType.v2board)
public List<NodeVo> queryList(NodeVo nodeVo) {
return v2NodeVmessMapper.queryList(nodeVo);
}

@Override
public String getType() {
return NodeTypeEnum.VMESS.getType();
}
}
Loading

0 comments on commit 904a5a8

Please sign in to comment.