]>
Commit | Line | Data |
---|---|---|
f6e6ff79 MT |
1 | #!/usr/bin/python |
2 | ||
3 | import tornado.web | |
4 | ||
2c909128 | 5 | from .. import mirrors |
f6e6ff79 | 6 | |
2c909128 | 7 | from .handlers_base import BaseHandler |
f6e6ff79 MT |
8 | |
9 | class MirrorListHandler(BaseHandler): | |
10 | def get(self): | |
16f90605 MT |
11 | mirrors = self.backend.mirrors |
12 | mirrors_nearby = self.backend.mirrors.get_for_location(self.current_address) | |
f6e6ff79 MT |
13 | |
14 | mirrors_worldwide = [] | |
15 | for mirror in mirrors: | |
16 | if mirror in mirrors_nearby: | |
17 | continue | |
18 | ||
19 | mirrors_worldwide.append(mirror) | |
20 | ||
21 | kwargs = { | |
22 | "mirrors" : mirrors, | |
23 | "mirrors_nearby" : mirrors_nearby, | |
24 | "mirrors_worldwide" : mirrors_worldwide, | |
25 | } | |
26 | ||
27 | # Get recent log messages. | |
16f90605 | 28 | kwargs["log"] = self.backend.mirrors.get_history(limit=5) |
f6e6ff79 | 29 | |
d72a55be | 30 | self.render("mirrors/list.html", **kwargs) |
f6e6ff79 MT |
31 | |
32 | ||
33 | class MirrorDetailHandler(BaseHandler): | |
34 | def get(self, hostname): | |
16f90605 | 35 | mirror = self.backend.mirrors.get_by_hostname(hostname) |
f6e6ff79 MT |
36 | if not mirror: |
37 | raise tornado.web.HTTPError(404, "Could not find mirror: %s" % hostname) | |
38 | ||
16f90605 | 39 | log = self.backend.mirrors.get_history(mirror=mirror, limit=10) |
25afb794 | 40 | |
d72a55be | 41 | self.render("mirrors/detail.html", mirror=mirror, log=log) |
f6e6ff79 MT |
42 | |
43 | ||
44 | class MirrorActionHandler(BaseHandler): | |
45 | """ | |
46 | A handler that makes sure if the user has got sufficent rights to | |
47 | do actions. | |
48 | """ | |
49 | def prepare(self): | |
50 | # Check if the user has sufficient rights to create a new mirror. | |
51 | if not self.current_user.has_perm("manage_mirrors"): | |
52 | raise tornado.web.HTTPError(403) | |
53 | ||
54 | ||
55 | class MirrorNewHandler(MirrorActionHandler): | |
56 | @tornado.web.authenticated | |
57 | def get(self, hostname="", path="", hostname_missing=False, path_invalid=False): | |
d72a55be | 58 | self.render("mirrors/new.html", _hostname=hostname, path=path, |
f6e6ff79 MT |
59 | hostname_missing=hostname_missing, path_invalid=path_invalid) |
60 | ||
61 | @tornado.web.authenticated | |
62 | def post(self): | |
63 | errors = {} | |
64 | ||
65 | hostname = self.get_argument("name", None) | |
66 | if not hostname: | |
67 | errors["hostname_missing"] = True | |
68 | ||
69 | path = self.get_argument("path", "") | |
70 | if path is None: | |
71 | errors["path_invalid"] = True | |
72 | ||
73 | if errors: | |
74 | errors.update({ | |
75 | "hostname" : hostname, | |
76 | "path" : path, | |
77 | }) | |
78 | return self.get(**errors) | |
79 | ||
16f90605 MT |
80 | # Create mirror |
81 | with self.db.transaction(): | |
82 | mirror = self.backend.mirrors.create(hostname, path, user=self.current_user) | |
f6e6ff79 MT |
83 | |
84 | self.redirect("/mirror/%s" % mirror.hostname) | |
85 | ||
86 | ||
87 | class MirrorEditHandler(MirrorActionHandler): | |
88 | @tornado.web.authenticated | |
89 | def get(self, hostname): | |
16f90605 | 90 | mirror = self.backend.mirrors.get_by_hostname(hostname) |
f6e6ff79 MT |
91 | if not mirror: |
92 | raise tornado.web.HTTPError(404, "Could not find mirror: %s" % hostname) | |
93 | ||
d72a55be | 94 | self.render("mirrors/edit.html", mirror=mirror) |
f6e6ff79 MT |
95 | |
96 | @tornado.web.authenticated | |
97 | def post(self, hostname): | |
16f90605 | 98 | mirror = self.backend.mirrors.get_by_hostname(hostname) |
f6e6ff79 MT |
99 | if not mirror: |
100 | raise tornado.web.HTTPError(404, "Could not find mirror: %s" % hostname) | |
101 | ||
3163c789 MT |
102 | with self.db.transaction(): |
103 | mirror.hostname = self.get_argument("name") | |
104 | mirror.path = self.get_argument("path", "") | |
105 | mirror.owner = self.get_argument("owner", None) | |
106 | mirror.contact = self.get_argument("contact", None) | |
107 | mirror.supports_https = self.get_argument("supports_https", False) | |
f6e6ff79 MT |
108 | |
109 | self.redirect("/mirror/%s" % mirror.hostname) | |
110 | ||
111 | ||
112 | class MirrorDeleteHandler(MirrorActionHandler): | |
113 | @tornado.web.authenticated | |
114 | def get(self, hostname): | |
16f90605 | 115 | mirror = self.backend.mirrors.get_by_hostname(hostname) |
f6e6ff79 MT |
116 | if not mirror: |
117 | raise tornado.web.HTTPError(404, "Could not find mirror: %s" % hostname) | |
118 | ||
119 | confirmed = self.get_argument("confirmed", None) | |
120 | if confirmed: | |
121 | mirror.set_status("deleted", user=self.current_user) | |
122 | ||
123 | self.redirect("/mirrors") | |
124 | return | |
125 | ||
d72a55be | 126 | self.render("mirrors/delete.html", mirror=mirror) |