]>
Commit | Line | Data |
---|---|---|
81675874 | 1 | #!/usr/bin/python |
2 | ||
47113f9e | 3 | import iso3166 |
2c361abc | 4 | import tornado.gen |
81675874 | 5 | import tornado.web |
6 | ||
124a8404 MT |
7 | from . import base |
8 | ||
b22bc8e8 | 9 | class 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 | 19 | class 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 | 37 | class 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¤cy=%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 | 118 | class 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) |