]> git.ipfire.org Git - ipfire.org.git/blame - src/web/handlers.py
CVE Mitre and boot.ipfire.org support HTTPS
[ipfire.org.git] / src / web / handlers.py
CommitLineData
81675874 1#!/usr/bin/python
2
47113f9e 3import iso3166
2c361abc 4import tornado.gen
81675874 5import tornado.web
6
124a8404
MT
7from . import base
8
b22bc8e8 9class LangCompatHandler(base.BaseHandler):
940227cb
MT
10 """
11 Redirect links in the old format to current site:
81675874 12
940227cb
MT
13 E.g. /en/index -> /index
14 """
15 def get(self, lang, page):
16 self.redirect("/%s" % page)
81675874 17
feb02477 18
b22bc8e8 19class IndexHandler(base.BaseHandler):
940227cb
MT
20 """
21 This handler displays the welcome page.
22 """
feb02477 23 def get(self):
7771acea
MT
24 # Get the latest release.
25 latest_release = self.releases.get_latest()
60b0917c 26
7d88783f 27 # Get a list of the most recent news items and put them on the page.
c0cb629d 28 posts = self.backend.blog.get_newest(limit=4)
feb02477 29
5491aa64
MT
30 # Cache page for 5 minutes
31 self.set_expires(300)
32
7d88783f 33 return self.render("index.html", posts=posts,
1740f4dc 34 latest_release=latest_release)
60b0917c 35
e64ce07e 36
b22bc8e8 37class DonateHandler(base.BaseHandler):
e64ce07e 38 def get(self):
47113f9e
MT
39 location = self.get_remote_location()
40
41 if location:
42 country = location.country
43 else:
44 country = None
45
bd2723d4
MT
46 # Get defaults
47 amount = self.get_argument_int("amount", None)
48 currency = self.get_argument("currency", None)
49 frequency = self.get_argument("frequency", None)
50
51 # Set default currency
52 if not currency in ("EUR", "USD"):
53 currency = "EUR"
54
1261d811
MT
55 # Default to USD for the US only
56 if country == "US":
57 currency = "USD"
58
bd2723d4
MT
59 # Set default frequency
60 if not frequency in ("one-time", "monthly"):
61 frequency = "one-time"
62
63 self.render("donate.html", countries=iso3166.countries,
64 country=country, amount=amount, currency=currency, frequency=frequency)
60b0917c 65
2c361abc
MT
66 @tornado.gen.coroutine
67 def post(self):
a49b36f0
MT
68 amount = self.get_argument("amount")
69 currency = self.get_argument("currency", "EUR")
70 frequency = self.get_argument("frequency")
71
2c361abc
MT
72 # Get form inputs
73 args = {
a49b36f0
MT
74 "amount" : amount,
75 "currency" : currency,
2c361abc
MT
76
77 # Is this a recurring donation?
a49b36f0 78 "recurring" : frequency == "monthly",
2c361abc 79
450af3dc
MT
80 # Address
81 "email" : self.get_argument("email"),
82 "title" : self.get_argument("title"),
83 "first_name" : self.get_argument("first_name"),
84 "last_name" : self.get_argument("last_name"),
85 "company_name" : self.get_argument("company_name", None),
86 "street1" : self.get_argument("street1"),
87 "street2" : self.get_argument("street2", None),
88 "post_code" : self.get_argument("post_code"),
89 "city" : self.get_argument("city"),
90 "state" : self.get_argument("state", None),
91 "country_code" : self.get_argument("country_code"),
2c361abc
MT
92 }
93
a49b36f0
MT
94 # Add URLs to redirect the user back
95 args.update({
96 "success_url" : "https://%s/donate/thank-you" % self.request.host,
97 "error_url" : "https://%s/donate/error" % self.request.host,
98 "back_url" : "https://%s/donate?amount=%s&currency=%s&frequency=%s" %
99 (self.request.host, amount, currency, frequency),
100 })
101
2c361abc
MT
102 # Send request to Zeiterfassung
103 try:
104 response = yield self.backend.zeiterfassung.send_request(
105 "/api/v1/donations/create/ipfire-project", **args)
106
107 except Exception:
108 raise # XXX handle any problems when Zeiterfassung is unreachable
109
110 # Redirect the user to the payment page
111 redirect_url = response.get("redirect_url")
112 if not redirect_url:
113 raise tornado.web.HTTPError(500, "Did not receive a redirect URL")
114
115 self.redirect(redirect_url)
116
60b0917c 117
b22bc8e8 118class StaticHandler(base.BaseHandler):
45592df5
MT
119 def initialize(self, template):
120 self._template = template
121
122 def get(self):
5491aa64
MT
123 # Cache page for 60 minutes
124 self.set_expires(3600)
125
45592df5 126 self.render("static/%s" % self._template)