From 00d217f4539747171be4d865f9c277eb0c77b705 Mon Sep 17 00:00:00 2001 From: Parker Date: Wed, 19 Jun 2024 11:08:37 -0500 Subject: [PATCH] Delete Jellyfin accounts when needed Jellyfin accounts never actually got deleted from Jellyfin, I forgot to write that part. So now the accounts are properly deleted from both Jellyfin and the DB. --- code/bot.py | 16 ++++++++-------- code/func/jellyfin.py | 29 ++++++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/code/bot.py b/code/bot.py index 4b3d96d..e8dc418 100644 --- a/code/bot.py +++ b/code/bot.py @@ -6,6 +6,7 @@ import sqlite3 import os from validate_config import create_config +from func.jellyfin import delete_jellyfin_account from global_variables import LOG, BOT_TOKEN @@ -35,16 +36,15 @@ async def on_ready(): @tasks.loop(seconds=60) async def delete_old_temp_accounts(): - # Delete all of the temporary Jellyfin accounts that have passed - # their expiration time + # Get all jellyfin user IDs that have passed their deletion time db = sqlite3.connect("cordarr.db") cursor = db.cursor() - cursor.execute( - "DELETE FROM jellyfin_accounts WHERE deletion_time < ?", - (datetime.datetime.now(),), - ) - db.commit() - db.close() + cursor.execute("SELECT jellyfin_user_id FROM jellyfin_accounts WHERE deletion_time < ?", (datetime.datetime.now(),)) + jellyfin_user_ids = cursor.fetchall() + + # Delete the Jellyfin accounts + for jellyfin_user_id in jellyfin_user_ids: + delete_jellyfin_account(jellyfin_user_id[0]) if __name__ == "__main__": diff --git a/code/func/jellyfin.py b/code/func/jellyfin.py index d434c17..c255ac2 100644 --- a/code/func/jellyfin.py +++ b/code/func/jellyfin.py @@ -46,9 +46,6 @@ def create_jellyfin_account(user_id): json=account_policy, ) if request_3.status_code != 204: - print(request_3.json()) - print(request_3.status_code) - print("BROKEN AT REQUEST 3") return False # Add the information to the database @@ -62,3 +59,29 @@ def create_jellyfin_account(user_id): db.close() return username, password + + +""" +Delete a specific Jellyfin account and return True/False +""" + + +def delete_jellyfin_account(jellyfin_user_id): + request = requests.delete( + f"{JELLYFIN_URL}/Users/{jellyfin_user_id}", + headers=JELLYFIN_HEADERS, + ) + # If 204 - account deleted + # If 404 - account not found + # Either way, remove account from database + if request.status_code in (404, 204): + db = sqlite3.connect("cordarr.db") + cursor = db.cursor() + cursor.execute( + "DELETE FROM jellyfin_accounts WHERE jellyfin_user_id = ?", + (jellyfin_user_id,), + ) + db.commit() + db.close() + return True + return False \ No newline at end of file