diff --git a/handler/routes.go b/handler/routes.go index 24711d8..817e24f 100644 --- a/handler/routes.go +++ b/handler/routes.go @@ -31,6 +31,28 @@ func WireGuardClients() echo.HandlerFunc { log.Error("Cannot fetch clients from database: ", err) } + // read server information + serverInterface := model.ServerInterface{} + if err := db.Read("server", "interfaces", &serverInterface); err != nil { + log.Error("Cannot fetch server interface config from database: ", err) + } + + serverKeyPair := model.ServerKeypair{} + if err := db.Read("server", "keypair", &serverKeyPair); err != nil { + log.Error("Cannot fetch server key pair from database: ", err) + } + + // read global settings + globalSettings := model.GlobalSetting{} + if err := db.Read("server", "global_settings", &globalSettings); err != nil { + log.Error("Cannot fetch global settings from database: ", err) + } + + server := model.Server{} + server.Interface = &serverInterface + server.KeyPair = &serverKeyPair + + // read client information and build a client list clientDataList := []model.ClientData{} for _, f := range records { client := model.Client{} @@ -43,7 +65,7 @@ func WireGuardClients() echo.HandlerFunc { clientData.Client = &client // generate client qrcode image in base64 - png, err := qrcode.Encode(util.BuildClientConfig(client), qrcode.Medium, 256) + png, err := qrcode.Encode(util.BuildClientConfig(client, server, globalSettings), qrcode.Medium, 256) if err != nil { log.Error("Cannot generate QRCode: ", err) } diff --git a/util/util.go b/util/util.go index bf69510..fa1c194 100644 --- a/util/util.go +++ b/util/util.go @@ -8,23 +8,18 @@ import ( "github.com/ngoduykhanh/wireguard-ui/model" ) -const wgConfigDNS = "1.1.1.1, 8.8.8.8" -const wgConfigPersistentKeepalive = 15 -const wgConfigEndpoint = "wireguard.example.com:56231" -const wgConfigServerPublicKey = "/OKCBc8PxIqCpgqlE9G1kSaTecdAvYf3loEwFj6MXDc=" - // BuildClientConfig to create wireguard client config string -func BuildClientConfig(client model.Client) string { +func BuildClientConfig(client model.Client, server model.Server, setting model.GlobalSetting) string { // Interface section clientAddress := fmt.Sprintf("Address = %s", strings.Join(client.AllocatedIPs, ",")) clientPrivateKey := fmt.Sprintf("PrivateKey = %s", client.PrivateKey) - clientDNS := fmt.Sprintf("DNS = %s", wgConfigDNS) + clientDNS := fmt.Sprintf("DNS = %s", strings.Join(setting.DNSServers, ",")) // Peer section - peerPublicKey := fmt.Sprintf("PublicKey = %s", wgConfigServerPublicKey) + peerPublicKey := fmt.Sprintf("PublicKey = %s", server.KeyPair.PublicKey) peerAllowedIPs := fmt.Sprintf("AllowedIPs = %s", strings.Join(client.AllowedIPs, ",")) - peerEndpoint := fmt.Sprintf("Endpoint = %s", wgConfigEndpoint) - peerPersistentKeepalive := fmt.Sprintf("PersistentKeepalive = %d", wgConfigPersistentKeepalive) + peerEndpoint := fmt.Sprintf("Endpoint = %s:%d", setting.EndpointAddress, server.Interface.ListenPort) + peerPersistentKeepalive := fmt.Sprintf("PersistentKeepalive = %d", setting.PersistentKeepalive) // build the config as string strConfig := "[Interface]\n" +