]> git.ipfire.org Git - ipfire.org.git/blame - src/web/donate.py
donations: Fix page load error when following pre-formatted link
[ipfire.org.git] / src / web / donate.py
CommitLineData
c7bcb9ca
MT
1#!/usr/bin/python3
2
3import iso3166
4import tornado.gen
5import tornado.web
6
7from . import base
8
9class DonateHandler(base.BaseHandler):
52d4e79b
MT
10 @base.blacklisted
11 def prepare(self):
12 # Makes sure that we call blacklist for everything
13 pass
14
c7bcb9ca
MT
15 def get(self):
16 location = self.get_remote_location()
17
18 if location:
19 country = location.country
20 else:
21 country = None
22
23 # Get defaults
b00cc400
MT
24 first_name = self.get_argument("first_name", None)
25 last_name = self.get_argument("last_name", None)
a5f94966 26 amount = self.get_argument_float("amount", None)
c7bcb9ca
MT
27 currency = self.get_argument("currency", None)
28 frequency = self.get_argument("frequency", None)
29
30 # Set default currency
31 if not currency in ("EUR", "USD"):
32 currency = "EUR"
33
34 # Default to USD for the US only
35 if country == "US":
36 currency = "USD"
37
38 # Set default frequency
39 if not frequency in ("one-time", "monthly"):
40 frequency = "one-time"
41
0ba47b0f 42 self.render("donate/donate.html", countries=iso3166.countries,
b00cc400
MT
43 country=country, first_name=first_name, last_name=last_name,
44 amount=amount, currency=currency, frequency=frequency)
c7bcb9ca
MT
45
46 @tornado.gen.coroutine
372ef119 47 @base.ratelimit(minutes=24*60, requests=5)
c7bcb9ca
MT
48 def post(self):
49 amount = self.get_argument("amount")
50 currency = self.get_argument("currency", "EUR")
51 frequency = self.get_argument("frequency")
52
53 # Get form inputs
54 args = {
55 "amount" : amount,
56 "currency" : currency,
57
58 # Is this a recurring donation?
59 "recurring" : frequency == "monthly",
60
61 # Address
62 "email" : self.get_argument("email"),
63 "title" : self.get_argument("title"),
64 "first_name" : self.get_argument("first_name"),
65 "last_name" : self.get_argument("last_name"),
66 "company_name" : self.get_argument("company_name", None),
67 "street1" : self.get_argument("street1"),
68 "street2" : self.get_argument("street2", None),
69 "post_code" : self.get_argument("post_code"),
70 "city" : self.get_argument("city"),
71 "state" : self.get_argument("state", None),
72 "country_code" : self.get_argument("country_code"),
73 }
74
75 # Add URLs to redirect the user back
76 args.update({
77 "success_url" : "https://%s/donate/thank-you" % self.request.host,
78 "error_url" : "https://%s/donate/error" % self.request.host,
79 "back_url" : "https://%s/donate?amount=%s&currency=%s&frequency=%s" %
80 (self.request.host, amount, currency, frequency),
81 })
82
83 # Send request to Zeiterfassung
84 try:
85 response = yield self.backend.zeiterfassung.send_request(
86 "/api/v1/donations/create/ipfire-project", **args)
87
88 except Exception:
89 raise # XXX handle any problems when Zeiterfassung is unreachable
90
91 # Redirect the user to the payment page
92 redirect_url = response.get("redirect_url")
93 if not redirect_url:
94 raise tornado.web.HTTPError(500, "Did not receive a redirect URL")
95
96 self.redirect(redirect_url)
97
98
99class ThankYouHandler(base.BaseHandler):
100 def get(self):
101 self.render("donate/thank-you.html")
102
103
104class ErrorHandler(base.BaseHandler):
105 def get(self):
106 self.render("donate/error.html")