Skip to content

Commit a71938e

Browse files
authored
TCP Support (#5)
fix: IntID fix: MQTT ACL/Reconnection fix: peer notification of add/update should be responsed feature: TCP support
1 parent ce5b328 commit a71938e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+1181
-503
lines changed

admin-web/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

admin-web/src/api/authAPI.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import http from "./http";
1+
import http, {ID} from "./http";
22

33
export function checkSampleTokenCorrect(token: string) {
44
return http.post('/auth/st/check', {
@@ -7,7 +7,7 @@ export function checkSampleTokenCorrect(token: string) {
77
}
88

99

10-
export function getSSOInviteCode(networkId:number):Promise<string> {
10+
export function getSSOInviteCode(networkId:ID):Promise<string> {
1111
// @ts-ignore
1212
return http.get<string>(`/auth/oauth/${networkId}/device_code`, {
1313
// @ts-ignore

admin-web/src/api/http.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@ const instance = axios.create({
77
timeout: 5 * 1000,
88
})
99

10+
11+
export type ID = string;
1012
export interface CreatedSuccess {
11-
id: number
13+
id: ID
1214
}
1315

16+
1417
export interface Page<T> {
1518
total: number
1619
list: T[]

admin-web/src/api/networkAPI.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
1-
import http, {CreatedSuccess, Page} from "./http";
1+
import http, {CreatedSuccess, ID, Page} from "./http";
22

3+
export enum NetworkProtocol {
4+
TCP, UDP
5+
}
36

47
export interface NetworkSetting {
58
mtu: number,
69
keepAlive: number,
710
dns?: string,
811
port: number,
12+
protocol: NetworkProtocol,
913
}
1014

1115
export interface Network {
12-
id: number,
16+
id: ID,
1317
name: string,
1418
setting: NetworkSetting,
1519
createdAt: string,
@@ -31,25 +35,26 @@ export function networkList(name: string | null, page: number = 1, pageSize: num
3135
export interface CreateNetwork {
3236
name: string,
3337
addressRange: string,
38+
protocol: NetworkProtocol,
3439
}
3540

3641
export function createNetwork(data: CreateNetwork) {
3742
return http.post<CreatedSuccess>('/network', data)
3843
}
3944

40-
export function updateNetwork(id: number, data: Network) {
45+
export function updateNetwork(id: ID, data: Network) {
4146
return http.put<Network>(`/network/${id}`, data)
4247
}
4348

44-
export function getNetwork(id: number) {
49+
export function getNetwork(id: ID) {
4550
return http.get<Network>(`/network/${id}`).then(r => r.data)
4651
}
4752

48-
export function getNetworkInviteCode(networkId: number) {
53+
export function getNetworkInviteCode(networkId: ID) {
4954
return http.get<string>(`/network/${networkId}/invite_code`).then(r => r.data)
5055
}
5156

5257

53-
export function deleteNetwork(id:number) {
58+
export function deleteNetwork(id:ID) {
5459
return http.delete(`/network/${id}`)
5560
}

admin-web/src/api/nodeAPI.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import http, {CreatedSuccess} from "./http";
1+
import http, {CreatedSuccess, ID} from "./http";
22

33

44
export enum NodeStatus {
@@ -10,11 +10,11 @@ export enum NodeType {
1010
}
1111

1212
export interface Node {
13-
id: number,
13+
id: ID,
1414
nodeType: NodeType,
1515
status: NodeStatus,
1616
setting: NodeSetting,
17-
networkId: number,
17+
networkId: ID,
1818
name: string,
1919
}
2020

@@ -34,7 +34,7 @@ export interface UpdateNode {
3434
setting: NodeSetting,
3535
}
3636

37-
export function getNodeList(networkId: number, page: number = 1, pageSize: number = 10) {
37+
export function getNodeList(networkId: ID, page: number = 1, pageSize: number = 10) {
3838
return http.get<Node[]>(`/node/${networkId}`, {
3939
params: {
4040
page,
@@ -50,22 +50,22 @@ export interface CreateNode {
5050
setting: NodeSetting,
5151
}
5252

53-
export function createNode(networkId: number, data: CreateNode) {
53+
export function createNode(networkId: ID, data: CreateNode) {
5454
return http.post<CreatedSuccess>(`/node/${networkId}`, data)
5555
}
5656

57-
export function getNode(networkId: number, nodeId: number) {
57+
export function getNode(networkId: ID, nodeId: ID) {
5858
return http.get<Node>(`/node/${networkId}/${nodeId}`).then(r => r.data)
5959
}
6060

61-
export function updateNode(networkId: number, nodeId: number, data: UpdateNode) {
61+
export function updateNode(networkId: ID, nodeId: ID, data: UpdateNode) {
6262
return http.put(`/node/${networkId}/${nodeId}`, data)
6363
}
6464

65-
export function getNodeActiveCode(networkId: number, nodeId: number) {
65+
export function getNodeActiveCode(networkId: ID, nodeId: ID) {
6666
return http.get<string>(`/node/${networkId}/${nodeId}/active_code`).then(r => r.data)
6767
}
6868

69-
export function updateNodeStatus(networkId: number, nodeId: number, status: NodeStatus.Forbid | NodeStatus.Normal) {
69+
export function updateNodeStatus(networkId: ID, nodeId: ID, status: NodeStatus.Forbid | NodeStatus.Normal) {
7070
return http.put(`/node/${networkId}/${nodeId}/status`, {status})
7171
}

admin-web/src/view/network/CreateNetworkPage.tsx

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import {Button, Form, Input, message} from "antd";
1+
import {Button, Form, Input, message, Select} from "antd";
22
import {useIntl} from "react-intl";
3-
import {CreateNetwork, createNetwork} from "../../api/networkAPI";
3+
import {CreateNetwork, createNetwork, NetworkProtocol} from "../../api/networkAPI";
44
import {useNavigate} from "react-router-dom";
55

6-
6+
const {Option} = Select;
77
export function CreateNetworkPage() {
88
const [form] = Form.useForm<CreateNetwork>()
99
const navi = useNavigate()
@@ -23,6 +23,9 @@ export function CreateNetworkPage() {
2323
form={form}
2424
labelCol={{span: 8}}
2525
wrapperCol={{span: 16}}
26+
initialValues={{
27+
protocol: NetworkProtocol.UDP
28+
}}
2629
>
2730
<Form.Item
2831
label={intl.formatMessage({id: 'name'})}
@@ -40,6 +43,17 @@ export function CreateNetworkPage() {
4043
>
4144
<Input placeholder="10.2.0.0/16"/>
4245
</Form.Item>
46+
<Form.Item
47+
label="Protocol"
48+
required
49+
rules={[{required: true}]}
50+
name="protocol"
51+
>
52+
<Select>
53+
<Option value={NetworkProtocol.TCP}>TCP</Option>
54+
<Option value={NetworkProtocol.UDP}>UDP</Option>
55+
</Select>
56+
</Form.Item>
4357
<Form.Item wrapperCol={{offset: 8, span: 16}}>
4458
<Button type="ghost" onClick={onFinish}>{intl.formatMessage({id: 'submit'})}</Button>
4559
</Form.Item>

admin-web/src/view/network/NetworkDetailPage.tsx

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
11
import {useEffect} from "react";
2-
import {getNetwork, Network, updateNetwork} from "../../api/networkAPI";
2+
import {getNetwork, Network, NetworkProtocol, updateNetwork} from "../../api/networkAPI";
33
import {useParams} from "react-router-dom";
4-
import {Button, Col, Form, Input, InputNumber, Row} from "antd";
4+
import {Button, Col, Form, Input, InputNumber, message, Row, Select} from "antd";
55
import {useIntl} from "react-intl";
66
import {useForm} from "antd/es/form/Form";
77

8+
const {Option} = Select;
89

910
export default function NetworkDetailPage() {
1011
const {networkId} = useParams<{ networkId: string }>()
1112
const intl = useIntl()
1213
const [form] = useForm<Network>()
1314

1415
useEffect(() => {
15-
getNetwork(parseInt(networkId!)).then((d) => {
16+
getNetwork(networkId!).then((d) => {
1617
form.setFieldsValue(d)
1718
})
1819
}, [networkId, form])
1920

2021
const submit = async () => {
2122
const data = await form.validateFields()
22-
await updateNetwork(parseInt(networkId!), data)
23+
await updateNetwork(networkId!, data)
24+
message.info(intl.formatMessage({id: 'result.updateSuccess'}, {'0': intl.formatMessage({id: 'nav.network'})}))
2325
}
2426
return (
2527
<>
@@ -62,6 +64,15 @@ export default function NetworkDetailPage() {
6264
max={600}/>
6365
</Form.Item>
6466
</Col>
67+
<Col span={8}>
68+
<Form.Item rules={[{required: true}]} name={['setting','protocol']}
69+
label="Protocol">
70+
<Select disabled>
71+
<Option value={NetworkProtocol.TCP}>TCP</Option>
72+
<Option value={NetworkProtocol.UDP}>UDP</Option>
73+
</Select>
74+
</Form.Item>
75+
</Col>
6576
</Row>
6677
</Form>
6778
<div style={{textAlign: 'center', marginTop: '20px'}}>
@@ -70,6 +81,7 @@ export default function NetworkDetailPage() {
7081
</>
7182
)
7283
}
84+
// add Nodes Navigator, Invite Code
7385
// <Col span={8}>
7486
// <Form.Item name={['setting', 'dns']} label="Default DNS"><Input/></Form.Item>
7587
// </Col>

admin-web/src/view/network/NetworkListPage.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {deleteNetwork, getNetworkInviteCode, Network, networkList} from "../../a
55
import {useEffect, useState} from "react";
66
import DayjsFormat from "../../component/DayjsFormat";
77
import {Link, useSearchParams} from "react-router-dom";
8-
import {defaultPage, Page} from "../../api/http";
8+
import {defaultPage, ID, Page} from "../../api/http";
99
import {QRCodeCanvas} from "qrcode.react";
1010
import copy from "copy-to-clipboard";
1111
import {getPersistenceToken, getSSOInviteCode} from "../../api/authAPI";
@@ -23,13 +23,13 @@ export default function NetworkListPage() {
2323
networkList(name, page).then((d) => setData(d))
2424
}, [name, page])
2525

26-
const showInviteModel = (id: number) => {
26+
const showInviteModel = (id: ID) => {
2727
if((getPersistenceToken()??'').startsWith('Bearer')) {
2828
getSSOInviteCode(id).then(r => setShowSSO(r))
2929
}
3030
getNetworkInviteCode(id).then(setShowModal)
3131
}
32-
const deleteNetworkAction = async (id: number) => {
32+
const deleteNetworkAction = async (id: ID) => {
3333
await deleteNetwork(id)
3434
message.info(intl.formatMessage({id: 'result.deleteSuccess'},
3535
{'0': intl.formatMessage({id: 'nav.network'})}))

admin-web/src/view/node/CreateNodePage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export function CreateNodePage() {
1616
const intl = useIntl()
1717
useEffect(() => {
1818
if (networkId) {
19-
getNetwork(parseInt(networkId)).then(r => setNetwork(r))
19+
getNetwork(networkId).then(r => setNetwork(r))
2020
}
2121
}, [networkId])
2222

@@ -36,7 +36,7 @@ export function CreateNodePage() {
3636
delete data.ip
3737
}
3838

39-
const {id} = (await createNode(parseInt(networkId as string), data)).data
39+
const {id} = (await createNode(networkId!, data)).data
4040
message.info(intl.formatMessage({id: 'result.createSuccess'}, {'0': intl.formatMessage({id: 'nav.node'})}))
4141
navi(`/network/${networkId}/node/${id}`, {replace: true})
4242
}

admin-web/src/view/node/NodeDetailPage.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,7 @@ export default function NodeDetailPage() {
7171

7272
useEffect(() => {
7373
if (networkId && nodeId) {
74-
const networkIdNum = parseInt(networkId)
75-
Promise.all([getNetwork(networkIdNum), getNode(networkIdNum, parseInt(nodeId))]).then(r => {
74+
Promise.all([getNetwork(networkId), getNode(networkId, nodeId)]).then(r => {
7675
setNetwork(r[0])
7776
form.setFieldsValue(r[1])
7877
})
@@ -91,7 +90,7 @@ export default function NodeDetailPage() {
9190
name: data.name,
9291
setting: data.setting,
9392
}
94-
await updateNode(parseInt(networkId as string), parseInt(nodeId as string), updateData)
93+
await updateNode(networkId!, nodeId!, updateData)
9594
message.info(intl.formatMessage({id: 'result.updateSuccess'}, {'0': intl.formatMessage({id: 'nav.node'})}))
9695
}
9796

0 commit comments

Comments
 (0)