]> git.ipfire.org Git - ipfire.org.git/blob - src/web/download.py
download: Do not check any RBLs any more
[ipfire.org.git] / src / web / download.py
1 #!/usr/bin/python
2
3 import logging
4 import tornado.web
5
6 from . import base
7
8 class IndexHandler(base.BaseHandler):
9 def get(self):
10 release = self.backend.releases.get_latest()
11 if not release:
12 raise tornado.web.HTTPError(404)
13
14 # Cache this response for one minute
15 self.set_expires(60)
16
17 # Redirect to latest release page
18 self.redirect("/download/%s" % release.slug)
19
20
21 class ReleaseHandler(base.BaseHandler):
22 def get(self, slug):
23 release = self.backend.releases.get_by_sname(slug)
24 if not release:
25 raise tornado.web.HTTPError(404)
26
27 # Cache this response for ten minutes
28 self.set_expires(600)
29
30 self.render("download/release.html", release=release)
31
32
33 class ReleaseRedirectHandler(base.BaseHandler):
34 def get(self, release):
35 self.redirect("https://www.ipfire.org/download/%s" % release, permanent=True)
36
37
38 class FileHandler(base.BaseHandler):
39 def prepare(self):
40 self.set_header("Pragma", "no-cache")
41
42 @base.ratelimit(minutes=5, requests=10)
43 def get(self, filename):
44 mirror = self.backend.mirrors.get_for_download(filename,
45 country_code=self.current_country_code)
46
47 # Send 404 if no mirror was found
48 if not mirror:
49 raise tornado.web.HTTPError(404, "Could not find a mirror for %s" % filename)
50
51 # Construct the redirection URL
52 url = mirror.build_url(filename)
53 if not url:
54 raise tornado.web.HTTPError(500, "Could not get download URL")
55
56 # Log something
57 logging.info("Sending client from %s to %s" % (self.current_country_code or "unknown", url))
58
59 # Redirect the request
60 self.redirect(url)
61
62 # Allow HEAD
63 head = get
64
65 def write_error(self, status_code, **kwargs):
66 """
67 Since we cannot deliver any CSS or similar here,
68 we will have to redirect the user back to the main page
69 """
70 self.redirect("https://www.ipfire.org/error/%s" % status_code)