Reduced some vuln after SAST scan
This commit is contained in:
64
plugins/cron.py
Normal file
64
plugins/cron.py
Normal file
@@ -0,0 +1,64 @@
|
||||
# plugins/cron.py
|
||||
|
||||
import sqlite3
|
||||
from crontab import CronTab
|
||||
import simplematrixbotlib as botlib
|
||||
|
||||
# Database connection and cursor
|
||||
conn = sqlite3.connect('cron.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Create table if not exists
|
||||
cursor.execute('''CREATE TABLE IF NOT EXISTS cron (
|
||||
room_id TEXT,
|
||||
cron_entry TEXT,
|
||||
command TEXT
|
||||
)''')
|
||||
conn.commit()
|
||||
|
||||
async def handle_command(room, message, bot, prefix, config):
|
||||
match = botlib.MessageMatch(room, message, bot, prefix)
|
||||
if match.is_not_from_this_bot() and match.prefix() and match.command("cron"):
|
||||
args = match.args()
|
||||
if len(args) >= 4:
|
||||
action = args[0]
|
||||
room_id = args[1]
|
||||
cron_entry = ' '.join(args[2:-1])
|
||||
command = args[-1]
|
||||
if action == "add":
|
||||
add_cron(room_id, cron_entry, command)
|
||||
await bot.api.send_text_message(room.room_id, f"Cron added successfully")
|
||||
elif action == "remove":
|
||||
remove_cron(room_id, command)
|
||||
await bot.api.send_text_message(room.room_id, f"Cron removed successfully")
|
||||
else:
|
||||
await bot.api.send_text_message(room.room_id, "Usage: !cron add|remove room_id cron_entry command")
|
||||
|
||||
def add_cron(room_id, cron_entry, command):
|
||||
# Check if the cron entry already exists in the database for the given room_id and command
|
||||
cursor.execute('SELECT * FROM cron WHERE room_id=? AND command=? AND cron_entry=?', (room_id, command, cron_entry))
|
||||
existing_entry = cursor.fetchone()
|
||||
if existing_entry:
|
||||
return # Cron entry already exists, do not add duplicate
|
||||
|
||||
# Insert the cron entry into the database
|
||||
cursor.execute('INSERT INTO cron (room_id, cron_entry, command) VALUES (?, ?, ?)', (room_id, cron_entry, command))
|
||||
conn.commit()
|
||||
|
||||
def remove_cron(room_id, command):
|
||||
cursor.execute('DELETE FROM cron WHERE room_id=? AND command=?', (room_id, command))
|
||||
conn.commit()
|
||||
|
||||
async def run_cron_jobs(bot):
|
||||
cron = CronTab()
|
||||
for job in cron:
|
||||
cron_entry = str(job)
|
||||
for row in cursor.execute('SELECT * FROM cron WHERE cron_entry=?', (cron_entry,)):
|
||||
room_id, _, command = row
|
||||
room = await bot.api.get_room_by_id(room_id)
|
||||
if room:
|
||||
plugin_name = command.split()[0].replace(prefix, '') # Extract plugin name
|
||||
plugin_module = bot.plugins.get(plugin_name)
|
||||
if plugin_module:
|
||||
await plugin_module.handle_command(room, None, bot, prefix, config)
|
||||
|
Reference in New Issue
Block a user