Fix nil-pointer crash generating QR codes for non-default servers
GetClients, GetClientByID, and SendRequestedConfigsToTelegram all looked up the legacy "wg0" server unconditionally when building a client's QR code / config, ignoring which server the client actually belongs to. On any multi-server setup without a migrated wg0, the server lookup returned a zero-value model.Server (error discarded), and BuildClientConfig then dereferenced its nil KeyPair pointer, panicking whenever a client's QR code was rendered. Now looks up the client's own ServerID (falling back to wg0 only for legacy clients with no ServerID set) and surfaces the lookup error instead of silently continuing with an empty server. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
067d0af323
commit
0dbb916866
+36
-20
@@ -412,14 +412,22 @@ func (o *JsonDB) GetClients(hasQRCode bool) ([]model.ClientData, error) {
|
||||
|
||||
// generate client qrcode image in base64
|
||||
if hasQRCode && client.PrivateKey != "" {
|
||||
server, _ := o.GetServerByID(util.DefaultServerID)
|
||||
globalSettings, _ := o.GetGlobalSettings()
|
||||
|
||||
png, err := qrcode.Encode(util.BuildClientConfig(client, server, globalSettings), qrcode.Medium, 256)
|
||||
if err == nil {
|
||||
clientData.QRCode = "data:image/png;base64," + base64.StdEncoding.EncodeToString(png)
|
||||
serverID := client.ServerID
|
||||
if serverID == "" {
|
||||
serverID = util.DefaultServerID
|
||||
}
|
||||
server, err := o.GetServerByID(serverID)
|
||||
if err != nil {
|
||||
fmt.Printf("Cannot generate QR code: server %s not found: %v\n", serverID, err)
|
||||
} else {
|
||||
fmt.Print("Cannot generate QR code: ", err)
|
||||
globalSettings, _ := o.GetGlobalSettings()
|
||||
|
||||
png, err := qrcode.Encode(util.BuildClientConfig(client, server, globalSettings), qrcode.Medium, 256)
|
||||
if err == nil {
|
||||
clientData.QRCode = "data:image/png;base64," + base64.StdEncoding.EncodeToString(png)
|
||||
} else {
|
||||
fmt.Print("Cannot generate QR code: ", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -442,21 +450,29 @@ func (o *JsonDB) GetClientByID(clientID string, qrCodeSettings model.QRCodeSetti
|
||||
|
||||
// generate client qrcode image in base64
|
||||
if qrCodeSettings.Enabled && client.PrivateKey != "" {
|
||||
server, _ := o.GetServerByID(util.DefaultServerID)
|
||||
globalSettings, _ := o.GetGlobalSettings()
|
||||
client := client
|
||||
if !qrCodeSettings.IncludeDNS {
|
||||
globalSettings.DNSServers = []string{}
|
||||
serverID := client.ServerID
|
||||
if serverID == "" {
|
||||
serverID = util.DefaultServerID
|
||||
}
|
||||
if !qrCodeSettings.IncludeMTU {
|
||||
globalSettings.MTU = 0
|
||||
}
|
||||
|
||||
png, err := qrcode.Encode(util.BuildClientConfig(client, server, globalSettings), qrcode.Medium, 256)
|
||||
if err == nil {
|
||||
clientData.QRCode = "data:image/png;base64," + base64.StdEncoding.EncodeToString(png)
|
||||
server, err := o.GetServerByID(serverID)
|
||||
if err != nil {
|
||||
fmt.Printf("Cannot generate QR code: server %s not found: %v\n", serverID, err)
|
||||
} else {
|
||||
fmt.Print("Cannot generate QR code: ", err)
|
||||
globalSettings, _ := o.GetGlobalSettings()
|
||||
client := client
|
||||
if !qrCodeSettings.IncludeDNS {
|
||||
globalSettings.DNSServers = []string{}
|
||||
}
|
||||
if !qrCodeSettings.IncludeMTU {
|
||||
globalSettings.MTU = 0
|
||||
}
|
||||
|
||||
png, err := qrcode.Encode(util.BuildClientConfig(client, server, globalSettings), qrcode.Medium, 256)
|
||||
if err == nil {
|
||||
clientData.QRCode = "data:image/png;base64," + base64.StdEncoding.EncodeToString(png)
|
||||
} else {
|
||||
fmt.Print("Cannot generate QR code: ", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user