cordarr/code/utils/jellyfin_create.py
2025-01-21 20:38:33 -06:00

82 lines
2.4 KiB
Python

import datetime
import requests
import random
from wonderwords import RandomWord
from string import ascii_lowercase, digits
from utils.database import Session
from utils.models import JellyfinAccounts
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
with Session() as session:
session.add(
JellyfinAccounts(
user_id=user_id,
jellyfin_user_id=jellyfin_user_id,
deletion_time=deletion_time,
)
)
session.commit()
return username, password