]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blame - webapp/handlers_download.py
planet: Only publish articles that are actually published.
[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
58class DownloadHandler(BaseHandler):
59 def get(self):
60 self.render("downloads.html", release=self.releases.get_latest())
61
62
63class DownloadAllHandler(BaseHandler):
64 def get(self):
65 self.render("downloads-all.html",
66 releases=self.releases.get_stable())
67
68
69class DownloadDevelopmentHandler(BaseHandler):
70 def get(self):
71 self.render("downloads-development.html",
72 releases=self.releases.get_unstable())
73
74
75class DownloadFileHandler(BaseHandler):
9068dba1 76 def prepare(self):
54af860e 77 self.set_header("Pragma", "no-cache")
54af860e 78
9068dba1
MT
79 def head(self, filename):
80 self.redirect_to_mirror(filename)
81
82 def get(self, filename):
83 self.redirect_to_mirror(filename, log_download=True)
84
85 def find_mirror(self, filename):
5488a9f4
MT
86 exists = self.mirrors.file_exists(filename)
87 if not exists:
54af860e 88 raise tornado.web.HTTPError(404, "File not found: %s" % filename)
940227cb 89
0673d1b0 90 # Find mirrors located near to the user.
5488a9f4 91 # If we have not found any, we use a random one.
9068dba1 92 remote_location = self.get_remote_location()
0673d1b0 93
9068dba1 94 if remote_location:
5488a9f4 95 mirrors = self.mirrors.get_for_location(remote_location, filename=filename)
940227cb 96
5488a9f4
MT
97 if mirrors:
98 return random.choice(mirrors)
54af860e 99
5488a9f4 100 return self.mirrors.get_random(filename=filename)
9068dba1
MT
101
102 def redirect_to_mirror(self, filename, log_download=False):
103 # Find a random mirror.
104 mirror = self.find_mirror(filename)
105
106 # Construct the redirection URL.
107 download_url = mirror.build_url(filename)
108
109 # Redirect the request.
110 self.redirect(download_url)
122c9026 111
9068dba1
MT
112 if not log_download:
113 return
114
115 remote_location = self.get_remote_location()
116 if remote_location:
117 country_code = remote_location.country
118 else:
119 country_code = None
120
121 self.db.execute("INSERT INTO log_download(filename, mirror, country_code) \
122 VALUES(%s, %s, %s)", filename, mirror.id, country_code)
edd297c4
MT
123
124
125class DownloadCompatHandler(BaseHandler):
126 def get(self, path, url):
edd297c4 127 for filename in self.mirrors.get_all_files():
5488a9f4
MT
128 if not filename.endswith("/%s" % url):
129 continue
edd297c4 130
5488a9f4
MT
131 self.redirect("/%s" % filename)
132 return
edd297c4 133
5488a9f4 134 raise tornado.web.HTTPError(404)
edd297c4 135
9068dba1 136
60024cc8
MT
137class DownloadSplashHandler(BaseHandler):
138 def get(self):
139 self.render("download-splash.html")