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