quasarr 1.26.6__tar.gz → 1.26.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of quasarr might be problematic. Click here for more details.
- {quasarr-1.26.6 → quasarr-1.26.7}/PKG-INFO +1 -1
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/__init__.py +5 -60
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/version.py +1 -1
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr.egg-info/PKG-INFO +1 -1
- {quasarr-1.26.6 → quasarr-1.26.7}/LICENSE +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/README.md +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/api/__init__.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/api/arr/__init__.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/api/captcha/__init__.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/api/config/__init__.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/api/sponsors_helper/__init__.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/api/statistics/__init__.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/__init__.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/linkcrypters/__init__.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/linkcrypters/al.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/linkcrypters/filecrypt.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/linkcrypters/hide.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/packages/__init__.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/sources/__init__.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/sources/al.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/sources/by.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/sources/dd.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/sources/dj.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/sources/dl.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/sources/dt.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/sources/dw.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/sources/he.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/sources/mb.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/sources/nk.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/sources/nx.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/sources/sf.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/sources/sj.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/sources/sl.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/sources/wd.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/downloads/sources/wx.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/__init__.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/cloudflare.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/html_images.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/html_templates.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/imdb_metadata.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/log.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/myjd_api.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/notifications.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/obfuscated.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/sessions/__init__.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/sessions/al.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/sessions/dd.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/sessions/dl.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/sessions/nx.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/shared_state.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/statistics.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/providers/web_server.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/__init__.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/__init__.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/al.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/by.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/dd.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/dj.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/dl.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/dt.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/dw.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/fx.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/he.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/mb.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/nk.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/nx.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/sf.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/sj.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/sl.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/wd.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/search/sources/wx.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/storage/__init__.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/storage/config.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/storage/setup.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr/storage/sqlite_database.py +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr.egg-info/SOURCES.txt +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr.egg-info/dependency_links.txt +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr.egg-info/entry_points.txt +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr.egg-info/not-zip-safe +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr.egg-info/requires.txt +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/quasarr.egg-info/top_level.txt +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/setup.cfg +0 -0
- {quasarr-1.26.6 → quasarr-1.26.7}/setup.py +0 -0
|
@@ -120,19 +120,13 @@ def run():
|
|
|
120
120
|
if arguments.hostnames:
|
|
121
121
|
hostnames_link = arguments.hostnames
|
|
122
122
|
if is_valid_url(hostnames_link):
|
|
123
|
-
if "pastebin.com" in hostnames_link:
|
|
124
|
-
hostnames_link = make_raw_pastebin_link(hostnames_link)
|
|
125
|
-
|
|
126
123
|
print(f"Extracting hostnames from {hostnames_link}...")
|
|
127
124
|
allowed_keys = supported_hostnames
|
|
128
125
|
max_keys = len(allowed_keys)
|
|
129
126
|
shorthand_list = ', '.join(
|
|
130
127
|
[f'"{key}"' for key in allowed_keys[:-1]]) + ' and ' + f'"{allowed_keys[-1]}"'
|
|
131
128
|
print(f'There are up to {max_keys} hostnames currently supported: {shorthand_list}')
|
|
132
|
-
|
|
133
|
-
data = build_ini_from_ini_html(hostnames_link)
|
|
134
|
-
else:
|
|
135
|
-
data = requests.get(hostnames_link).text
|
|
129
|
+
data = requests.get(hostnames_link).text
|
|
136
130
|
results = extract_kv_pairs(data, allowed_keys)
|
|
137
131
|
|
|
138
132
|
extracted_hostnames = 0
|
|
@@ -397,60 +391,9 @@ def check_flaresolverr(shared_state, flaresolverr_url):
|
|
|
397
391
|
print(f"Failed to connect to FlareSolverr: {e}")
|
|
398
392
|
return False
|
|
399
393
|
|
|
400
|
-
|
|
401
|
-
def make_raw_pastebin_link(url):
|
|
402
|
-
"""
|
|
403
|
-
Takes a Pastebin URL and ensures it is a raw link.
|
|
404
|
-
If it's not a Pastebin URL, it returns the URL unchanged.
|
|
405
|
-
"""
|
|
406
|
-
# Check if the URL is already a raw Pastebin link
|
|
407
|
-
if re.match(r"https?://(?:www\.)?pastebin\.com/raw/\w+", url):
|
|
408
|
-
return url # Already raw, return as is
|
|
409
|
-
|
|
410
|
-
# Check if the URL is a standard Pastebin link
|
|
411
|
-
pastebin_pattern = r"https?://(?:www\.)?pastebin\.com/(\w+)"
|
|
412
|
-
match = re.match(pastebin_pattern, url)
|
|
413
|
-
|
|
414
|
-
if match:
|
|
415
|
-
paste_id = match.group(1)
|
|
416
|
-
print(f"The link you provided is not a raw Pastebin link. Attempting to convert it to a raw link from {url}...")
|
|
417
|
-
return f"https://pastebin.com/raw/{paste_id}"
|
|
418
|
-
|
|
419
|
-
return url # Not a Pastebin link, return unchanged
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
def build_ini_from_ini_html(url: str) -> str:
|
|
423
|
-
def get(u: str) -> str:
|
|
424
|
-
r = requests.get(u, timeout=10)
|
|
425
|
-
r.raise_for_status()
|
|
426
|
-
return r.text
|
|
427
|
-
|
|
428
|
-
parsed = urlparse(url)
|
|
429
|
-
params = parse_qs(parsed.query)
|
|
430
|
-
|
|
431
|
-
data_js = get(urljoin(f"{parsed.scheme}://{parsed.netloc}", "data.js"))
|
|
432
|
-
|
|
433
|
-
hostnames = dukpy.evaljs("""
|
|
434
|
-
var window = {};
|
|
435
|
-
%s
|
|
436
|
-
window.HOSTNAMES;
|
|
437
|
-
""" % data_js)
|
|
438
|
-
|
|
439
|
-
excluded = set()
|
|
440
|
-
if "exclude" in params:
|
|
441
|
-
excluded = set(params["exclude"][0].split(","))
|
|
442
|
-
|
|
443
|
-
lines = []
|
|
444
|
-
for h in hostnames:
|
|
445
|
-
if h["key"] not in excluded:
|
|
446
|
-
lines.append(f"{h['key']} = {h['name']}")
|
|
447
|
-
|
|
448
|
-
return "\n".join(lines) + "\n"
|
|
449
|
-
|
|
450
|
-
|
|
451
394
|
def is_valid_url(url):
|
|
452
|
-
if "
|
|
453
|
-
print("Example URL detected. Please provide a valid URL found on pastebin or
|
|
395
|
+
if "/raw/eX4Mpl3" in url:
|
|
396
|
+
print("Example URL detected. Please provide a valid URL found on pastebin or any other public site!")
|
|
454
397
|
return False
|
|
455
398
|
|
|
456
399
|
parsed = urlparse(url)
|
|
@@ -496,6 +439,8 @@ def extract_kv_pairs(input_text, allowed_keys):
|
|
|
496
439
|
if match:
|
|
497
440
|
key, value = match.groups()
|
|
498
441
|
kv_pairs[key] = value
|
|
442
|
+
elif "[Hostnames]" in line:
|
|
443
|
+
pass
|
|
499
444
|
else:
|
|
500
445
|
print(f"Skipping line because it does not contain any supported hostname: {line}")
|
|
501
446
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|