aboutsummaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/bunkr.py
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2025-03-10 03:45:04 -0400
committerLibravatarUnit 193 <unit193@unit193.net>2025-03-10 03:45:04 -0400
commitb4181aecfa495a0926a9c065bf54897d64b14fbc (patch)
tree1096876572bf7f51488a1a57cb9a5267e571947c /gallery_dl/extractor/bunkr.py
parent59733b48db6fe610ee4024ce1e93d10e76538087 (diff)
parent243d1f1beb4e4eb75a524f1aff948c47761a4f1d (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.py32
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")