]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blame - webapp/handlers_download.py
planet: Make the publish radio button work.
[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):
20 release = self.releases.get_by_id(release)
21 if not release:
22 raise tornado.web.HTTPError(404)
23
7771acea 24 self.render("downloads-item.html", release=release, latest=False)
940227cb
MT
25
26
27class DownloadsLatestHandler(BaseHandler):
28 def get(self):
29 release = self.releases.get_latest()
30 if not release:
31 raise tornado.web.HTTPError(404)
32
7771acea 33 self.render("downloads-item.html", release=release, latest=True)
940227cb
MT
34
35
36class DownloadsOlderHandler(BaseHandler):
37 def get(self):
38 releases = self.releases.get_stable()
39
40 # Drop the latest release
41 if releases:
42 releases = releases[1:]
43
44 self.render("downloads-older.html", releases=releases)
45
46
47class DownloadsDevelopmentHandler(BaseHandler):
48 def get(self):
49 releases = self.releases.get_unstable()
50
51 self.render("downloads-development.html", releases=releases)
52
53
54class DownloadHandler(BaseHandler):
55 def get(self):
56 self.render("downloads.html", release=self.releases.get_latest())
57
58
59class DownloadAllHandler(BaseHandler):
60 def get(self):
61 self.render("downloads-all.html",
62 releases=self.releases.get_stable())
63
64
65class DownloadDevelopmentHandler(BaseHandler):
66 def get(self):
67 self.render("downloads-development.html",
68 releases=self.releases.get_unstable())
69
70
71class DownloadFileHandler(BaseHandler):
122c9026 72 def head(self, filename):
54af860e 73 self.set_header("Pragma", "no-cache")
54af860e 74
0673d1b0
MT
75 # Get all mirrors...
76 mirrors = self.mirrors.get_all()
77 mirrors = mirrors.get_with_file(filename)
78 mirrors = mirrors.get_with_state("UP")
54af860e
MT
79
80 if not mirrors:
81 raise tornado.web.HTTPError(404, "File not found: %s" % filename)
940227cb 82
0673d1b0
MT
83 # Find mirrors located near to the user.
84 # If we have not found any, we use all.
554f410f
MT
85 mirrors_nearby = mirrors.get_for_location(self.request.remote_ip)
86 if mirrors_nearby:
87 mirrors = mirrors_nearby
0673d1b0
MT
88
89 mirror = mirrors.get_random()
940227cb 90
54af860e 91 self.redirect(mirror.url + filename[len(mirror.prefix):])
d933f34e 92 return mirror
54af860e 93
122c9026 94 def get(self, filename):
d933f34e 95 mirror = self.head(filename)
122c9026 96
d933f34e 97 # Record the download.
370923aa 98 country_code = self.geoip.get_country(self.request.remote_ip)
54af860e
MT
99 self.mirrors.db.execute("INSERT INTO log_download(filename, mirror, country_code) VALUES(%s, %s, %s)",
100 filename, mirror.id, country_code)
edd297c4
MT
101
102
103class DownloadCompatHandler(BaseHandler):
104 def get(self, path, url):
105 _filename = None
106
107 for filename in self.mirrors.get_all_files():
108 if filename.endswith("/%s" % url):
109 _filename = filename
110 break
111
112 if not _filename:
113 raise tornado.web.HTTPError(404)
114
115 self.redirect("/%s" % _filename)
116
60024cc8
MT
117class DownloadSplashHandler(BaseHandler):
118 def get(self):
119 self.render("download-splash.html")