Skip to content

Commit bf3a1be

Browse files
committed
Add user auth to jellyseer #58
1 parent 10bd40d commit bf3a1be

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

main.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ def main(config):
2727
if "jellyseerr" in config:
2828
js_client = JellyseerrClient(
2929
server_url=config['jellyseerr']['server_url'],
30-
api_key=config['jellyseerr']['api_key']
30+
api_key=config['jellyseerr'].get('api_key', None),
31+
email=config['jellyseerr'].get('email', None),
32+
password=str(config['jellyseerr'].get('password', None)),
33+
user_type=str(config['jellyseerr'].get('user_type', "local"))
3134
)
3235
else:
3336
js_client = None

utils/jellyseerr.py

+26-10
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@
33
from loguru import logger
44

55
class JellyseerrClient:
6-
def __init__(self, server_url: str, api_key: str):
6+
def __init__(self, server_url: str, api_key:str=None, email: str=None, password: str=None, user_type: str="local"):
77
# Fix common url issues
88
if server_url.endswith("/"):
99
server_url = server_url[:-1] # Remove trailing slash
1010
if not server_url.endswith("/api/v1"):
1111
server_url += "/api/v1"
1212
self.server_url = server_url
13-
self.api_key = api_key
13+
14+
if user_type not in ["local", "plex", "jellyfin"]:
15+
raise Exception("Invalid user type. Must be one of: local, plex, jellyfin")
1416

1517
# Check if server is reachable
1618
try:
@@ -20,18 +22,34 @@ def __init__(self, server_url: str, api_key: str):
2022
except requests.exceptions.ConnectionError:
2123
raise Exception("Jellyseerr Server is not reachable")
2224

23-
# Check if api key is valid
24-
r = requests.get(f"{self.server_url}/auth/me")
25+
self.session = requests.Session()
26+
self.api_key = api_key
27+
if api_key is not None:
28+
r = self.session.headers.update({
29+
"X-Api-Key": api_key
30+
})
31+
if r.status_code != 200:
32+
raise Exception("Invalid jellyseerr API Key")
33+
if email is not None and password is not None:
34+
r = self.session.post(f"{self.server_url}/auth/{user_type}", json={
35+
"email": email,
36+
"password": password
37+
})
38+
if r.status_code != 200:
39+
raise Exception("Invalid jellyseerr email or password")
40+
41+
# Check if user is authenticated
42+
r = self.session.get(f"{self.server_url}/auth/me")
43+
if r.status_code != 200:
44+
raise Exception("jellyseerr user is not authenticated")
2545

2646

2747
def make_request(self, item):
2848
'''Request item from jellyseerr'''
2949

3050
# Search for item
31-
r = requests.get(f"{self.server_url}/search", params={
51+
r = self.session.get(f"{self.server_url}/search", params={
3252
"query": urllib.parse.quote_plus(item["title"])
33-
}, headers={
34-
"X-Api-Key": self.api_key
3553
})
3654

3755
# Find matching item
@@ -57,11 +75,9 @@ def make_request(self, item):
5775
if "mediaInfo" not in result or result["mediaInfo"]["jellyfinMediaId"] is None:
5876
# If it's not already in Jellyfin
5977
# Request item
60-
r = requests.post(f"{self.server_url}/request", json={
78+
r = self.session.post(f"{self.server_url}/request", json={
6179
"mediaType": result["mediaType"],
6280
"mediaId": mediaId,
63-
}, headers={
64-
"X-Api-Key": self.api_key
6581
})
6682
logger.info(f"Requested {item['title']} from Jellyseerr")
6783

0 commit comments

Comments
 (0)