From e52703fe44825b05cce17da6726ce41ff24f2f8b Mon Sep 17 00:00:00 2001 From: hornet Date: Fri, 27 Dec 2024 21:34:32 +0500 Subject: [PATCH] fixed authorization issue --- lainmonitor.py | 67 +++++++++++++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/lainmonitor.py b/lainmonitor.py index 906de4a..8b8fc1b 100644 --- a/lainmonitor.py +++ b/lainmonitor.py @@ -32,7 +32,7 @@ except FileNotFoundError: # Load the authorized users try: - authorized_users = [line.strip() for line in open(auth_users_path, 'r').readlines()] + authorized_users = [str(line.strip()) for line in open(auth_users_path, 'r').readlines()] except FileNotFoundError: logging.error('Authorized users file not found. Exiting...') exit(1) @@ -72,7 +72,7 @@ def get_service_status(service): subprocess.run(['sudo', 'systemctl', 'is-active', '--quiet', service], check=True) return f'{service} is active' except subprocess.CalledProcessError: - return f'{service} is inactive' + return f'{service} is inactive/not present' # Function to ping a Tailscale node def ping_node(node, hostname): @@ -150,40 +150,45 @@ def reboot(): logging.info('Rebooting system...') subprocess.run(['sudo', 'reboot'], check=True) +# Populate teh variables on first start +get_system_info() + # Message handlers @bot.message_handler(commands=['start', 'help', 'status', 'restart', 'reboot', 'ping']) def handle(message): user_id = str(message.from_user.id) - if message.text == '/start': - bot.reply_to(message, 'lainmonitor v1.0 --- standing by...') - elif message.text == '/help': - bot.reply_to(message, 'commands: /start, /help, /status, /restart, /reboot, /ping') - bot.reply_to(message, 'commands: /start, /help, /status, /restart, /reboot, /ping') - elif message.text == '/status': - get_system_info() - status_message = ( - f'hostname: {hostname}\n' - f'system status: {status}\n' - f'uptime: {uptime}\n' - f'zerotier: {zerotier}\n' - f'prosody: {prosody}\n' - f'postgres: {postgres}\n' - f'tailscale: {tailscale}\n' - f'nginx: {nginx}' - ) - bot.reply_to(message, status_message) - bot.reply_to(message, f'Filesystem info for {hostname}:\n\n{disk}') - elif message.text == f'/restart {hostname}' and user_id in authorized_users: - bot.send_message(message.chat.id, 'Select a service to restart:', reply_markup=restart_menu()) - elif message.text == f'/reboot {hostname}' and user_id in authorized_users: - bot.reply_to(message, f'Rebooting {hostname}...') - reboot() - elif message.text == '/ping' and user_id in authorized_users: - reach = check_tailscale_nodes() - bot.reply_to(message, f'Ping status:\n\n{"\n".join(reach)}') - else: + if user_id not in authorized_users: bot.reply_to(message, 'You are not authorized for this action') - + else: + if message.text == '/start': + bot.reply_to(message, 'lainmonitor v1.0 --- standing by...') + elif message.text == '/help': + bot.reply_to(message, 'commands: /start, /help, /status, /restart, /reboot, /ping') + bot.reply_to(message, 'commands: /start, /help, /status, /restart, /reboot, /ping') + elif message.text == '/status': + get_system_info() + status_message = ( + f'hostname: {hostname}\n' + f'system status: {status}\n' + f'uptime: {uptime}\n' + f'zerotier: {zerotier}\n' + f'prosody: {prosody}\n' + f'postgres: {postgres}\n' + f'tailscale: {tailscale}\n' + f'nginx: {nginx}' + ) + bot.reply_to(message, status_message) + bot.reply_to(message, f'Filesystem info for {hostname}:\n\n{disk}') + elif message.text == f'/restart {hostname}': + bot.send_message(message.chat.id, 'Select a service to restart:', reply_markup=restart_menu()) + elif message.text == f'/reboot {hostname}': + bot.reply_to(message, f'Rebooting {hostname}...') + reboot() + elif message.text == '/ping': + reach = check_tailscale_nodes() + bot.reply_to(message, f'Ping status:\n\n{"\n".join(reach)}') + else: + pass # Polling with timeout and error handling try: bot.polling(none_stop=True, timeout=60, long_polling_timeout=60)