]> git.ipfire.org Git - ipfire.org.git/blame - webapp/handlers.py
Implement donation redirection to backend
[ipfire.org.git] / webapp / handlers.py
CommitLineData
81675874 1#!/usr/bin/python
2
940227cb
MT
3#import httplib
4#import logging
5#import markdown2
60b0917c 6import operator
81675874 7import os
940227cb
MT
8#import random
9#import re
10#import socket
11#import time
12#import tornado.database
13#import tornado.locale
2c361abc 14import tornado.gen
81675874 15import tornado.web
940227cb 16#import unicodedata
81675874 17
940227cb 18import backend
81675874 19
2cd9af74 20from handlers_accounts import *
940227cb
MT
21from handlers_admin import *
22from handlers_base import *
8e2e1261 23from handlers_boot import *
940227cb 24from handlers_download import *
66862195 25from handlers_fireinfo import *
c37ec602 26from handlers_iuse import *
940227cb
MT
27from handlers_mirrors import *
28from handlers_news import *
60024cc8 29from handlers_nopaste import *
940227cb 30from handlers_planet import *
de683d7c 31from handlers_rss import *
66862195 32from handlers_talk import *
d0d074e0 33
940227cb
MT
34class LangCompatHandler(BaseHandler):
35 """
36 Redirect links in the old format to current site:
81675874 37
940227cb
MT
38 E.g. /en/index -> /index
39 """
40 def get(self, lang, page):
41 self.redirect("/%s" % page)
81675874 42
feb02477 43
940227cb 44class IndexHandler(BaseHandler):
de683d7c
MT
45 rss_url = "/news.rss"
46
940227cb
MT
47 """
48 This handler displays the welcome page.
49 """
feb02477 50 def get(self):
7771acea
MT
51 # Get the latest release.
52 latest_release = self.releases.get_latest()
60b0917c
MT
53
54 # Get a list of the most recent news items and put them on the page.
55 latest_news = self.get_latest_news()
feb02477 56
bb3da2b5 57 return self.render("index.html", latest_news=latest_news,
e400e37d
MT
58 latest_release=latest_release,
59 fireinfo_country=self.fireinfo.get_random_country_penetration())
60b0917c
MT
60
61 def get_latest_news(self, count=5):
62 latest_news = []
63
2cb93d13 64 for news in self.news.get_latest(limit=count):
60b0917c
MT
65 latest_news.append(("news", news))
66
67 for post in self.planet.get_entries(limit=count):
68 latest_news.append(("planet", post))
69
70 latest_news.sort(key=operator.itemgetter(1), reverse=True)
71
72 return latest_news[:count]
3add293a
MT
73
74
81675874 75class StaticHandler(BaseHandler):
940227cb
MT
76 """
77 This handler shows the files that are in plain html format.
78 """
81675874 79 @property
80 def static_path(self):
81 return os.path.join(self.application.settings["template_path"], "static")
82
83 @property
84 def static_files(self):
54b8df1a
MT
85 for dir, subdirs, files in os.walk(self.static_path):
86 dir = dir[len(self.static_path) + 1:]
87 for file in files:
88 if not file.endswith(".html"):
89 continue
90 yield os.path.join(dir, file)
81675874 91
92 def get(self, name=None):
93 name = "%s.html" % name
94
95 if not name in self.static_files:
96 raise tornado.web.HTTPError(404)
97
940227cb 98 self.render("static/%s" % name, lang=self.locale.code[:2])
9068dba1
MT
99
100
101class GeoIPHandler(BaseHandler):
102 def get_address(self):
103 addr = self.get_argument("addr", None)
104
105 if not addr:
106 addr = self.get_remote_ip()
107
108 return addr
109
110 def get(self):
111 addr = self.get_address()
112
113 peer = self.geoip.get_all(addr)
114 if peer:
115 peer["country_name"] = self.geoip.get_country_name(peer.country)
116
5488a9f4
MT
117 mirrors = self.mirrors.get_for_location(peer)
118
119 self.render("geoip/index.html", addr=addr, peer=peer, mirrors=mirrors)
e64ce07e
MT
120
121
122class DonateHandler(BaseHandler):
123 def get(self):
7c0605e8 124 self.render("donate.html")
60b0917c 125
2c361abc
MT
126 @tornado.gen.coroutine
127 def post(self):
128 # Get form inputs
129 args = {
130 "amount" : self.get_argument("amount"),
131 "currency" : self.get_argument("currency", "EUR"),
132 "method" : self.get_argument("method", None),
133
134 # Is this a recurring donation?
135 "recurring" : self.get_argument("frequency") == "monthly",
136
137 # XXX Missing inputs
138 "email" : "john.doe@example.com",
139 "first_name" : "John",
140 "last_name" : "Doe",
141 "street1" : "Street 1",
142 "street2" : "Street 2",
143 "post_code" : "POST CODE",
144 "city" : "City",
145 "state" : "State",
146 "country_code" : "DE",
147 }
148
149 # Send request to Zeiterfassung
150 try:
151 response = yield self.backend.zeiterfassung.send_request(
152 "/api/v1/donations/create/ipfire-project", **args)
153
154 except Exception:
155 raise # XXX handle any problems when Zeiterfassung is unreachable
156
157 # Redirect the user to the payment page
158 redirect_url = response.get("redirect_url")
159 if not redirect_url:
160 raise tornado.web.HTTPError(500, "Did not receive a redirect URL")
161
162 self.redirect(redirect_url)
163
60b0917c
MT
164
165class DownloadHandler(BaseHandler):
166 def get(self):
167 release = self.releases.get_latest()
168
169 self.render("download.html", release=release)