]>
Commit | Line | Data |
---|---|---|
e77cd04c MT |
1 | #!/usr/bin/python |
2 | ||
f110a9ff | 3 | import logging |
e77cd04c MT |
4 | import tornado.web |
5 | ||
124a8404 | 6 | from . import base |
e77cd04c MT |
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 | ||
7e8e995d MT |
14 | # Cache this response for one minute |
15 | self.set_expires(60) | |
16 | ||
63e1f3a3 MT |
17 | # Redirect to latest release page |
18 | self.redirect("/download/%s" % release.slug) | |
e77cd04c MT |
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 | ||
7e8e995d MT |
27 | # Cache this response for ten minutes |
28 | self.set_expires(600) | |
29 | ||
e77cd04c MT |
30 | self.render("download/release.html", release=release) |
31 | ||
32 | ||
5cf65b4f MT |
33 | class ReleaseRedirectHandler(base.BaseHandler): |
34 | def get(self, release): | |
35 | self.redirect("https://www.ipfire.org/download/%s" % release, permanent=True) | |
36 | ||
37 | ||
ed8116c7 MT |
38 | class FileHandler(base.BaseHandler): |
39 | def prepare(self): | |
40 | self.set_header("Pragma", "no-cache") | |
41 | ||
cfe7d74c | 42 | @base.blacklisted |
ed8116c7 | 43 | def get(self, filename): |
f110a9ff MT |
44 | mirror = self.backend.mirrors.get_for_download(filename, |
45 | country_code=self.current_country_code) | |
ed8116c7 | 46 | |
f110a9ff MT |
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) | |
ed8116c7 | 50 | |
f110a9ff MT |
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") | |
ed8116c7 | 55 | |
f110a9ff MT |
56 | # Log something |
57 | logging.info("Sending client from %s to %s" % (self.current_country_code or "unknown", url)) | |
ed8116c7 | 58 | |
f110a9ff MT |
59 | # Redirect the request |
60 | self.redirect(url) | |
ed8116c7 | 61 | |
f110a9ff MT |
62 | # Allow HEAD |
63 | head = get | |
6a9bfbc9 MT |
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) |