wireadmin/src/lib/wireguard-utils.ts

63 lines
2.1 KiB
TypeScript

import { WgServer } from "@lib/typings";
export function getServerConf(server: WgServer): string {
const lines = [
'# Autogenerated by WireGuard UI (WireAdmin)',
'[Interface]',
`PrivateKey = ${server.privateKey}`,
`Address = ${server.address}/24`,
`ListenPort = ${server.listen}`,
`${server.dns ? `DNS = ${server.dns}` : 'OMIT'}`,
'',
`${server.preUp ? `PreUp = ${server.preUp}` : 'OMIT'}`,
`${server.postUp ? `PostUp = ${server.postUp}` : 'OMIT'}`,
`${server.preDown ? `PreDown = ${server.preDown}` : 'OMIT'}`,
`${server.postDown ? `PostDown = ${server.postDown}` : 'OMIT'}`,
]
server.peers.forEach((peer, index) => {
lines.push('')
lines.push(`## ${peer.name || `Peer #${index + 1}`}`)
lines.push('[Peer]')
lines.push(`PublicKey = ${peer.publicKey}`)
lines.push(`${peer.preSharedKey ? `PresharedKey = ${peer.preSharedKey}` : 'OMIT'}`)
lines.push(`AllowedIPs = ${peer.allowedIps}/32`)
lines.push(`${peer.persistentKeepalive ? `PersistentKeepalive = ${peer.persistentKeepalive}` : 'OMIT'}`)
})
return lines
.filter((l) => l !== 'OMIT')
.join('\n')
}
type Peer = WgServer['peers'][0]
interface GenPeerConParams extends Peer, Pick<WgServer, 'dns'> {
serverAddress?: string
serverPublicKey: string
port: number
}
export async function getServerIP(): Promise<string> {
const resp = await fetch('/api/host')
return resp.text()
}
export async function getPeerConf(params: GenPeerConParams): Promise<string> {
const lines = [
'# Autogenerated by WireGuard UI (WireAdmin)',
'[Interface]',
`PrivateKey = ${params.privateKey}`,
`Address = ${params.allowedIps}/24`,
`${params.dns ? `DNS = ${params.dns}` : 'OMIT'}`,
'',
'[Peer]',
`PublicKey = ${params.serverPublicKey}`,
`${params.preSharedKey ? `PresharedKey = ${params.preSharedKey}` : 'OMIT'}`,
`AllowedIPs = 0.0.0.0/0, ::/0`,
`PersistentKeepalive = ${params.persistentKeepalive}`,
`Endpoint = ${params.serverAddress || process.env.NEXT_PUBLIC_WG_HOST}:${params.port}`,
]
return lines
.filter((l) => l !== 'OMIT')
.join('\n')
}