]> git.ipfire.org Git - ipfire.org.git/blame - webapp/handlers_mirrors.py
planet: Make the publish radio button work.
[ipfire.org.git] / webapp / handlers_mirrors.py
CommitLineData
940227cb
MT
1#!/usr/bin/python
2
3import socket
4import tornado.web
5
6from handlers_base import *
7
8class 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
25class 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
41class MirrorHandler(BaseHandler):
42 def get(self):
43 self.redirect("mirrors/all")
44
45
46class MirrorAllHandler(BaseHandler):
47 def get(self):
48 self.render("downloads-mirrors.html", mirrors=self.mirrors.list())
49
50
51class MirrorDetailHandler(BaseHandler):
52 def get(self, id):
53 self.render("download-mirror-detail.html", mirror=self.mirrors.get(id))
0a003782
MT
54
55
56class 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))