Skip to content

Commit cb1f39b

Browse files
njdartwhyvl
andauthored
Support env lookup for some values (#122)
Co-authored-by: pufferfish <74378430+pufferffish@users.noreply.github.com>
1 parent f8a5d70 commit cb1f39b

File tree

3 files changed

+50
-15
lines changed

3 files changed

+50
-15
lines changed

.github/workflows/container.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ jobs:
5959
docker buildx build \
6060
--platform "$BUILD_PLATFORMS" \
6161
--tag "$CONTAINER_NAME:$CONTAINER_TAG" \
62+
--tag "$CONTAINER_NAME:$GITHUB_SHA" \
6263
--label "org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}" \
6364
--label "org.opencontainers.image.documentation=${{ github.server_url }}/${{ github.repository }}" \
6465
--label "org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }}/packages" \

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ Instructions for using wireproxy with Firefox container tabs and auto-start on M
7777
Address = 10.200.200.2/32 # The subnet should be /32 and /128 for IPv4 and v6 respectively
7878
# MTU = 1420 (optional)
7979
PrivateKey = uCTIK+56CPyCvwJxmU5dBfuyJvPuSXAq1FzHdnIxe1Q=
80+
# PrivateKey = $MY_WIREGUARD_PRIVATE_KEY # Alternatively, reference environment variables
8081
DNS = 10.200.200.1
8182
8283
[Peer]

config.go

Lines changed: 48 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/hex"
66
"errors"
77
"net"
8+
"os"
89
"strings"
910

1011
"github.com/go-ini/ini"
@@ -68,6 +69,18 @@ func parseString(section *ini.Section, keyName string) (string, error) {
6869
if key == nil {
6970
return "", errors.New(keyName + " should not be empty")
7071
}
72+
value := key.String()
73+
if strings.HasPrefix(value, "$") {
74+
if strings.HasPrefix(value, "$$") {
75+
return strings.Replace(value, "$$", "$", 1), nil
76+
}
77+
var ok bool
78+
value, ok = os.LookupEnv(strings.TrimPrefix(value, "$"))
79+
if !ok {
80+
return "", errors.New(keyName + " references unset environment variable " + key.String())
81+
}
82+
return value, nil
83+
}
7184
return key.String(), nil
7285
}
7386

@@ -122,15 +135,21 @@ func encodeBase64ToHex(key string) (string, error) {
122135
}
123136

124137
func parseNetIP(section *ini.Section, keyName string) ([]netip.Addr, error) {
125-
key := section.Key(keyName)
126-
if key == nil {
127-
return []netip.Addr{}, nil
138+
key, err := parseString(section, keyName)
139+
if err != nil {
140+
if strings.Contains(err.Error(), "should not be empty") {
141+
return []netip.Addr{}, nil
142+
}
143+
return nil, err
128144
}
129145

130-
keys := key.StringsWithShadows(",")
146+
keys := strings.Split(key, ",")
131147
var ips = make([]netip.Addr, 0, len(keys))
132148
for _, str := range keys {
133149
str = strings.TrimSpace(str)
150+
if len(str) == 0 {
151+
continue
152+
}
134153
ip, err := netip.ParseAddr(str)
135154
if err != nil {
136155
return nil, err
@@ -141,22 +160,30 @@ func parseNetIP(section *ini.Section, keyName string) ([]netip.Addr, error) {
141160
}
142161

143162
func parseCIDRNetIP(section *ini.Section, keyName string) ([]netip.Addr, error) {
144-
key := section.Key(keyName)
145-
if key == nil {
146-
return []netip.Addr{}, nil
163+
key, err := parseString(section, keyName)
164+
if err != nil {
165+
if strings.Contains(err.Error(), "should not be empty") {
166+
return []netip.Addr{}, nil
167+
}
168+
return nil, err
147169
}
148170

149-
keys := key.StringsWithShadows(",")
171+
keys := strings.Split(key, ",")
150172
var ips = make([]netip.Addr, 0, len(keys))
151173
for _, str := range keys {
174+
str = strings.TrimSpace(str)
175+
if len(str) == 0 {
176+
continue
177+
}
178+
152179
if addr, err := netip.ParseAddr(str); err == nil {
153180
ips = append(ips, addr)
154181
} else {
155182
prefix, err := netip.ParsePrefix(str)
156183
if err != nil {
157184
return nil, err
158185
}
159-
186+
160187
addr := prefix.Addr()
161188
ips = append(ips, addr)
162189
}
@@ -165,14 +192,21 @@ func parseCIDRNetIP(section *ini.Section, keyName string) ([]netip.Addr, error)
165192
}
166193

167194
func parseAllowedIPs(section *ini.Section) ([]netip.Prefix, error) {
168-
key := section.Key("AllowedIPs")
169-
if key == nil {
170-
return []netip.Prefix{}, nil
195+
key, err := parseString(section, "AllowedIPs")
196+
if err != nil {
197+
if strings.Contains(err.Error(), "should not be empty") {
198+
return []netip.Prefix{}, nil
199+
}
200+
return nil, err
171201
}
172202

173-
keys := key.StringsWithShadows(",")
203+
keys := strings.Split(key, ",")
174204
var ips = make([]netip.Prefix, 0, len(keys))
175205
for _, str := range keys {
206+
str = strings.TrimSpace(str)
207+
if len(str) == 0 {
208+
continue
209+
}
176210
prefix, err := netip.ParsePrefix(str)
177211
if err != nil {
178212
return nil, err
@@ -292,8 +326,7 @@ func ParsePeers(cfg *ini.File, peers *[]PeerConfig) error {
292326
peer.PreSharedKey = value
293327
}
294328

295-
if sectionKey, err := section.GetKey("Endpoint"); err == nil {
296-
value := sectionKey.String()
329+
if value, err := parseString(section, "Endpoint"); err == nil {
297330
decoded, err = resolveIPPAndPort(strings.ToLower(value))
298331
if err != nil {
299332
return err

0 commit comments

Comments
 (0)