]>
git.ipfire.org Git - ipfire.org.git/blob - src/web/base.py
14 class BaseHandler(tornado
.web
.RequestHandler
):
15 def set_expires(self
, seconds
):
17 self
.add_header("Cache-Control", "max-age=%s, must-revalidate" % seconds
)
20 expires
= datetime
.datetime
.utcnow() + datetime
.timedelta(seconds
=seconds
)
21 self
.add_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)
103 def get_file(self
, name
):
105 file = self
.request
.files
[name
][0]
107 return file["filename"], file["body"], file["content_type"]
113 def get_current_user(self
):
114 session_id
= self
.get_cookie("session_id")
118 # Get account from the session object
119 account
= self
.backend
.accounts
.get_by_session(session_id
, self
.request
.host
)
121 # If the account was not found or the session was not valid
122 # any more, we will remove the cookie.
124 self
.clear_cookie("session_id")
130 return self
.application
.backend
134 return self
.backend
.db
138 return self
.backend
.accounts
142 return self
.backend
.downloads
146 return self
.backend
.fireinfo
150 return self
.backend
.iuse
154 return self
.backend
.mirrors
158 return self
.backend
.netboot
162 return self
.backend
.releases
166 return self
.backend
.geoip
170 return self
.backend
.talk
173 class NotFoundHandler(BaseHandler
):
175 # Raises 404 as soon as it is called
176 raise tornado
.web
.HTTPError(404)
179 class ErrorHandler(BaseHandler
):
181 Raises any error we want
187 raise tornado
.web
.HTTPError(400)
189 raise tornado
.web
.HTTPError(code
)
192 class BlockedHandler(BaseHandler
):
197 self
.render("static/blocked.html", address
=self
.get_remote_ip())