summaryrefslogtreecommitdiff
path: root/internal/wireguard
diff options
context:
space:
mode:
authorjwijenbergh <jeroenwijenbergh@protonmail.com>2022-06-17 14:00:40 +0200
committerjwijenbergh <jeroenwijenbergh@protonmail.com>2022-09-20 20:31:23 +0200
commit7af07c596166bf93b79a9d0816b1950dde360fb9 (patch)
tree08b5374c34d6c33b3c596ed981bfb069cca37ade /internal/wireguard
parent6dc7b64f634f6dcbeedea24c741382366a3c7b8c (diff)
Server: Implement function for checking renewal button visibility
Diffstat (limited to 'internal/wireguard')
-rw-r--r--internal/wireguard/wireguard.go38
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)
+}