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