summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/koofr.py
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2025-12-20 05:49:04 -0500
committerLibravatarUnit 193 <unit193@unit193.net>2025-12-20 05:49:04 -0500
commita24ec1647aeac35a63b744ea856011ad6e06be3b (patch)
treeae94416de786aeddd05d99559098f7f16bb103a6 /gallery_dl/extractor/koofr.py
parent33f8a8a37a9cba738ef25fb99955f0730da9eb48 (diff)
New upstream version 1.31.1.upstream/1.31.1
Diffstat (limited to 'gallery_dl/extractor/koofr.py')
-rw-r--r--gallery_dl/extractor/koofr.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/gallery_dl/extractor/koofr.py b/gallery_dl/extractor/koofr.py
new file mode 100644
index 0000000..9ebc133
--- /dev/null
+++ b/gallery_dl/extractor/koofr.py
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+
+# Copyright 2025 Mike Fährmann
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+
+"""Extractors for https://koofr.net/"""
+
+from .common import Extractor, Message
+from .. import text
+
+
+class KoofrSharedExtractor(Extractor):
+ """Base class for koofr extractors"""
+ category = "koofr"
+ subcategory = "shared"
+ root = "https://app.koofr.net"
+ pattern = (r"(?:https?://)?(?:"
+ r"(?:app\.)?koofr\.(?:net|eu)/links/([\w-]+)|"
+ r"k00\.fr/(\w+))")
+ example = "https://app.koofr.net/links/UUID"
+
+ def items(self):
+ uuid, code = self.groups
+ if code is not None:
+ uuid = self.request_location(
+ "https://k00.fr/" + code, method="GET").rpartition("/")[2]
+
+ url = f"{self.root}/api/v2/public/links/{uuid}"
+ referer = f"{self.root}/links/{uuid}"
+ password = self.config("password")
+ params = {"password": password or ""}
+ headers = {
+ "Referer" : referer,
+ "X-Client" : "newfrontend",
+ "X-Koofr-Version": "2.1",
+ "Sec-Fetch-Dest" : "empty",
+ "Sec-Fetch-Mode" : "cors",
+ "Sec-Fetch-Site" : "same-origin",
+ }
+ data = self.request_json(url, params=params, headers=headers)
+
+ name = data["name"]
+ file = text.nameext_from_name(name, data["file"])
+ file["_http_headers"] = {"Referer": referer}
+
+ root = data.get("publicUrlBase") or self.root
+ url = f"{root}/content/links/{uuid}/files/get/{name}?path=/&force="
+ if password:
+ url = f"{url}&password={password}"
+
+ yield Message.Directory, "", file
+ yield Message.Url, url, file