Skip to content
Snippets Groups Projects
Commit 1cc1c288 authored by Megan Henning's avatar Megan Henning
Browse files

Add reset-registration endpoint

parent 59a018d3
No related branches found
No related tags found
No related merge requests found
...@@ -116,10 +116,11 @@ endpoints = [ ...@@ -116,10 +116,11 @@ endpoints = [
route('/self/avatar', UserHandler, h='self_avatar', m=['GET']), route('/self/avatar', UserHandler, h='self_avatar', m=['GET']),
route('/self/key', UserHandler, h='generate_api_key',m=['POST']), route('/self/key', UserHandler, h='generate_api_key',m=['POST']),
route('/<_id:{uid}>', UserHandler), route('/<_id:{uid}>', UserHandler),
route('/<uid:{uid}>/groups', GroupHandler, h='get_all', m=['GET']), route('/<uid:{uid}>/groups', GroupHandler, h='get_all', m=['GET']),
route('/<uid:{uid}>/avatar', UserHandler, h='avatar', m=['GET']), route('/<uid:{uid}>/avatar', UserHandler, h='avatar', m=['GET']),
route('/<uid:{uid}>/<cont_name:{cname}>', ContainerHandler, h='get_all_for_user', m=['GET']), route('/<uid:{uid}>/reset-registration', UserHandler, h='reset_registration', m=['POST']),
route('/<uid:{uid}>/<cont_name:{cname}>', ContainerHandler, h='get_all_for_user', m=['GET']),
]), ]),
......
...@@ -55,6 +55,18 @@ def require_login(handler_method): ...@@ -55,6 +55,18 @@ def require_login(handler_method):
return handler_method(self, *args, **kwargs) return handler_method(self, *args, **kwargs)
return check_login return check_login
def require_admin(handler_method):
"""
A decorator to ensure the request is made as superuser.
Accepts drone and user requests.
"""
def check_admin(self, *args, **kwargs):
if not self.user_is_admin:
raise APIPermissionException('Admin user required.')
return handler_method(self, *args, **kwargs)
return check_admin
def require_superuser(handler_method): def require_superuser(handler_method):
""" """
A decorator to ensure the request is made as superuser. A decorator to ensure the request is made as superuser.
......
...@@ -7,7 +7,7 @@ from ..web import base ...@@ -7,7 +7,7 @@ from ..web import base
from .. import util from .. import util
from .. import config from .. import config
from .. import validators from .. import validators
from ..auth import userauth from ..auth import userauth, require_admin
from ..dao import containerstorage from ..dao import containerstorage
from ..dao import noop, APIStorageException from ..dao import noop, APIStorageException
...@@ -177,6 +177,21 @@ class UserHandler(base.RequestHandler): ...@@ -177,6 +177,21 @@ class UserHandler(base.RequestHandler):
else: else:
self.abort(500, 'New key for user {} not generated'.format(self.uid)) self.abort(500, 'New key for user {} not generated'.format(self.uid))
@require_admin
def reset_registration(self, uid):
new_registration_code = base64.urlsafe_b64encode(os.urandom(42))
update = {
'modified': datetime.datetime.utcnow(),
'wechat': {
'registration_code': new_registration_code
}
}
result = self.storage.exec_op('PUT', _id=uid, payload=update)
if result.modified_count == 1:
return {'registration_code': new_registration_code}
else:
self.abort(404, 'User {} not updated'.format(uid))
def _get_user(self, _id): def _get_user(self, _id):
user = self.storage.get_container(_id) user = self.storage.get_container(_id)
if user is not None: if user is not None:
......
...@@ -90,6 +90,8 @@ class RequestHandler(webapp2.RequestHandler): ...@@ -90,6 +90,8 @@ class RequestHandler(webapp2.RequestHandler):
self.abort(402, 'user account ' + self.uid + ' is disabled') self.abort(402, 'user account ' + self.uid + ' is disabled')
if user.get('root'): if user.get('root'):
self.user_is_admin = True self.user_is_admin = True
else:
self.user_is_admin = False
if self.is_true('root'): if self.is_true('root'):
if user.get('root'): if user.get('root'):
self.superuser_request = True self.superuser_request = True
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment