This commit is contained in:
AB
2022-03-16 14:14:35 +03:00
parent c6ed1f5f55
commit 205f6faef7
2 changed files with 13 additions and 5 deletions

11
bot.py
View File

@ -5,6 +5,7 @@
import logging import logging
import os import os
import sys import sys
import configparser
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update
from telegram.ext import Updater, MessageHandler, CommandHandler, filters, CallbackQueryHandler, CallbackContext from telegram.ext import Updater, MessageHandler, CommandHandler, filters, CallbackQueryHandler, CallbackContext
from gen import add_peer as wg_add_peer from gen import add_peer as wg_add_peer
@ -22,6 +23,11 @@ admin = os.environ.get('TG_ADMIN')
if not token or not admin: if not token or not admin:
log.error("Env var TG_TOKEN or TG_ADMIN aren't set.") log.error("Env var TG_TOKEN or TG_ADMIN aren't set.")
sys.exit(1) sys.exit(1)
wpm_config = configparser.ConfigParser()
if wpm_config.read('wpm.conf'):
config = wpm_config['Interface'].get('config', 'wg0')
else:
config = "wg0"
def _help(update, context): def _help(update, context):
update.message.reply_text('<b>Help:</b>\n <b>*</b> /add <i>peer name</i>\n <b>*</b> /del <i>peer name</i>\n <b>*</b> /list [<i>peer name</i>]', parse_mode='HTML', disable_web_page_preview=True) update.message.reply_text('<b>Help:</b>\n <b>*</b> /add <i>peer name</i>\n <b>*</b> /del <i>peer name</i>\n <b>*</b> /list [<i>peer name</i>]', parse_mode='HTML', disable_web_page_preview=True)
@ -48,7 +54,7 @@ def list_peers(update, context):
peer_name = "_".join(update.message.text.split()[1:]) peer_name = "_".join(update.message.text.split()[1:])
try: try:
update.message.reply_photo( update.message.reply_photo(
open(f'/etc/wireguard/clients/{peer_name}-qr.png', 'rb'), filename=f'{peer_name} QR.png', quote=True, caption=open(f'/etc/wireguard/clients/{peer_name}.conf', 'r').read()) open(f'/etc/wireguard/clients_{config}/{peer_name}-qr.png', 'rb'), filename=f'{peer_name} QR.png', quote=True, caption=open(f'/etc/wireguard/clients_{config}/{peer_name}.conf', 'r').read())
except: except:
update.message.reply_text("Wrong client name.") update.message.reply_text("Wrong client name.")
@ -70,7 +76,8 @@ def add_peer(update, context):
peer_name = "_".join(update.message.text.split()[1:]) peer_name = "_".join(update.message.text.split()[1:])
log.info("Creating peer %s", peer_name) log.info("Creating peer %s", peer_name)
wg_add_peer(peer_name) wg_add_peer(peer_name)
update.message.reply_photo(open(f'/etc/wireguard/clients/{peer_name}-qr.png', 'rb'), filename=f'{peer_name} QR.png', quote=True, caption=open(f'/etc/wireguard/clients/{peer_name}.conf', 'r').read()) update.message.reply_photo(open(f'/etc/wireguard/clients_{config}/{peer_name}-qr.png', 'rb'), filename=f'{peer_name} QR.png', quote=True, caption=open(f'/etc/wireguard/clients_{config}/{peer_name}.conf', 'r').read())
update.message.reply_document(open(f'/etc/wireguard/clients_{config}/{peer_name}.conf', 'rb'))
def error(update, context): def error(update, context):
update.message.reply_text("Something went wrong...") update.message.reply_text("Something went wrong...")

7
gen.py
View File

@ -36,8 +36,9 @@ peer_name = args.peer
del_name = args.delete del_name = args.delete
is_update = args.update is_update = args.update
wpm_config = configparser.ConfigParser() wpm_config = configparser.ConfigParser()
client_dir = f"client_{args.config}" client_dir = f"/etc/wireguard/clients_{args.config}"
if not path.isdir(client_dir): if not path.isdir(client_dir):
log.info("Creating clients directory %s", client_dir)
mkdir(client_dir) mkdir(client_dir)
if wpm_config.read('wpm.conf'): if wpm_config.read('wpm.conf'):
ips = wpm_config['Interface'].get('allowed_ips', '0.0.0.0/0') ips = wpm_config['Interface'].get('allowed_ips', '0.0.0.0/0')
@ -92,7 +93,7 @@ class Peer:
def gen_config(self, helper): def gen_config(self, helper):
"""Generate peer config""" """Generate peer config"""
filename = f"/etc/wireguard/{client_dir}/{self.comment.replace(' ', '_')}" filename = f"{client_dir}/{self.comment.replace(' ', '_')}"
_wg = wgconfig.WGConfig(f"{filename}.conf") _wg = wgconfig.WGConfig(f"{filename}.conf")
_wg.initialize_file() _wg.initialize_file()
_wg.add_attr(None, 'Address', self.allowed_ips) _wg.add_attr(None, 'Address', self.allowed_ips)
@ -105,7 +106,7 @@ class Peer:
_wg.write_file() _wg.write_file()
system(f'qrencode -r {filename}.conf -o {filename}-qr.png') system(f'qrencode -r {filename}.conf -o {filename}-qr.png')
system(f'qrencode -t ansiutf8 -r {filename}.conf -o {filename}-qr.txt') system(f'qrencode -t ansiutf8 -r {filename}.conf -o {filename}-qr.txt')
log.info(f"Updated config for {self.comment}") log.info(f"Updated config for {filename}")
class Helper: class Helper: