diff options
| author | 2025-03-10 03:45:04 -0400 | |
|---|---|---|
| committer | 2025-03-10 03:45:04 -0400 | |
| commit | b4181aecfa495a0926a9c065bf54897d64b14fbc (patch) | |
| tree | 1096876572bf7f51488a1a57cb9a5267e571947c /gallery_dl/extractor/bunkr.py | |
| parent | 59733b48db6fe610ee4024ce1e93d10e76538087 (diff) | |
| parent | 243d1f1beb4e4eb75a524f1aff948c47761a4f1d (diff) | |
Update upstream source from tag 'upstream/1.29.1'
Update to upstream version '1.29.1'
with Debian dir 67c32bd8f39b0155ec16fb6af065feb7f1333f75
Diffstat (limited to 'gallery_dl/extractor/bunkr.py')
| -rw-r--r-- | gallery_dl/extractor/bunkr.py | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/gallery_dl/extractor/bunkr.py b/gallery_dl/extractor/bunkr.py index 201b8f4..d74f59c 100644 --- a/gallery_dl/extractor/bunkr.py +++ b/gallery_dl/extractor/bunkr.py @@ -11,7 +11,6 @@ from .common import Extractor from .lolisafe import LolisafeAlbumExtractor from .. import text, util, config, exception -import binascii import random if config.get(("extractor", "bunkr"), "tlds"): @@ -71,6 +70,17 @@ class BunkrAlbumExtractor(LolisafeAlbumExtractor): domain = self.groups[0] or self.groups[1] if domain not in LEGACY_DOMAINS: self.root = "https://" + domain + + def _init(self): + LolisafeAlbumExtractor._init(self) + + endpoint = self.config("endpoint") + if not endpoint: + endpoint = self.root_dl + "/api/_001" + elif endpoint[0] == "/": + endpoint = self.root_dl + endpoint + + self.endpoint = endpoint self.offset = 0 def skip(self, num): @@ -169,13 +179,13 @@ class BunkrAlbumExtractor(LolisafeAlbumExtractor): data_id = text.extr(page, 'data-file-id="', '"') referer = self.root_dl + "/file/" + data_id - url = self.root_dl + "/api/vs" - headers = {"Referer": referer} - data = self.request( - url, method="POST", headers=headers, json={"id": data_id}).json() + headers = {"Referer": referer, "Origin": self.root_dl} + data = self.request(self.endpoint, method="POST", headers=headers, + json={"id": data_id}).json() if data.get("encrypted"): - file_url = self._decrypt_url(data["url"], data["timestamp"]) + key = "SECRET_KEY_{}".format(data["timestamp"] // 3600) + file_url = util.decrypt_xor(data["url"], key.encode()) else: file_url = data["url"] @@ -192,16 +202,6 @@ class BunkrAlbumExtractor(LolisafeAlbumExtractor): "_http_validate": self._validate, } - def _decrypt_url(self, encrypted_b64, timestamp): - encrypted_bytes = binascii.a2b_base64(encrypted_b64) - key = "SECRET_KEY_{}".format(timestamp // 3600).encode() - div = len(key) - - return bytes([ - encrypted_bytes[i] ^ key[i % div] - for i in range(len(encrypted_bytes)) - ]).decode() - def _validate(self, response): if response.history and response.url.endswith("/maintenance-vid.mp4"): self.log.warning("File server in maintenance mode") |
