]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blame - webapp/handlers_download.py
adjust touch target on mobile Feature page
[people/shoehn/ipfire.org.git] / webapp / handlers_download.py
CommitLineData
940227cb
MT
1#!/usr/bin/python
2
54af860e 3import logging
940227cb 4import random
940227cb
MT
5import tornado.web
6
54af860e
MT
7import backend
8
940227cb
MT
9from handlers_base import *
10
11class DownloadsIndexHandler(BaseHandler):
12 def get(self):
7771acea
MT
13 releases = self.releases.get_all()
14
15 self.render("downloads-index.html", releases=releases)
940227cb
MT
16
17
18class DownloadsReleaseHandler(BaseHandler):
19 def get(self, release):
9068dba1
MT
20 release = self.releases.get_by_sname(release)
21
22 if not release:
23 release = self.releases.get_by_id(release)
24
940227cb
MT
25 if not release:
26 raise tornado.web.HTTPError(404)
27
7771acea 28 self.render("downloads-item.html", release=release, latest=False)
940227cb
MT
29
30
31class DownloadsLatestHandler(BaseHandler):
32 def get(self):
33 release = self.releases.get_latest()
34 if not release:
35 raise tornado.web.HTTPError(404)
36
7771acea 37 self.render("downloads-item.html", release=release, latest=True)
940227cb
MT
38
39
40class 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
51class DownloadsDevelopmentHandler(BaseHandler):
52 def get(self):
53 releases = self.releases.get_unstable()
54
55 self.render("downloads-development.html", releases=releases)
56
57
940227cb
MT
58class DownloadAllHandler(BaseHandler):
59 def get(self):
60 self.render("downloads-all.html",
61 releases=self.releases.get_stable())
62
63
64class DownloadDevelopmentHandler(BaseHandler):
65 def get(self):
66 self.render("downloads-development.html",
67 releases=self.releases.get_unstable())
68
69
70class DownloadFileHandler(BaseHandler):
9068dba1 71 def prepare(self):
54af860e 72 self.set_header("Pragma", "no-cache")
54af860e 73
9068dba1
MT
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):
5488a9f4
MT
81 exists = self.mirrors.file_exists(filename)
82 if not exists:
54af860e 83 raise tornado.web.HTTPError(404, "File not found: %s" % filename)
940227cb 84
0673d1b0 85 # Find mirrors located near to the user.
5488a9f4 86 # If we have not found any, we use a random one.
9068dba1 87 remote_location = self.get_remote_location()
0673d1b0 88
9068dba1 89 if remote_location:
5488a9f4 90 mirrors = self.mirrors.get_for_location(remote_location, filename=filename)
940227cb 91
5488a9f4
MT
92 if mirrors:
93 return random.choice(mirrors)
54af860e 94
5488a9f4 95 return self.mirrors.get_random(filename=filename)
9068dba1
MT
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)
122c9026 106
9068dba1
MT
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)
edd297c4
MT
118
119
120class DownloadCompatHandler(BaseHandler):
121 def get(self, path, url):
edd297c4 122 for filename in self.mirrors.get_all_files():
5488a9f4
MT
123 if not filename.endswith("/%s" % url):
124 continue
edd297c4 125
5488a9f4
MT
126 self.redirect("/%s" % filename)
127 return
edd297c4 128
5488a9f4 129 raise tornado.web.HTTPError(404)
edd297c4 130
9068dba1 131
60024cc8
MT
132class DownloadSplashHandler(BaseHandler):
133 def get(self):
134 self.render("download-splash.html")