diff --git a/bot.py b/bot.py
index 5cc6c09..63e87bb 100644
--- a/bot.py
+++ b/bot.py
@@ -26,11 +26,11 @@ def add_peer(update, context):
return False
if len(update.message.text.split()) < 2:
update.message.reply_text('Wrong usage.\nHelp:\n * /add peer name', parse_mode='HTML', disable_web_page_preview=True)
+ return False
log.info(update.message.chat.username)
peer_name = "_".join(update.message.text.split()[1:])
log.info("Creating peer %s", peer_name)
wg_add_peer(peer_name)
- update_configs()
update.message.reply_photo(open(f'clients/{peer_name}-qr.png', 'rb'), filename=f'{peer_name} QR.png', quote=True, caption=open(f'clients/{peer_name}.conf', 'r').read())
diff --git a/gen.py b/gen.py
index 218f9cd..1860711 100644
--- a/gen.py
+++ b/gen.py
@@ -39,13 +39,13 @@ class Peer:
else:
self.priv_key = data[0].split(':')[1].strip()
self.comment = data[1].split(':')[1].strip()
- self.managed = True
+# self.managed = True
except:
pass
else:
self.priv_key = self.generate_key()
self.pub_key = self.public_key(self.priv_key)
- self.allowed_ips = allowed_ips
+ self.allowed_ips = allowed_ips if allowed_ips else Helper().next_ip
self.full_comment = "# priv_key: " + " ; ".join([self.priv_key, "comment: " + comment])
@@ -68,7 +68,6 @@ class Peer:
# return False
filename = f"clients/{self.comment.replace(' ', '_')}"
_wg = wgconfig.WGConfig(f"{filename}.conf")
- #_wg.initialize_file(f"# Autogenerated file \n# Comment: {self.comment}\n# Public key: {self.pub_key}\n")
_wg.initialize_file()
_wg.add_attr(None, 'Address', self.allowed_ips)
_wg.add_attr(None, 'DNS', helper.dns)
@@ -97,10 +96,12 @@ class Helper:
@property
def server_pub_key(self):
+ """Return server public key"""
return Peer().public_key(self.wg.interface['PrivateKey'])
@property
def peer_list(self):
+ """Return list of WG peers"""
peer_list = list()
for i, v in self.wg.peers.items():
peer_list.append(Peer(peer=v))
@@ -108,6 +109,7 @@ class Helper:
@property
def ip_list(self):
+ """Return list of IPs"""
ip_list = list()
ip_list.append(ipaddress.ip_address(Helper().wg.interface['Address'].split('/')[0]))
for i, v in self.wg.peers.items():
@@ -122,9 +124,15 @@ class Helper:
pass
ip_list.sort()
return ip_list
+
+ @property
+ def next_ip(self):
+ """Return next free IP"""
+ return self.ip_list[-1]+1
- def add_client(self, comment):
+ def add_peer(self, comment):
+ """Generate a new peer"""
cl = Peer(comment=comment)
self.wg.add_peer(cl.pub_key, cl.full_comment)
self.wg.add_attr(cl.pub_key, 'AllowedIPs', f"{self.ip_list[-1]+1}/32")
@@ -133,15 +141,15 @@ class Helper:
def add_peer(peer_name):
print('Generate a new peer config.')
helper = Helper()
- helper.add_client(peer_name)
+ helper.add_peer(peer_name)
helper.wg.write_file()
+ system('systemctl restart wg-quick@wg0.service')
def update_configs():
print("Update all clients configs.")
helper = Helper()
for peer in helper.peer_list:
peer.gen_config(Helper())
- system('systemctl restart wg-quick@wg0.service')
if not is_update and peer_name:
add_peer(peer_name)