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 { serverAddress?: string serverPublicKey: string port: number } export async function getServerIP(): Promise { const resp = await fetch('/api/host') return resp.text() } export async function getPeerConf(params: GenPeerConParams): Promise { 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') }