]>
Commit | Line | Data |
---|---|---|
940227cb MT |
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): | |
0673d1b0 | 10 | ip_addr = self.get_argument("addr", self.request.remote_ip) |
940227cb | 11 | |
0673d1b0 MT |
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) | |
940227cb MT |
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 | ||
119f55d7 MT |
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) | |
940227cb MT |
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)) | |
0a003782 MT |
54 | |
55 | ||
56 | class MirrorListPakfire2Handler(BaseHandler): | |
57 | def get(self): | |
58 | suffix = self.get_argument("suffix", "") | |
bd17b7d1 | 59 | development = self.get_argument("development", None) |
0a003782 MT |
60 | |
61 | self.set_header("Content-Type", "text/plain") | |
62 | ||
bd17b7d1 MT |
63 | # Get all mirror servers that are currently up. |
64 | mirrors = self.mirrors.get_all_up() | |
0a003782 MT |
65 | |
66 | lines = [] | |
67 | for m in mirrors: | |
bd17b7d1 MT |
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: | |
0a003782 MT |
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)) |