aboutsummaryrefslogtreecommitdiff
path: root/code/func/jellyfin.py
blob: d434c17b6c12df0f7c60836f8498026180a4120d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import datetime
import requests
import random
import string
import sqlite3

from global_variables import JELLYFIN_URL, JELLYFIN_HEADERS, ACCOUNT_TIME

"""
Create a new Jellyfin account for the user and return the username and password
"""


def create_jellyfin_account(user_id):
    username = "".join(random.choices(string.ascii_lowercase + string.digits, k=5))
    password = "".join(random.choices(string.ascii_lowercase + string.digits, k=15))

    deletion_time = datetime.datetime.now() + datetime.timedelta(hours=ACCOUNT_TIME)
    # 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:
        print(request_3.json())
        print(request_3.status_code)
        print("BROKEN AT REQUEST 3")
        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