diff --git a/src/main.rs b/src/main.rs
index 1b810f3..05cafb6 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -20,6 +20,7 @@ use std::convert::TryFrom;
use std::process::Command;
use std::string::String;
use wireguard::WireGuard;
+mod wireguard_config;
fn check_compliance(req: &Request
) -> Result<(), Response> {
if req.uri() != "/metrics" {
diff --git a/src/wireguard_config.rs b/src/wireguard_config.rs
new file mode 100644
index 0000000..bb6c369
--- /dev/null
+++ b/src/wireguard_config.rs
@@ -0,0 +1,85 @@
+use std::collections::HashMap;
+
+#[derive(Debug, Default, Clone)]
+pub(crate) struct PeerEntry {
+ pub public_key: String,
+ pub name: Option,
+}
+
+pub(crate) fn parse<'a>(txt: &'a str) -> HashMap {
+ let mut ht = HashMap::new();
+
+ let mut name = "";
+ txt.lines().fold("", |prev, cur| {
+ if cur == "[Peer]" {
+ if prev.chars().next() == Some('#') {
+ name = prev;
+ }
+ } else if cur.starts_with("PublicKey") {
+ // public key found, use it as key
+ // TODO we must strip the PublicKey = first !
+ ht.insert(
+ cur.to_owned(),
+ PeerEntry {
+ public_key: cur.to_owned(),
+ name: Some(name.to_owned()),
+ },
+ );
+ }
+
+ cur
+ });
+
+ ht
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ const TEXT: &'static str = "
+ListenPort = 51820
+PrivateKey = my_super_secret_private_key
+# PreUp = iptables -t nat -A POSTROUTING -s 10.70.0.0/24 -o enp7s0 -j MASQUERADE
+# PostDown = iptables -t nat -D POSTROUTING -s 10.70.0.0/24 -o enp7s0 -j MASQUERADE
+
+# OnePlus 6T
+[Peer]
+PublicKey = 2S7mA0vEMethCNQrJpJKE81/JmhgtB+tHHLYQhgM6kk=
+AllowedIPs = 10.70.0.2/32
+
+# varch.local (laptop)
+[Peer]
+PublicKey = qnoxQoQI8KKMupLnSSureORV0wMmH7JryZNsmGVISzU=
+AllowedIPs = 10.70.0.3/32
+
+# cantarch
+[Peer]
+PublicKey = L2UoJZN7RmEKsMmqaJgKG0m1S2Zs2wd2ptAf+kb3008=
+AllowedIPs = 10.70.0.4/32
+
+# frcognoarch
+[Peer]
+PublicKey = MdVOIPKt9K2MPj/sO2NlWQbOnFJ6L/qX80mmhQwsUlA=
+AllowedIPs = 10.70.0.50/32
+
+# frcognowin10
+[Peer]
+PublicKey = lqYcojJMsIZXMUw1heAFbQHBoKjCEaeo7M1WXDh/KWc=
+AllowedIPs = 10.70.0.40/32
+
+# OnePlus 5T
+[Peer]
+PublicKey = 928vO9Lf4+Mo84cWu4k1oRyzf0AR7FTGoPKHGoTMSHk=
+AllowedIPs = 10.70.0.80/32
+";
+
+ #[test]
+ fn test_parse() {
+ let a = parse(TEXT);
+ println!("{:?}", a);
+ }
+
+ #[test]
+ fn test_parse_and_serialize() {}
+}