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