aboutsummaryrefslogtreecommitdiff
path: root/code/utils/jellyfin_create.py
diff options
context:
space:
mode:
Diffstat (limited to 'code/utils/jellyfin_create.py')
-rw-r--r--code/utils/jellyfin_create.py80
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