]>
git.ipfire.org Git - ipfire.org.git/blob - src/web/donate.py
9 class DonateHandler(auth
.CacheMixin
, base
.BaseHandler
):
11 country
= self
.current_country_code
14 first_name
= self
.get_argument("first_name", None)
15 last_name
= self
.get_argument("last_name", None)
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
, first_name
=first_name
, last_name
=last_name
,
34 amount
=amount
, currency
=currency
, frequency
=frequency
)
36 @base.ratelimit(minutes
=15, requests
=5)
38 amount
= self
.get_argument("amount")
39 currency
= self
.get_argument("currency", "EUR")
40 frequency
= self
.get_argument("frequency")
42 # Collect donor information
44 "email" : self
.get_argument("email"),
45 "title" : self
.get_argument("title"),
46 "first_name" : self
.get_argument("first_name"),
47 "last_name" : self
.get_argument("last_name"),
50 # Collect address information
52 "street1" : self
.get_argument("street1"),
53 "street2" : self
.get_argument("street2", None),
54 "post_code" : self
.get_argument("post_code"),
55 "city" : self
.get_argument("city"),
56 "state" : self
.get_argument("state", None),
57 "country_code" : self
.get_argument("country_code"),
60 # Send everything to Zeiterfassung
62 # Search for person or create a new one
63 response
= await self
.backend
.zeiterfassung
.send_request(
64 "/api/v1/persons/search", **donor
68 response
= await self
.backend
.zeiterfassung
.send_request(
69 "/api/v1/persons/create", **donor
, **address
72 person
= response
.get("number")
79 "currency" : currency
,
81 # Is this a recurring donation?
82 "recurring" : frequency
== "monthly",
84 # Add URLs to redirect the user back
85 "success_url" : "https://%s/donate/thank-you" % self
.request
.host
,
86 "error_url" : "https://%s/donate/error" % self
.request
.host
,
87 "back_url" : "https://%s/donate?amount=%s¤cy=%s&frequency=%s" %
88 (self
.request
.host
, amount
, currency
, frequency
),
92 response
= await self
.backend
.zeiterfassung
.send_request(
93 "/api/v1/donations/create/ipfire-project", **donation
, **address
)
95 # Redirect the user to the payment page
96 redirect_url
= response
.get("redirect_url")
98 raise tornado
.web
.HTTPError(500, "Did not receive a redirect URL")
100 self
.redirect(redirect_url
)
102 # XXX handle any problems when Zeiterfassung is unreachable
107 class ThankYouHandler(base
.BaseHandler
):
109 self
.render("donate/thank-you.html")
112 class ErrorHandler(base
.BaseHandler
):
114 self
.render("donate/error.html")