forked from yapcheahshen/devtusita
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
113 lines (92 loc) · 3.57 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import webapp2, jinja2, os, json
from google.appengine.api import users
from database import create, read, update, delete
from database import mafCreate, mafRead
from database import retreatRead, retreatCreate, retreatUpdate
from gaelibs import locale
jinja_environment = jinja2.Environment(
loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'app')),
variable_start_string='{$',
variable_end_string='$}')
class MainPage(webapp2.RequestHandler):
def get(self):
userLocale = locale.determineLocale(self.request.headers.get('accept_language'))
langQ = json.dumps(locale.parseAcceptLanguage(self.request.headers.get('accept_language')))
template_values = {
'locale': '%s~%s' % (userLocale, langQ)
}
user = users.get_current_user()
if user:
# user already login
template_values['isLogin'] = True
template_values['userEmail'] = user.email()
template_values['signoutURL'] = users.create_logout_url("/")
if users.is_current_user_admin():
template_values['isCurrentUserAdmin'] = True
else:
template_values['isCurrentUserAdmin'] = False
else:
# user not login
template_values['isLogin'] = False
template_values['isCurrentUserAdmin'] = False
template_values['signinOrRegisterURL'] = users.create_login_url("/")
template = jinja_environment.get_template('index.html')
self.response.out.write(template.render(template_values))
class RESTfulHandler(webapp2.RequestHandler):
def isLegalUser(self, email):
user = users.get_current_user()
if not user:
self.abort(404)
if email != user.email():
self.abort(404)
def isAdmin(self, email):
if not users.is_current_user_admin():
self.abort(404)
def checkData(self, data):
if (data):
self.response.out.write(data)
else:
self.abort(404)
def get(self, email):
self.isLegalUser(email)
if self.request.url.endswith('apply'):
self.checkData(mafRead(email))
elif self.request.url.endswith('retreat'):
self.checkData(retreatRead(email))
else:
self.checkData(read(email))
def post(self, email):
self.isLegalUser(email)
if self.request.url.endswith('apply'):
self.checkData(mafCreate(email, self.request.body))
elif self.request.url.endswith('retreat'):
self.isAdmin(email)
self.checkData(retreatCreate(self.request.body))
else:
self.checkData(create(email, self.request.body))
def put(self, email):
self.isLegalUser(email)
if self.request.url.endswith(email):
self.checkData(update(email, self.request.body))
elif self.request.url.endswith('retreat'):
self.isAdmin(email)
self.checkData(retreatUpdate(self.request.body))
else:
self.abort(404)
def delete(self, email):
self.isLegalUser(email)
if self.request.url.endswith(email):
self.checkData(delete(email))
else:
self.abort(404)
class RedirectPage(webapp2.RequestHandler):
def get(self, suffix):
self.redirect('/')
app = webapp2.WSGIApplication([('/', MainPage),
('/(userdata|apply|record|retreat|manageRetreats)', RedirectPage),
('/RESTful/([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/apply', RESTfulHandler),
('/RESTful/([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/retreat', RESTfulHandler),
('/RESTful/([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})', RESTfulHandler)],
debug=True)