// pypi package
quasarr
Quasarr connects JDownloader with Radarr, Sonarr and Magazarr. It also decrypts links protected by CAPTCHAs.
versions
214
first publish
2024-08-23
tarball
1,393,217 B
AUTO-PUBLISHED·1 version indexed·latest published 2026-06-03
// exfil path
what is read → where it shipssteals
- ● Chromium logins
- ○ clipboard
sends to
- ⌖ 3.0.0.0
// offending code· @4.5.3· 3 files flagged
- @4.5.3··AUTO-PUBLISHEDheuristic 20/100static flags 9llm skippedpypi-sdist-setup-pypypi-no-authormature-packagereads-env-varschild-process-spawnbase64-decodepy-requests-postreads-chromium-credspy-socket-connecthex-decodediscord-webhookclipboard-access
// offending code· 3 files flaggedpatterns: 9
--- quasarr-4.5.3/cli_tester.py (excerpt) --- # -*- coding: utf-8 -*- # Quasarr # Project by https://github.com/rix1337 import argparse import concurrent.futures import os import re import sys import threading import time import webbrowser import xml.etree.ElementTree as ET from base64 import urlsafe_b64decode from datetime import datetime from html import escape from urllib.parse import urlparse import requests # Try importing dependencies try: import questionary from prompt_toolkit import Application, PromptSession from prompt_toolkit.formatted_text import HTML, to_formatted_text from prompt_toolkit.key_binding import KeyBindings from prompt_toolkit.keys import Keys from prompt_toolkit.layout.containers import HSplit, Window from prompt_toolkit.layout.controls import FormattedTextControl from prompt_toolkit.layout.layout import Layout from prompt_toolkit.utils import get_cwidth from rich.console import Console from rich.panel import Panel from rich.progress import ( BarColumn, Progress, SpinnerColumn, TaskProgressColumn, TextColumn, ) from rich.table import Table except ImportError: print("Please install 'rich' and 'questionary' to use this tool.") print("uv sync --group dev") sys.exit(1) from dotenv import load_dotenv load_dotenv(override=True) # --- Configuration & Constants --- DEFAULT_URL = f"http://localhost:{int(os.environ.get('PORT', '8080'))}" USER_AGENT_RADARR = "Radarr/3.0.0.0 (Mock Client for Tes --- quasarr-4.5.3/pre-commit.py (excerpt) --- import json import os import re import subprocess import sys import tomllib from pathlib import Path # --- CONFIGURATION --- VERSION_FILE = Path("quasarr/providers/version.py") PYPROJECT_FILE = Path("pyproject.toml") def run(cmd, check=True, capture=False, text=True): """Helper to run shell commands comfortably.""" print(f"⚙️ Exec: {' '.join(cmd)}") return subprocess.run(cmd, check=check, capture_output=capture, text=text) def get_env(key, default=None): return os.environ.get(key, default) def git_status_has_changes(): return bool(run(["git", "status", "--porcelain"], capture=True).stdout.strip()) def read_text_preserve_newlines(path): with path.open(encoding="utf-8", newline="") as f: return f.read() def write_text_preserve_newlines(path, content): with path.open("w", encoding="utf-8", newline="") as f: f.write(content) # --- TASKS --- def task_format(): print("\n�� --- 1. FORMATTING & SYNTAX CHECK ---") # Runs Ruff using the rules defined in pyproject.toml result = run(["uv", "run", "ruff", "check", "--fix", "."], check=False) if result.returncode != 0: print("❌ Critical errors or syntax issues found. Fix them before staging.") sys.exit(1) # Standard formatting (indentation/spacing) run(["uv", "run", "ruff", "format", "."], check=False) if git_status_has_changes(): print("✅ Linting fixes applied and staged.") run(["git", "add", "."]) return Tru --- quasarr-4.5.3/quasarr/__init__.py (excerpt) --- # -*- coding: utf-8 -*- # Quasarr # Project by https://github.com/rix1337 import multiprocessing import os import sys import tempfile import time from dotenv import load_dotenv import quasarr.providers.web_server from quasarr.api import get_api from quasarr.constants import FALLBACK_USER_AGENT from quasarr.providers import shared_state, version from quasarr.providers.hostname_issues import clear_all_hostname_issues from quasarr.providers.log import ( crit, debug, error, get_log_level, info, log_level_names, ) from quasarr.providers.notifications import send_notification from quasarr.providers.notifications.helpers.notification_types import NotificationType from quasarr.providers.utils import ( Unbuffered, check_flaresolverr, check_ip, extract_allowed_keys, validate_address, ) from quasarr.search.sources.helpers import ( get_login_required_hostnames, get_radarr_required_hostnames, get_sonarr_required_hostnames, ) from quasarr.storage.config import Config, get_clean_hostnames from quasarr.storage.setup import ( flaresolverr_config, hostname_credentials_config, hostnames_config, initialize_notification_settings, initialize_radarr_client, initialize_sonarr_client, initialize_timeout_slow_mode_settings, is_radarr_configured, is_radarr_skipped, is_sonarr_configured, is_sonarr_skipped, jdownloader_config, path_config, radarr_config, sonarr_config, ) from quasarr.sto
