-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathadmin_console.py
109 lines (87 loc) · 3.75 KB
/
admin_console.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
#!/usr/bin/python
# -*- coding: utf-8 -*-
##
# admin_console.py: Implements an administrator console for the ThingPool
# server.
##
# © 2012 Steven Casagrande ([email protected]) and
# Christopher E. Granade ([email protected]).
# This file is a part of the ThingPool Server project.
# Licensed under the AGPL version 3.
##
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
##
## IMPORTS #####################################################################
## GAE API ##
from google.appengine.api import users
## WEB FRAMEWORK
import webapp2
import jinja2
## PYTHON STANDARD LIBRARY ##
import os
import logging
## THINGPOOL MODULES ##
import api
import config
import index
import dataModels
import security
## CORE SERVER #################################################################
jinja_environment = jinja2.Environment(
loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))
base_template_values = {
'pool_name': config.POOL_NAME,
'uri_for': webapp2.uri_for,
'message': None
}
class MainPage(webapp2.RequestHandler):
def _template_values(self):
template_values = dict(base_template_values)
# List users with USER_STATUS_REQUESTED permissions
it = dataModels.Person.all().filter('permissions =', security.USER_STATUS_REQUESTED).run()
pending_requests = list(it)
template_values['pending_requests'] = pending_requests
template_values['num_pending_requests'] = len(pending_requests)
# List all useres
it = dataModels.Person.all()
all_users = list(it)
template_values['all_users'] = all_users
return template_values
@security.require_permission('access_admin')
@security.require_gae_login('redirect')
def post(self):
template_values = self._template_values()
# What action did we get?
action = self.request.get('action')
if action == 'handle_account_request':
# FIXME: must check here the can_resolve_acct_request permission
user_id = int(self.request.get('user_id'))
resolution = self.request.get('request_resolution')
requesting_user = dataModels.Person.get_by_id(user_id)
requesting_user.permissions = (
security.USER_STATUS_USER if resolution == 'approve' else security.USER_STATUS_BANNED
)
requesting_user.put()
template_values['message'] = "Account request resolved."
else:
logging.error('Action {} not recognized by admin console.'.format(action))
self.response.headers['Content-Type'] = 'text/html'
template = jinja_environment.get_template('templates/admin/index.html')
self.response.out.write(template.render(template_values))
@security.require_permission('access_admin')
@security.require_gae_login('redirect')
def get(self):
self.response.headers['Content-Type'] = 'text/html'
template = jinja_environment.get_template('templates/admin/index.html')
self.response.out.write(template.render(self._template_values()))