]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blame - webapp/handlers_download.py
Major update of the webapp.
[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):
0673d1b0
MT
86 # Get all mirrors...
87 mirrors = self.mirrors.get_all()
88 mirrors = mirrors.get_with_file(filename)
89 mirrors = mirrors.get_with_state("UP")
54af860e
MT
90
91 if not mirrors:
92 raise tornado.web.HTTPError(404, "File not found: %s" % filename)
940227cb 93
0673d1b0
MT
94 # Find mirrors located near to the user.
95 # If we have not found any, we use all.
9068dba1 96 remote_location = self.get_remote_location()
0673d1b0 97
9068dba1
MT
98 if remote_location:
99 mirrors_nearby = mirrors.get_for_location(remote_location)
940227cb 100
9068dba1
MT
101 if mirrors_nearby:
102 mirrors = mirrors_nearby
54af860e 103
9068dba1
MT
104 return mirrors.get_random()
105
106 def redirect_to_mirror(self, filename, log_download=False):
107 # Find a random mirror.
108 mirror = self.find_mirror(filename)
109
110 # Construct the redirection URL.
111 download_url = mirror.build_url(filename)
112
113 # Redirect the request.
114 self.redirect(download_url)
122c9026 115
9068dba1
MT
116 if not log_download:
117 return
118
119 remote_location = self.get_remote_location()
120 if remote_location:
121 country_code = remote_location.country
122 else:
123 country_code = None
124
125 self.db.execute("INSERT INTO log_download(filename, mirror, country_code) \
126 VALUES(%s, %s, %s)", filename, mirror.id, country_code)
edd297c4
MT
127
128
129class DownloadCompatHandler(BaseHandler):
130 def get(self, path, url):
131 _filename = None
132
133 for filename in self.mirrors.get_all_files():
134 if filename.endswith("/%s" % url):
135 _filename = filename
136 break
137
138 if not _filename:
139 raise tornado.web.HTTPError(404)
140
141 self.redirect("/%s" % _filename)
142
9068dba1 143
60024cc8
MT
144class DownloadSplashHandler(BaseHandler):
145 def get(self):
146 self.render("download-splash.html")