]>
git.ipfire.org Git - ipfire.org.git/blob - src/web/donate.py
8 class DonateHandler(base
.BaseHandler
):
11 country
= self
.current_user
.country_code
13 country
= self
.current_country_code
16 amount
= self
.get_argument_float("amount", None)
17 currency
= self
.get_argument("currency", None)
18 frequency
= self
.get_argument("frequency", None)
20 # Set default currency
21 if not currency
in ("EUR", "USD"):
24 # Default to USD for the US only
28 # Set default frequency
29 if not frequency
in ("one-time", "monthly"):
30 frequency
= "one-time"
32 self
.render("donate/donate.html", countries
=iso3166
.countries
,
33 country
=country
, amount
=amount
, currency
=currency
, frequency
=frequency
)
35 @base.ratelimit(minutes
=15, requests
=5)
37 amount
= self
.get_argument("amount")
38 currency
= self
.get_argument("currency", "EUR")
39 frequency
= self
.get_argument("frequency")
41 # Collect donor information
43 "email" : self
.get_argument("email"),
44 "title" : self
.get_argument("title"),
45 "first_name" : self
.get_argument("first_name"),
46 "last_name" : self
.get_argument("last_name"),
49 # Collect address information
51 "street1" : self
.get_argument("street1"),
52 "street2" : self
.get_argument("street2", None),
53 "post_code" : self
.get_argument("post_code"),
54 "city" : self
.get_argument("city"),
55 "state" : self
.get_argument("state", None),
56 "country_code" : self
.get_argument("country_code"),
59 # Send everything to Zeiterfassung
61 # Search for person or create a new one
62 response
= await self
.backend
.zeiterfassung
.send_request(
63 "/api/v1/persons/search", **donor
67 response
= await self
.backend
.zeiterfassung
.send_request(
68 "/api/v1/persons/create", **donor
, **address
71 person
= response
.get("number")
78 "currency" : currency
,
80 # Is this a recurring donation?
81 "recurring" : frequency
== "monthly",
83 # Add URLs to redirect the user back
84 "success_url" : "https://%s/donate/thank-you" % self
.request
.host
,
85 "error_url" : "https://%s/donate/error" % self
.request
.host
,
86 "back_url" : "https://%s/donate?amount=%s¤cy=%s&frequency=%s" %
87 (self
.request
.host
, amount
, currency
, frequency
),
91 response
= await self
.backend
.zeiterfassung
.send_request(
92 "/api/v1/donations/create/ipfire-project", **donation
, **address
)
94 # Redirect the user to the payment page
95 redirect_url
= response
.get("redirect_url")
97 raise tornado
.web
.HTTPError(500, "Did not receive a redirect URL")
99 self
.redirect(redirect_url
)
101 # XXX handle any problems when Zeiterfassung is unreachable
106 class ThankYouHandler(base
.BaseHandler
):
108 self
.render("donate/thank-you.html")
111 class ErrorHandler(base
.BaseHandler
):
113 self
.render("donate/error.html")