]> git.ipfire.org Git - ipfire.org.git/blob - webapp/handlers_mirrors.py
70973d643d5ca3f3854d49279ffdebd0f3303607
[ipfire.org.git] / webapp / handlers_mirrors.py
1 #!/usr/bin/python
2
3 import socket
4 import tornado.web
5
6 from handlers_base import *
7
8 class MirrorIndexHandler(BaseHandler):
9 def get(self):
10 ip_addr = self.get_argument("addr", self.request.remote_ip)
11
12 # Get a list of all mirrors.
13 all_mirrors = self.mirrors.get_all()
14
15 # Choose the preferred ones by their location.
16 preferred_mirrors = all_mirrors.get_for_location(ip_addr)
17
18 # Remove the preferred ones from the list of the rest.
19 other_mirrors = all_mirrors - preferred_mirrors
20
21 self.render("mirrors.html",
22 preferred_mirrors=preferred_mirrors, other_mirrors=other_mirrors)
23
24
25 class MirrorItemHandler(BaseHandler):
26 def get(self, id):
27 mirror = self.mirrors.get(id)
28 if not mirror:
29 raise tornado.web.HTTPError(404)
30
31 ip_addr = self.get_argument("addr", self.request.remote_ip)
32 client_location = self.geoip.get_all(ip_addr)
33
34 client_distance = mirror.distance_to(client_location, ignore_preference=True)
35 client_distance *= 111.32 # to km
36
37 self.render("mirrors-item.html", item=mirror,
38 client_distance=client_distance)
39
40
41 class MirrorHandler(BaseHandler):
42 def get(self):
43 self.redirect("mirrors/all")
44
45
46 class MirrorAllHandler(BaseHandler):
47 def get(self):
48 self.render("downloads-mirrors.html", mirrors=self.mirrors.list())
49
50
51 class MirrorDetailHandler(BaseHandler):
52 def get(self, id):
53 self.render("download-mirror-detail.html", mirror=self.mirrors.get(id))
54
55
56 class MirrorListPakfire2Handler(BaseHandler):
57 def get(self):
58 suffix = self.get_argument("suffix", "")
59 development = self.get_argument("development", None)
60
61 self.set_header("Content-Type", "text/plain")
62
63 # Get all mirror servers that are currently up.
64 mirrors = self.mirrors.get_all_up()
65
66 lines = []
67 for m in mirrors:
68 if not m.mirrorlist or not m.is_pakfire2():
69 continue
70
71 # Skip all non-development mirrors
72 # if we run in development mode.
73 if development and not m.development:
74 continue
75
76 path = [m.path,]
77
78 if m.type == "full":
79 path.append("pakfire2")
80
81 if suffix:
82 path.append(suffix)
83
84 path = "/".join(path)
85
86 # Remove double slashes.
87 path = path.replace("//", "/")
88
89 # Remove leading slash.
90 if path.startswith("/"):
91 path = path[1:]
92
93 # Remove trailing slash.
94 if path.endswith("/"):
95 path = path[:-1]
96
97 line = ("HTTP", m.hostname, path, "")
98 lines.append(";".join(line))
99
100 self.finish("\r\n".join(lines))