]>
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 now
= datetime
.date
.today()
43 "debug" : self
.application
.settings
.get("debug", False),
44 "format_size" : util
.format_size
,
45 "format_time" : util
.format_time
,
46 "hostname" : self
.hostname
,
53 def get_remote_ip(self
):
54 # Fix for clients behind a proxy that sends "X-Forwarded-For".
55 remote_ips
= self
.request
.remote_ip
.split(", ")
57 for remote_ip
in remote_ips
:
59 addr
= ipaddress
.ip_address(remote_ip
)
61 # Skip invalid IP addresses.
64 # Check if the given IP address is from a
71 # Return the last IP if nothing else worked
72 return remote_ips
.pop()
74 def get_remote_location(self
):
75 if not hasattr(self
, "__remote_location"):
76 remote_ip
= self
.get_remote_ip()
78 self
.__remote
_location
= self
.geoip
.get_location(remote_ip
)
80 return self
.__remote
_location
82 def get_argument_int(self
, *args
, **kwargs
):
83 arg
= self
.get_argument(*args
, **kwargs
)
85 if arg
is None or arg
== "":
91 raise tornado
.web
.HTTPError(400)
93 def get_argument_date(self
, arg
, *args
, **kwargs
):
94 value
= self
.get_argument(arg
, *args
, **kwargs
)
99 return dateutil
.parser
.parse(value
)
101 raise tornado
.web
.HTTPError(400)
105 def get_current_user(self
):
106 session_id
= self
.get_cookie("session_id")
110 # Get account from the session object
111 account
= self
.backend
.accounts
.get_by_session(session_id
, self
.request
.host
)
113 # If the account was not found or the session was not valid
114 # any more, we will remove the cookie.
116 self
.clear_cookie("session_id")
122 return self
.application
.backend
126 return self
.backend
.db
130 return self
.backend
.accounts
134 return self
.backend
.downloads
138 return self
.backend
.fireinfo
142 return self
.backend
.iuse
146 return self
.backend
.mirrors
150 return self
.backend
.netboot
154 return self
.backend
.releases
158 return self
.backend
.geoip
162 return self
.backend
.talk
165 class NotFoundHandler(BaseHandler
):
167 # Raises 404 as soon as it is called
168 raise tornado
.web
.HTTPError(404)
171 class ErrorHandler(BaseHandler
):
173 Raises any error we want
179 raise tornado
.web
.HTTPError(400)
181 raise tornado
.web
.HTTPError(code
)