]>
git.ipfire.org Git - ipfire.org.git/blob - src/web/base.py
12 from ..decorators
import *
15 class BaseHandler(tornado
.web
.RequestHandler
):
16 def set_expires(self
, seconds
):
18 self
.add_header("Cache-Control", "max-age=%s, must-revalidate" % seconds
)
21 expires
= datetime
.datetime
.utcnow() + datetime
.timedelta(seconds
=seconds
)
22 self
.add_header("Expires", expires
)
24 def write_error(self
, status_code
, **kwargs
):
25 # Translate code into message
27 message
= http
.client
.responses
[status_code
]
31 self
.render("error.html", status_code
=status_code
, message
=message
, **kwargs
)
33 def xsrf_form_html(self
, *args
, **kwargs
):
34 # Set Vary: Cookie header
35 self
.add_header("Vary", "Cookie")
37 return super().xsrf_form_html(*args
, **kwargs
)
41 # Remove the development prefix
42 return self
.request
.host
.replace(".dev.", ".")
44 def get_template_namespace(self
):
45 ns
= tornado
.web
.RequestHandler
.get_template_namespace(self
)
47 now
= datetime
.date
.today()
50 "debug" : self
.application
.settings
.get("debug", False),
51 "format_size" : util
.format_size
,
52 "format_time" : util
.format_time
,
53 "hostname" : self
.hostname
,
60 def get_remote_ip(self
):
61 # Fix for clients behind a proxy that sends "X-Forwarded-For".
62 remote_ips
= self
.request
.remote_ip
.split(", ")
64 for remote_ip
in remote_ips
:
66 addr
= ipaddress
.ip_address(remote_ip
)
68 # Skip invalid IP addresses.
71 # Check if the given IP address is from a
78 # Return the last IP if nothing else worked
79 return remote_ips
.pop()
82 def current_country_code(self
):
83 remote_ip
= self
.get_remote_ip()
86 return self
.backend
.geoip
.get_country(remote_ip
)
88 def get_remote_location(self
):
89 if not hasattr(self
, "__remote_location"):
90 remote_ip
= self
.get_remote_ip()
92 self
.__remote
_location
= self
.geoip
.get_location(remote_ip
)
94 return self
.__remote
_location
96 def get_argument_int(self
, *args
, **kwargs
):
97 arg
= self
.get_argument(*args
, **kwargs
)
99 if arg
is None or arg
== "":
105 raise tornado
.web
.HTTPError(400)
107 def get_argument_date(self
, arg
, *args
, **kwargs
):
108 value
= self
.get_argument(arg
, *args
, **kwargs
)
113 return dateutil
.parser
.parse(value
)
115 raise tornado
.web
.HTTPError(400)
117 def get_file(self
, name
):
119 file = self
.request
.files
[name
][0]
121 return file["filename"], file["body"], file["content_type"]
127 def get_current_user(self
):
128 session_id
= self
.get_cookie("session_id")
132 # Get account from the session object
133 account
= self
.backend
.accounts
.get_by_session(session_id
, self
.request
.host
)
135 # If the account was not found or the session was not valid
136 # any more, we will remove the cookie.
138 self
.clear_cookie("session_id")
144 return self
.application
.backend
148 return self
.backend
.db
152 return self
.backend
.accounts
156 return self
.backend
.downloads
160 return self
.backend
.fireinfo
164 return self
.backend
.iuse
168 return self
.backend
.mirrors
172 return self
.backend
.netboot
176 return self
.backend
.releases
180 return self
.backend
.geoip
184 return self
.backend
.talk
187 class NotFoundHandler(BaseHandler
):
189 # Raises 404 as soon as it is called
190 raise tornado
.web
.HTTPError(404)
193 class ErrorHandler(BaseHandler
):
195 Raises any error we want
201 raise tornado
.web
.HTTPError(400)
203 raise tornado
.web
.HTTPError(code
)
206 class BlockedHandler(BaseHandler
):
211 self
.render("static/blocked.html", address
=self
.get_remote_ip())