]>
git.ipfire.org Git - ipfire.org.git/blob - src/web/download.py
8 class IndexHandler(base
.BaseHandler
):
10 release
= self
.backend
.releases
.get_latest()
12 raise tornado
.web
.HTTPError(404)
14 # Cache this response for one minute
17 # Redirect to latest release page
18 self
.redirect("/download/%s" % release
.slug
)
21 class ReleaseHandler(base
.BaseHandler
):
23 release
= self
.backend
.releases
.get_by_sname(slug
)
25 raise tornado
.web
.HTTPError(404)
27 # Cache this response for ten minutes
30 self
.render("download/release.html", release
=release
)
33 class ReleaseRedirectHandler(base
.BaseHandler
):
34 def get(self
, release
):
35 self
.redirect("https://www.ipfire.org/download/%s" % release
, permanent
=True)
38 class FileHandler(base
.BaseHandler
):
40 self
.set_header("Pragma", "no-cache")
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
)
47 # Send 404 if no mirror was found
49 raise tornado
.web
.HTTPError(404, "Could not find a mirror for %s" % filename
)
51 # Construct the redirection URL
52 url
= mirror
.build_url(filename
)
54 raise tornado
.web
.HTTPError(500, "Could not get download URL")
57 logging
.info("Sending client from %s to %s" % (self
.current_country_code
or "unknown", url
))
59 # Redirect the request
65 def write_error(self
, status_code
, **kwargs
):
67 Since we cannot deliver any CSS or similar here,
68 we will have to redirect the user back to the main page
70 self
.redirect("https://www.ipfire.org/error/%s" % status_code
)