]>
git.ipfire.org Git - ipfire.org.git/blob - src/web/base.py
96df315e4d8bb64b267f29ed9309ee8a9ddcdff7
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
)
35 # Remove the development prefix
36 return self
.request
.host
.replace(".dev.", ".")
38 def get_template_namespace(self
):
39 ns
= tornado
.web
.RequestHandler
.get_template_namespace(self
)
41 now
= datetime
.date
.today()
44 "debug" : self
.application
.settings
.get("debug", False),
45 "format_size" : util
.format_size
,
46 "format_time" : util
.format_time
,
47 "hostname" : self
.hostname
,
54 def get_remote_ip(self
):
55 # Fix for clients behind a proxy that sends "X-Forwarded-For".
56 remote_ips
= self
.request
.remote_ip
.split(", ")
58 for remote_ip
in remote_ips
:
60 addr
= ipaddress
.ip_address(remote_ip
)
62 # Skip invalid IP addresses.
65 # Check if the given IP address is from a
72 # Return the last IP if nothing else worked
73 return remote_ips
.pop()
76 def current_country_code(self
):
77 remote_ip
= self
.get_remote_ip()
80 return self
.backend
.geoip
.get_country(remote_ip
)
82 def get_remote_location(self
):
83 if not hasattr(self
, "__remote_location"):
84 remote_ip
= self
.get_remote_ip()
86 self
.__remote
_location
= self
.geoip
.get_location(remote_ip
)
88 return self
.__remote
_location
90 def get_argument_int(self
, *args
, **kwargs
):
91 arg
= self
.get_argument(*args
, **kwargs
)
93 if arg
is None or arg
== "":
99 raise tornado
.web
.HTTPError(400)
101 def get_argument_date(self
, arg
, *args
, **kwargs
):
102 value
= self
.get_argument(arg
, *args
, **kwargs
)
107 return dateutil
.parser
.parse(value
)
109 raise tornado
.web
.HTTPError(400)
111 def get_file(self
, name
):
113 file = self
.request
.files
[name
][0]
115 return file["filename"], file["body"], file["content_type"]
121 def get_current_user(self
):
122 session_id
= self
.get_cookie("session_id")
126 # Get account from the session object
127 account
= self
.backend
.accounts
.get_by_session(session_id
, self
.request
.host
)
129 # If the account was not found or the session was not valid
130 # any more, we will remove the cookie.
132 self
.clear_cookie("session_id")
138 return self
.application
.backend
142 return self
.backend
.db
146 return self
.backend
.accounts
150 return self
.backend
.downloads
154 return self
.backend
.fireinfo
158 return self
.backend
.iuse
162 return self
.backend
.mirrors
166 return self
.backend
.netboot
170 return self
.backend
.releases
174 return self
.backend
.geoip
178 return self
.backend
.talk
181 class NotFoundHandler(BaseHandler
):
183 # Raises 404 as soon as it is called
184 raise tornado
.web
.HTTPError(404)
187 class ErrorHandler(BaseHandler
):
189 Raises any error we want
195 raise tornado
.web
.HTTPError(400)
197 raise tornado
.web
.HTTPError(code
)
200 class BlockedHandler(BaseHandler
):
205 self
.render("static/blocked.html", address
=self
.get_remote_ip())