]> git.ipfire.org Git - ipfire.org.git/blobdiff - src/backend/releases.py
backend: show checksum on thank-you page
[ipfire.org.git] / src / backend / releases.py
index 5786dde19c2c6fec1ec6ea7364d8fed282432804..895c6ca300690dad5f4f9d4ab84fe129195b36ce 100644 (file)
@@ -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
@@ -304,16 +250,6 @@ class Release(Object):
                if self.__data.blog_id:
                        return self.backend.blog.get_by_id(self.__data.blog_id)
 
-       @property
-       def fireinfo_id(self):
-               name = self.sname.replace("ipfire-", "IPFire ").replace("-", " - ")
-
-               res = self.db.get("SELECT id FROM fireinfo_releases \
-                       WHERE name = %s", name)
-
-               if res:
-                       return res.id
-
        @property
        def stable(self):
                return self.__data.stable
@@ -372,7 +308,7 @@ class Release(Object):
                        if _filename in files:
                                continue
 
-                       if filename.endswith(".md5"):
+                       if filename.endswith(".b2") or filename.endswith(".md5"):
                                continue
 
                        logging.info("Hashing %s..." % filename)
@@ -380,39 +316,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")
@@ -455,10 +361,13 @@ class Release(Object):
 
        # Fireinfo Stuff
 
-       @property
-       def penetration(self):
+       def get_usage(self, when=None):
+               name = self.sname.replace("ipfire-", "IPFire ").replace("-", " - ")
+
                # Get penetration from fireinfo
-               return self.backend.fireinfo.get_release_penetration(self)
+               releases = self.backend.fireinfo.get_releases_map(when=when)
+
+               return releases.get(name, 0)
 
 
 class Releases(Object):
@@ -567,21 +476,15 @@ 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)
 
                        with self.db.transaction():
                                release.scan_files(basepath=basepath)
+
+       def get_file_by_filename(self, filename):
+               ret = self.db.get("SELECT * FROM files WHERE filename = %s", filename)
+
+               if ret:
+                       return File(self.backend, None, ret.id, data=ret)