Skip to content

Commit b046118

Browse files
committed
Fix
- fixed the issue with the redirect being security threat
1 parent 803995b commit b046118

File tree

2 files changed

+19
-20
lines changed

2 files changed

+19
-20
lines changed

custom_components/plex_recently_added/parser.py

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,17 @@ def parse_library(root):
1919

2020
return output
2121

22-
import logging
23-
_LOGGER = logging.getLogger(__name__)
22+
def extract_metadata_and_type(path):
23+
pattern = re.compile(r"/library/metadata/(\d+)/(thumb|art)/(\d+)")
24+
match = pattern.search(path)
25+
26+
if match:
27+
metadata_id = match.group(1)
28+
art_type = match.group(2)
29+
art_id = match.group(3)
30+
return metadata_id, art_type, art_id
31+
32+
return None
2433

2534
def parse_data(data, max, base_url, token, identifier, section_key, images_base_url, is_all = False):
2635
if is_all:
@@ -71,24 +80,12 @@ def parse_data(data, max, base_url, token, identifier, section_key, images_base_
7180
data_output["rating"] = ('\N{BLACK STAR} ' + str(item.get("rating"))) if int(float(item.get("rating", 0))) > 0 else ''
7281
data_output['summary'] = item.get('summary', '')
7382
data_output['trailer'] = item.get('trailer')
74-
data_output["poster"] = (f'{images_base_url}?path={thumb}') if thumb else ""
75-
data_output["fanart"] = (f'{images_base_url}?path={art}') if art else ""
83+
thumb_IDs = extract_metadata_and_type(thumb)
84+
data_output["poster"] = (f'{images_base_url}?metadata={thumb_IDs[0]}&thumb={thumb_IDs[2]}') if thumb_IDs else ""
85+
art_IDs = extract_metadata_and_type(art)
86+
data_output["fanart"] = (f'{images_base_url}?metadata={art_IDs[0]}&art={art_IDs[2]}') if art_IDs else ""
7687
data_output["deep_link"] = deep_link if identifier else None
7788

78-
_LOGGER.warn({
79-
"fanart": {
80-
"self": (f'{images_base_url}?path={item.get("art", None)}') if item.get("art", None) else "",
81-
"grandparent": (f'{images_base_url}?path={item.get("grandparentArt", None)}') if item.get("grandparentArt", None) else "",
82-
"current": (f'{images_base_url}?path={art}') if art else ""
83-
},
84-
"poster": {
85-
"self": (f'{images_base_url}?path={item.get("thumb", None)}') if item.get("thumb", None) else "",
86-
"parent": (f'{images_base_url}?path={item.get("parentThumb", None)}') if item.get("parentThumb", None) else "",
87-
"grandparent": (f'{images_base_url}?path={item.get("grandparentThumb", None)}') if item.get("grandparentThumb", None) else "",
88-
"current": (f'{images_base_url}?path={thumb}') if thumb else ""
89-
}
90-
})
91-
9289
output.append(data_output)
9390

9491
return output

custom_components/plex_recently_added/redirect.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@ def __init__(self, config_entry: ConfigEntry):
2424
self.url = f'/{config_entry.data[CONF_NAME].lower() + "_" if len(config_entry.data[CONF_NAME]) > 0 else ""}plex_recently_added'
2525

2626
async def get(self, request):
27-
path = request.query.get("path", "")
28-
url = f'{self._base_url}{path}?X-Plex-Token={self._token}'
27+
metadataId = int(request.query.get("metadata", 0))
28+
thumbId = int(request.query.get("thumb", 0))
29+
artId = int(request.query.get("art", 0))
30+
url = f'{self._base_url}/library/metadata/{metadataId}/{"thumb" if thumbId != 0 else "art"}/{thumbId if thumbId != 0 else artId if artId != 0 else ""}?X-Plex-Token={self._token}'
2931

3032
async with ClientSession() as session:
3133
async with session.get(url) as res:

0 commit comments

Comments
 (0)