Skip to content

Commit 73355f3

Browse files
committed
Add wireguard servers to list from api.
1 parent fdca594 commit 73355f3

File tree

3 files changed

+80
-31
lines changed

3 files changed

+80
-31
lines changed

internal/provider/privateinternetaccess/updater/api.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ type regionData struct {
2727
Servers struct {
2828
UDP []serverData `json:"ovpnudp"`
2929
TCP []serverData `json:"ovpntcp"`
30+
WG []serverData `json:"wg"`
3031
} `json:"servers"`
3132
}
3233

internal/provider/privateinternetaccess/updater/hosttoserver.go

Lines changed: 70 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,51 +7,92 @@ import (
77
"github.com/qdm12/gluetun/internal/models"
88
)
99

10-
type nameToServer map[string]models.Server
10+
type nameToServer map[string][]models.Server
1111

1212
func (nts nameToServer) add(name, hostname, region string,
13-
tcp, udp, portForward bool, ip netip.Addr) (change bool) {
14-
server, ok := nts[name]
15-
if !ok {
16-
change = true
17-
server.VPN = vpn.OpenVPN
18-
server.ServerName = name
19-
server.Hostname = hostname
20-
server.Region = region
21-
server.PortForward = portForward
22-
}
13+
serverType string, tcp, udp, portForward bool, ip netip.Addr) (change bool) {
2314

24-
if !server.TCP && tcp {
25-
change = true
26-
server.TCP = tcp
27-
}
28-
if !server.UDP && udp {
29-
change = true
30-
server.UDP = udp
31-
}
15+
var server models.Server
3216

33-
ipFound := false
34-
for _, existingIP := range server.IPs {
35-
if ip == existingIP {
36-
ipFound = true
17+
// Check for existing server for this name.
18+
servers := nts[name]
19+
for i, existingServer := range servers {
20+
if existingServer.ServerName != name || existingServer.VPN != serverType {
21+
continue
22+
}
23+
24+
server = existingServer
25+
26+
switch existingServer.VPN {
27+
case vpn.OpenVPN:
28+
// Update OpenVPN supported protocols and return
29+
if !existingServer.TCP {
30+
servers[i].TCP = tcp
31+
change = true
32+
}
33+
if !existingServer.UDP {
34+
servers[i].UDP = udp
35+
change = true
36+
}
37+
ipFound := false
38+
for _, existingIP := range server.IPs {
39+
if ip == existingIP {
40+
ipFound = true
41+
break
42+
}
43+
}
44+
if !ipFound {
45+
server.IPs = append(server.IPs, ip)
46+
change = true
47+
}
48+
break
49+
case vpn.Wireguard:
50+
// Update IPs and return
51+
ipFound := false
52+
for _, existingIP := range server.IPs {
53+
if ip == existingIP {
54+
ipFound = true
55+
break
56+
}
57+
}
58+
if !ipFound {
59+
server.IPs = append(server.IPs, ip)
60+
change = true
61+
}
3762
break
3863
}
64+
65+
break
3966
}
4067

41-
if !ipFound {
68+
if server.ServerName == "" {
4269
change = true
43-
server.IPs = append(server.IPs, ip)
70+
nts[name] = append(servers, models.Server{
71+
VPN: vpn.OpenVPN,
72+
Region: region,
73+
Hostname: hostname,
74+
PortForward: portForward,
75+
ServerName: name,
76+
TCP: tcp,
77+
UDP: udp,
78+
})
79+
nts[name] = append(servers, models.Server{
80+
VPN: vpn.Wireguard,
81+
Region: region,
82+
Hostname: hostname,
83+
PortForward: portForward,
84+
ServerName: name,
85+
IPs: []netip.Addr{ip},
86+
})
4487
}
4588

46-
nts[name] = server
47-
4889
return change
4990
}
5091

5192
func (nts nameToServer) toServersSlice() (servers []models.Server) {
5293
servers = make([]models.Server, 0, len(nts))
53-
for _, server := range nts {
54-
servers = append(servers, server)
94+
for _, hostServers := range nts {
95+
servers = append(servers, hostServers...)
5596
}
5697
return servers
5798
}

internal/provider/privateinternetaccess/updater/servers.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package updater
33
import (
44
"context"
55
"fmt"
6+
"github.com/qdm12/gluetun/internal/constants/vpn"
67
"sort"
78
"time"
89

@@ -78,14 +79,20 @@ func addData(regions []regionData, nts nameToServer) (change bool) {
7879
for _, region := range regions {
7980
for _, server := range region.Servers.UDP {
8081
const tcp, udp = false, true
81-
if nts.add(server.CN, region.DNS, region.Name, tcp, udp, region.PortForward, server.IP) {
82+
if nts.add(server.CN, region.DNS, region.Name, vpn.OpenVPN, tcp, udp, region.PortForward, server.IP) {
8283
change = true
8384
}
8485
}
8586

8687
for _, server := range region.Servers.TCP {
8788
const tcp, udp = true, false
88-
if nts.add(server.CN, region.DNS, region.Name, tcp, udp, region.PortForward, server.IP) {
89+
if nts.add(server.CN, region.DNS, region.Name, vpn.OpenVPN, tcp, udp, region.PortForward, server.IP) {
90+
change = true
91+
}
92+
}
93+
94+
for _, server := range region.Servers.WG {
95+
if nts.add(server.CN, region.DNS, region.Name, vpn.Wireguard, false, false, region.PortForward, server.IP) {
8996
change = true
9097
}
9198
}

0 commit comments

Comments
 (0)