diff options
| author | jwijenbergh <jeroenwijenbergh@protonmail.com> | 2022-06-17 14:00:40 +0200 |
|---|---|---|
| committer | jwijenbergh <jeroenwijenbergh@protonmail.com> | 2022-09-20 20:31:23 +0200 |
| commit | 7af07c596166bf93b79a9d0816b1950dde360fb9 (patch) | |
| tree | 08b5374c34d6c33b3c596ed981bfb069cca37ade /internal/wireguard/wireguard.go | |
| parent | 6dc7b64f634f6dcbeedea24c741382366a3c7b8c (diff) | |
Server: Implement function for checking renewal button visibility
Diffstat (limited to 'internal/wireguard/wireguard.go')
| -rw-r--r-- | internal/wireguard/wireguard.go | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/internal/wireguard/wireguard.go b/internal/wireguard/wireguard.go new file mode 100644 index 0000000..db20067 --- /dev/null +++ b/internal/wireguard/wireguard.go @@ -0,0 +1,38 @@ +package wireguard + +import ( + "fmt" + "regexp" + "golang.zx2c4.com/wireguard/wgctrl/wgtypes" +) + +func GenerateKey() (wgtypes.Key, error) { + key, keyErr := wgtypes.GeneratePrivateKey() + + if keyErr != nil { + return key, &WireguardGenerateKeyError{Err: keyErr} + } + return key, nil +} + +// FIXME: Instead of doing a regex replace, decide if we should use a parser +func ConfigAddKey(config string, key wgtypes.Key) string { + interface_section := "[Interface]" + interface_section_escaped := regexp.QuoteMeta(interface_section) + + // (?m) enables multi line mode + // ^ match from beginning of line + // $ match till end of line + // So it matches [Interface] section exactly + interface_re := regexp.MustCompile(fmt.Sprintf("(?m)^%s$", interface_section_escaped)) + to_replace := fmt.Sprintf("%s\nPrivateKey = %s", interface_section, key.String()) + return interface_re.ReplaceAllString(config, to_replace) +} + +type WireguardGenerateKeyError struct { + Err error +} + +func (e *WireguardGenerateKeyError) Error() string { + return fmt.Sprintf("failed generating Wireguard key with error: %v", e.Err) +} |
