]>
git.ipfire.org Git - ipfire.org.git/blob - src/web/download.py
6 from . import handlers_base
as base
8 from . import ui_modules
10 class IndexHandler(base
.BaseHandler
):
12 release
= self
.backend
.releases
.get_latest()
14 raise tornado
.web
.HTTPError(404)
16 # Cache this response for one minute
19 # Redirect to latest release page
20 self
.redirect("/download/%s" % release
.slug
)
23 class ReleaseHandler(base
.BaseHandler
):
25 release
= self
.backend
.releases
.get_by_sname(slug
)
27 raise tornado
.web
.HTTPError(404)
29 # Cache this response for ten minutes
32 self
.render("download/release.html", release
=release
)
35 class FileHandler(base
.BaseHandler
):
37 self
.set_header("Pragma", "no-cache")
39 def head(self
, filename
):
40 self
.redirect_to_mirror(filename
)
42 def get(self
, filename
):
43 self
.redirect_to_mirror(filename
, log_download
=True)
45 def find_mirror(self
, filename
):
46 exists
= self
.mirrors
.file_exists(filename
)
48 raise tornado
.web
.HTTPError(404, "File not found: %s" % filename
)
50 # Find mirrors located near to the user.
51 # If we have not found any, we use a random one.
52 remote_location
= self
.get_remote_location()
55 mirrors
= self
.mirrors
.get_for_location(remote_location
, filename
=filename
)
58 return random
.choice(mirrors
)
60 return self
.mirrors
.get_random(filename
=filename
)
62 def redirect_to_mirror(self
, filename
, log_download
=False):
63 # Find a random mirror.
64 mirror
= self
.find_mirror(filename
)
66 # Construct the redirection URL.
67 download_url
= mirror
.build_url(filename
)
69 # Redirect the request.
70 self
.redirect(download_url
)
75 remote_location
= self
.get_remote_location()
77 country_code
= remote_location
.country
81 self
.db
.execute("INSERT INTO log_download(filename, mirror, country_code) \
82 VALUES(%s, %s, %s)", filename
, mirror
.id, country_code
)