]>
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 |
372ef119 | 43 | @base.ratelimit(minutes=5, requests=10) |
ed8116c7 | 44 | def get(self, filename): |
f110a9ff MT |
45 | mirror = self.backend.mirrors.get_for_download(filename, |
46 | country_code=self.current_country_code) | |
ed8116c7 | 47 | |
f110a9ff MT |
48 | # Send 404 if no mirror was found |
49 | if not mirror: | |
50 | raise tornado.web.HTTPError(404, "Could not find a mirror for %s" % filename) | |
ed8116c7 | 51 | |
f110a9ff MT |
52 | # Construct the redirection URL |
53 | url = mirror.build_url(filename) | |
54 | if not url: | |
55 | raise tornado.web.HTTPError(500, "Could not get download URL") | |
ed8116c7 | 56 | |
f110a9ff MT |
57 | # Log something |
58 | logging.info("Sending client from %s to %s" % (self.current_country_code or "unknown", url)) | |
ed8116c7 | 59 | |
f110a9ff MT |
60 | # Redirect the request |
61 | self.redirect(url) | |
ed8116c7 | 62 | |
f110a9ff MT |
63 | # Allow HEAD |
64 | head = get | |
6a9bfbc9 MT |
65 | |
66 | def write_error(self, status_code, **kwargs): | |
67 | """ | |
68 | Since we cannot deliver any CSS or similar here, | |
69 | we will have to redirect the user back to the main page | |
70 | """ | |
71 | self.redirect("https://www.ipfire.org/error/%s" % status_code) |