From: Michael Tremer Date: Sat, 24 Jun 2023 15:14:17 +0000 (+0000) Subject: releases: Drop support for torrent files X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e40f251bc3e3076afdb9ee989c51de4359637ecd;p=ipfire.org.git releases: Drop support for torrent files The yabencode module is not available any more and I cannot find a suitable replacement. Signed-off-by: Michael Tremer --- diff --git a/requirements.txt b/requirements.txt index 5158c37c..7fde1ae8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -35,5 +35,4 @@ tornado==6.0.2 twython==3.7.0 urllib3==1.24.3 webencodings==0.5.1 -yabencode==0.2.0 zxcvbn==4.4.27 diff --git a/src/backend/releases.py b/src/backend/releases.py index 5786dde1..eeab2d9f 100644 --- a/src/backend/releases.py +++ b/src/backend/releases.py @@ -5,19 +5,11 @@ import logging import os import re import urllib.parse -import yabencode from . import database from .misc import Object from .decorators import * -TRACKERS = ( - "http://ipv4.tracker.ipfire.org:6969/announce", - "udp://ipv4.tracker.ipfire.org:6969", - "http://ipv6.tracker.ipfire.org:6969/announce", - "udp://ipv6.tracker.ipfire.org:6969", -) - class File(Object): def __init__(self, backend, release, id, data=None): Object.__init__(self, backend) @@ -59,9 +51,6 @@ class File(Object): if filename.endswith(".iso"): return "iso" - elif filename.endswith(".torrent"): - return "torrent" - elif "xen" in filename: if "downloader" in filename: return "xen-downloader" @@ -104,7 +93,6 @@ class File(Object): "armv5tel" : _("Flash Image"), "armv5tel-scon" : _("Flash Image with serial console"), "iso" : _("ISO Image"), - "torrent" : _("Torrent File"), "flash" : _("Flash Image"), "alix" : _("Flash Image with serial console"), "usbfdd" : _("USB FDD Image"), @@ -122,7 +110,6 @@ class File(Object): def prio(self): priorities = { "iso" : 10, - "torrent" : 20, "flash" : 40, "alix" : 41, "usbfdd" : 31, @@ -132,7 +119,7 @@ class File(Object): "xen" : 50, "xen-downloader": 51, } - + try: return priorities[self.type] except KeyError: @@ -168,35 +155,6 @@ class File(Object): return "N/A" - @property - def torrent_hash(self): - return self.data.get("torrent_hash", None) - - @property - def torrent_url(self): - if self.torrent_hash: - return "%s.torrent" % self.url - - @property - def magnet_link(self): - # Don't return anything if we have no torrent hash. - if self.torrent_hash is None: - return - - s = "magnet:?xt=urn:btih:%s" % self.torrent_hash - - #s += "&xl=%d" % self.size - s += "&dn=%s" % urllib.parse.quote(self.basename) - - # Add our tracker. - for tracker in TRACKERS: - s += "&tr=%s" % tracker - - # Add web download URL - s += "&as=%s" % urllib.parse.quote(self.url) - - return s - class Release(Object): def __init__(self, backend, id, data=None): @@ -276,18 +234,6 @@ class Release(Object): if f.arch == arch: yield f - @property - def torrents(self): - torrents = [] - - for file in self.files: - if not file.torrent_hash: - continue - - torrents.append(file) - - return torrents - @property def name(self): return self.__data.name @@ -380,39 +326,9 @@ class Release(Object): hash_sha1 = self.__file_hash(filename, "sha1") filesize = os.path.getsize(filename) - # Check if there is a torrent download available for this file: - torrent_hash = "" - torrent_file = "%s.torrent" % filename - if os.path.exists(torrent_file): - torrent_hash = self.torrent_read_hash(torrent_file) - self.db.execute("INSERT INTO files(releases, filename, filesize, \ - sha256, sha1, torrent_hash) VALUES(%s, %s, %s, %s, %s, %s)", - self.id, _filename, filesize, hash_sha256, hash_sha1, torrent_hash) - - # Search for all files that miss a torrent hash. - files = self.db.query("SELECT id, filename FROM files \ - WHERE releases = %s AND torrent_hash IS NULL", self.id) - - for file in files: - path = os.path.join(basepath, file.filename) - - torrent_file = "%s.torrent" % path - if os.path.exists(torrent_file): - torrent_hash = self.torrent_read_hash(torrent_file) - - self.db.execute("UPDATE files SET torrent_hash = %s WHERE id = %s", - torrent_hash, file.id) - - def torrent_read_hash(self, filename): - with open(filename, "rb") as f: - metainfo = yabencode.decode(f) - metainfo = yabencode.encode(metainfo["info"]) - - h = hashlib.new("sha1") - h.update(metainfo) - - return h.hexdigest() + sha256, sha1) VALUES(%s, %s, %s, %s, %s)", + self.id, _filename, filesize, hash_sha256, hash_sha1) def supports_arch(self, arch): return arch in ("x86_64", "i586") @@ -567,18 +483,6 @@ class Releases(Object): return releases - def get_file_for_torrent_hash(self, torrent_hash): - file = self.db.get("SELECT id, releases FROM files WHERE torrent_hash = %s LIMIT 1", - torrent_hash) - - if not file: - return - - release = Release(self.backend, file.releases) - file = File(self.backend, release, file.id) - - return file - async def scan_files(self, basepath="/pub/mirror"): for release in self: logging.debug("Scanning %s..." % release)