diff options
author | Parker <contact@pkrm.dev> | 2025-01-19 23:41:53 -0600 |
---|---|---|
committer | Parker <contact@pkrm.dev> | 2025-01-19 23:41:53 -0600 |
commit | b5bd2e36b6597303985eb9dc897e04d452950372 (patch) | |
tree | 697e269911c752ce8c196c7be486df5b5871b85a /code/utils/jellyfin_create.py | |
parent | 86b12da175593f91cb5e3266826a60d1b26f6144 (diff) |
Overhaul + Sonarr support!
Diffstat (limited to 'code/utils/jellyfin_create.py')
-rw-r--r-- | code/utils/jellyfin_create.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/code/utils/jellyfin_create.py b/code/utils/jellyfin_create.py new file mode 100644 index 0000000..08c5230 --- /dev/null +++ b/code/utils/jellyfin_create.py @@ -0,0 +1,80 @@ +import datetime +import requests +import random +import sqlite3 +from wonderwords import RandomWord +from string import ascii_lowercase, digits + +from utils.config import ( + JELLYFIN_URL, + JELLYFIN_HEADERS, + ACCOUNT_TIME, + SIMPLE_PASSWORDS, +) + + +def create_jellyfin_account(user_id): + """ + Create a new Jellyfin account for the user and return the username and password + + Args: + user_id (int): Discord user ID to create the account for + + Returns: + tuple: The username and password of the new Jellyfin account + """ + # Create username/password + username = RandomWord().word(word_min_length=5, word_max_length=5) + if SIMPLE_PASSWORDS: + password = RandomWord().word(word_min_length=5, word_max_length=10) + else: + password = "".join(random.choices(ascii_lowercase + digits, k=15)) + + deletion_time = datetime.datetime.now() + datetime.timedelta( + minutes=ACCOUNT_TIME * 60 + ) + # Create the new Jellyfin account + request_1 = requests.post( + f"{JELLYFIN_URL}/Users/New", + headers=JELLYFIN_HEADERS, + json={"Name": username, "Password": password}, + ) + + if request_1.status_code != 200: + return False + + # Get the user ID of the new account + jellyfin_user_id = request_1.json()["Id"] + # Get the account policy and make edits + request_2 = requests.get( + f"{JELLYFIN_URL}/Users/{jellyfin_user_id}", headers=JELLYFIN_HEADERS + ) + if request_2.status_code != 200: + return False + + account_policy = request_2.json() + account_policy["Policy"]["SyncPlayAccess"] = "JoinGroups" + account_policy["Policy"]["EnableContentDownloading"] = False + account_policy["Policy"]["InvalidLoginAttemptCount"] = 3 + account_policy["Policy"]["MaxActiveSessions"] = 1 + # Update the user with the newly edited policy + request_3 = requests.post( + f"{JELLYFIN_URL}/Users?userId={jellyfin_user_id}", + headers=JELLYFIN_HEADERS, + json=account_policy, + ) + if request_3.status_code != 204: + return False + + # Add the information to the database + db = sqlite3.connect("cordarr.db") + cursor = db.cursor() + cursor.execute( + "INSERT INTO jellyfin_accounts (user_id, jellyfin_user_id," + " deletion_time) VALUES (?, ?, ?)", + (user_id, jellyfin_user_id, deletion_time), + ) + db.commit() + db.close() + + return username, password |