cordarr/code/utils/jellyfin_create.py
Parker e5ede625b3
Some checks are pending
Create and publish a Docker image / build-and-push-image (push) Waiting to run
Put database within data dir
2025-01-20 20:44:23 -06:00

81 lines
2.4 KiB
Python

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("data/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