]> git.ipfire.org Git - people/jschlag/pbs.git/blame - src/web/mirrors.py
Merge branch 'master' of git://git.ipfire.org/pbs
[people/jschlag/pbs.git] / src / web / mirrors.py
CommitLineData
f6e6ff79
MT
1#!/usr/bin/python
2
3import tornado.web
4
2c909128 5from .. import mirrors
f6e6ff79 6
2c909128 7from .handlers_base import BaseHandler
f6e6ff79
MT
8
9class 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
33class 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
44class 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
55class 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
87class 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
112class 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:
ac8f5d9c
MT
121 with self.db.transaction():
122 mirror.deleted = True
f6e6ff79
MT
123
124 self.redirect("/mirrors")
125 return
126
d72a55be 127 self.render("mirrors/delete.html", mirror=mirror)