Compare commits

..

No commits in common. "be36cefd4b69a61b29a2ee2e8d45ebfc626686b2" and "a81869c96d1f54da2154b76f71e747cdfc81d313" have entirely different histories.

3 changed files with 25 additions and 106 deletions

View File

@ -53,7 +53,7 @@ function getFirstAvailableId(ids: number[]) : number {
} }
function generateNodeData(nodes : NodeData[]) : NodeData | null { function generateNodeData(nodes : NodeData[]) : NodeData | null {
const hostId = getFirstAvailableId(nodes.filter(n => n.groupId == 0).map(n => n.hostId)) const hostId = getFirstAvailableId(nodes.map(n => n.hostId))
if(hostId > 255) return null if(hostId > 255) return null
const privateKey = generateWireGuardPrivateKey(); const privateKey = generateWireGuardPrivateKey();

View File

@ -1,6 +1,5 @@
import { useState, ReactNode } from 'react'; import { useState, ReactNode } from 'react';
import { NodeData, Settings } from '../types/graph'; import { NodeData, Settings } from '../types/graph';
import { generateWireGuardPrivateKey } from '../utils/wireguardConfig'
import './NodeEditor.css'; import './NodeEditor.css';
@ -40,10 +39,6 @@ export default function NodeEditor({
// onClose(); // onClose();
}; };
const handleGenerateKey = (): void => {
handleInputChange('privateKey', generateWireGuardPrivateKey())
}
return ( return (
<div className="node-editor-overlay"> <div className="node-editor-overlay">
<div className="node-editor"> <div className="node-editor">
@ -75,80 +70,21 @@ export default function NodeEditor({
<div className="item-group"> <div className="item-group">
<input <input
value={formData.privateKey || ''} value={formData.privateKey || ''}
onChange={(e) => handleInputChange('privateKey', e.target.value)}
readOnly readOnly
/> />
<button className="btn-interect" onClick={handleGenerateKey}></button> <button className="btn-interect"></button>
</div> </div>
</div> </div>
<div className="form-group"> <div className="form-group">
<label>ID</label> <label></label>
<input <input
type="number" type="number"
min="0"
max="255"
step="1"
value={formData.hostId}
onChange={(e) => handleInputChange('hostId', e.target.value)}
placeholder="同一子网ID下主机ID不能重复不得超过255"
/>
</div>
<div className="form-group">
<label>ID</label>
<input
type="number"
min="0"
max="255"
step="1"
value={formData.groupId}
onChange={(e) => handleInputChange('groupId', e.target.value)}
placeholder="不得超过255"
/>
</div>
{/* host options */}
<div className="form-group">
<label>PostUp ()</label>
<input
type="text"
value={formData.postUp || ''}
onChange={(e) => handleInputChange('postUp', e.target.value)}
/>
</div>
<div className="form-group">
<label>PostDown ()</label>
<input
type="text"
value={formData.postDown || ''}
onChange={(e) => handleInputChange('postDown', e.target.value)}
/>
</div>
<div className="form-group">
<label>mtu ()</label>
<input
type="number"
min="1"
step="1"
value={formData.mtu || ''}
onChange={(e) => handleInputChange('mtu', e.target.value)}
placeholder={settings.mtu ? `默认值:${settings.mtu}` : ''}
/>
</div>
<div className="form-group">
<label> ()</label>
<input
type="number"
min="1024"
max="49151"
step="1"
value={formData.listenPort || ''} value={formData.listenPort || ''}
onChange={(e) => handleInputChange('listenPort', e.target.value)} onChange={(e) => handleInputChange('listenPort', e.target.value)}
placeholder={`默认值:${settings.listenPort}`} placeholder="例如: 51820"
/> />
</div> </div>
@ -158,16 +94,17 @@ export default function NodeEditor({
type="text" type="text"
value={formData.dnsServers || ''} value={formData.dnsServers || ''}
onChange={(e) => handleInputChange('dnsServers', e.target.value)} onChange={(e) => handleInputChange('dnsServers', e.target.value)}
placeholder="例如: 8.8.8.8,1.1.1.1" placeholder="例如: 8.8.8.8"
/> />
</div> </div>
<div className="form-group"> <div className="form-group">
<label> ()</label> <label> ()</label>
<textarea <input
rows={3} type="number"
value={formData.notes || ''} value={formData.persistentKeepalive || ''}
onChange={(e) => handleInputChange('notes', e.target.value)} onChange={(e) => handleInputChange('persistentKeepalive', e.target.value)}
placeholder="秒数"
/> />
</div> </div>

View File

@ -4,23 +4,6 @@ export type AppNode = Node<NodeData>;
export type AppEdge = Edge<EdgeData>; export type AppEdge = Edge<EdgeData>;
export interface GroupAllowRule {
kind: 'group'
allowGroup: number
}
export interface HostAllowRule {
kind: 'host'
allowHost: number
}
export interface CustomAllowRule {
kind: 'custom'
allow: string
}
export type AllowRule = GroupAllowRule | HostAllowRule | CustomAllowRule
export type NodeData = { export type NodeData = {
// basic // basic
label: string; label: string;
@ -28,28 +11,27 @@ export type NodeData = {
groupId: number; groupId: number;
hostId: number; hostId: number;
// host options // options
postUp?: string; postUp?: string;
postDown?: string; postDown?: string;
mtu?: number; persistentKeepalive?: string;
notes?: string;
listenPort?: number;
dnsServers?: string; dnsServers?: string;
disallowSubnet?: string;
// peer options allowIPs?: string;
// allowRules?: AllowRule[]; mtu?: number;
// persistentKeepalive?: string; todo: 加到边上 listenPort?: number;
notes?: string;
}
export type EdgeData = {
isTwoWayEdge: boolean
} }
export type Settings = { export type Settings = {
v4SubNetPrefix: [number, number]; v4SubNetPrefix: [number, number];
listenPort: number; listenPort: number;
// options // global options
v6SubNetPrefix?: [string, string, string, string]; v6SubNetPrefix?: [string, string, string, string];
mtu?: number; mtu?: number;
}
export type EdgeData = {
isTwoWayEdge: boolean
} }