]>
git.ipfire.org Git - ipfire.org.git/blob - src/web/handlers_base.py
14 class BaseHandler(tornado
.web
.RequestHandler
):
15 def set_expires(self
, seconds
):
17 self
.set_header("Cache-Control", "max-age=%s, must-revalidate" % seconds
)
20 expires
= datetime
.datetime
.utcnow() + datetime
.timedelta(seconds
=seconds
)
21 self
.set_header("Expires", expires
)
23 def write_error(self
, status_code
, **kwargs
):
24 # Translate code into message
26 message
= http
.client
.responses
[status_code
]
30 self
.render("error.html", status_code
=status_code
, message
=message
, **kwargs
)
34 # Remove the development prefix
35 return self
.request
.host
.replace(".dev.", ".")
37 def get_template_namespace(self
):
38 ns
= tornado
.web
.RequestHandler
.get_template_namespace(self
)
40 today
= datetime
.date
.today()
43 "format_size" : util
.format_size
,
44 "format_time" : util
.format_time
,
45 "hostname" : self
.hostname
,
51 def get_remote_ip(self
):
52 # Fix for clients behind a proxy that sends "X-Forwarded-For".
53 remote_ips
= self
.request
.remote_ip
.split(", ")
55 for remote_ip
in remote_ips
:
57 addr
= ipaddress
.ip_address(remote_ip
)
59 # Skip invalid IP addresses.
62 # Check if the given IP address is from a
69 # Return the last IP if nothing else worked
70 return remote_ips
.pop()
72 def get_remote_location(self
):
73 if not hasattr(self
, "__remote_location"):
74 remote_ip
= self
.get_remote_ip()
76 self
.__remote
_location
= self
.geoip
.get_location(remote_ip
)
78 return self
.__remote
_location
80 def get_argument_int(self
, *args
, **kwargs
):
81 arg
= self
.get_argument(*args
, **kwargs
)
83 if arg
is None or arg
== "":
89 raise tornado
.web
.HTTPError(400)
91 def get_argument_date(self
, arg
, *args
, **kwargs
):
92 value
= self
.get_argument(arg
, *args
, **kwargs
)
97 return dateutil
.parser
.parse(value
)
99 raise tornado
.web
.HTTPError(400)
103 def get_current_user(self
):
104 session_id
= self
.get_cookie("session_id")
108 # Get account from the session object
109 account
= self
.backend
.accounts
.get_by_session(session_id
, self
.request
.host
)
111 # If the account was not found or the session was not valid
112 # any more, we will remove the cookie.
114 self
.clear_cookie("session_id")
120 return self
.application
.backend
124 return self
.backend
.db
128 return self
.backend
.accounts
132 return self
.backend
.downloads
136 return self
.backend
.fireinfo
140 return self
.backend
.iuse
144 return self
.backend
.mirrors
148 return self
.backend
.netboot
152 return self
.backend
.releases
156 return self
.backend
.geoip
160 return self
.backend
.talk
163 class NotFoundHandler(BaseHandler
):
165 # Raises 404 as soon as it is called
166 raise tornado
.web
.HTTPError(404)
169 class ErrorHandler(BaseHandler
):
171 Raises any error we want
177 raise tornado
.web
.HTTPError(400)
179 raise tornado
.web
.HTTPError(code
)