]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blob - webapp/handlers_download.py
adjust touch target on mobile Feature page
[people/shoehn/ipfire.org.git] / webapp / handlers_download.py
1 #!/usr/bin/python
2
3 import logging
4 import random
5 import tornado.web
6
7 import backend
8
9 from handlers_base import *
10
11 class DownloadsIndexHandler(BaseHandler):
12 def get(self):
13 releases = self.releases.get_all()
14
15 self.render("downloads-index.html", releases=releases)
16
17
18 class DownloadsReleaseHandler(BaseHandler):
19 def get(self, release):
20 release = self.releases.get_by_sname(release)
21
22 if not release:
23 release = self.releases.get_by_id(release)
24
25 if not release:
26 raise tornado.web.HTTPError(404)
27
28 self.render("downloads-item.html", release=release, latest=False)
29
30
31 class DownloadsLatestHandler(BaseHandler):
32 def get(self):
33 release = self.releases.get_latest()
34 if not release:
35 raise tornado.web.HTTPError(404)
36
37 self.render("downloads-item.html", release=release, latest=True)
38
39
40 class DownloadsOlderHandler(BaseHandler):
41 def get(self):
42 releases = self.releases.get_stable()
43
44 # Drop the latest release
45 if releases:
46 releases = releases[1:]
47
48 self.render("downloads-older.html", releases=releases)
49
50
51 class DownloadsDevelopmentHandler(BaseHandler):
52 def get(self):
53 releases = self.releases.get_unstable()
54
55 self.render("downloads-development.html", releases=releases)
56
57
58 class DownloadAllHandler(BaseHandler):
59 def get(self):
60 self.render("downloads-all.html",
61 releases=self.releases.get_stable())
62
63
64 class DownloadDevelopmentHandler(BaseHandler):
65 def get(self):
66 self.render("downloads-development.html",
67 releases=self.releases.get_unstable())
68
69
70 class DownloadFileHandler(BaseHandler):
71 def prepare(self):
72 self.set_header("Pragma", "no-cache")
73
74 def head(self, filename):
75 self.redirect_to_mirror(filename)
76
77 def get(self, filename):
78 self.redirect_to_mirror(filename, log_download=True)
79
80 def find_mirror(self, filename):
81 exists = self.mirrors.file_exists(filename)
82 if not exists:
83 raise tornado.web.HTTPError(404, "File not found: %s" % filename)
84
85 # Find mirrors located near to the user.
86 # If we have not found any, we use a random one.
87 remote_location = self.get_remote_location()
88
89 if remote_location:
90 mirrors = self.mirrors.get_for_location(remote_location, filename=filename)
91
92 if mirrors:
93 return random.choice(mirrors)
94
95 return self.mirrors.get_random(filename=filename)
96
97 def redirect_to_mirror(self, filename, log_download=False):
98 # Find a random mirror.
99 mirror = self.find_mirror(filename)
100
101 # Construct the redirection URL.
102 download_url = mirror.build_url(filename)
103
104 # Redirect the request.
105 self.redirect(download_url)
106
107 if not log_download:
108 return
109
110 remote_location = self.get_remote_location()
111 if remote_location:
112 country_code = remote_location.country
113 else:
114 country_code = None
115
116 self.db.execute("INSERT INTO log_download(filename, mirror, country_code) \
117 VALUES(%s, %s, %s)", filename, mirror.id, country_code)
118
119
120 class DownloadCompatHandler(BaseHandler):
121 def get(self, path, url):
122 for filename in self.mirrors.get_all_files():
123 if not filename.endswith("/%s" % url):
124 continue
125
126 self.redirect("/%s" % filename)
127 return
128
129 raise tornado.web.HTTPError(404)
130
131
132 class DownloadSplashHandler(BaseHandler):
133 def get(self):
134 self.render("download-splash.html")