mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-10 19:43:01 +00:00
Add ability to modify auth_state via the REST API
This commit is contained in:
@@ -142,6 +142,7 @@ class APIHandler(BaseHandler):
|
|||||||
'name': str,
|
'name': str,
|
||||||
'admin': bool,
|
'admin': bool,
|
||||||
'groups': list,
|
'groups': list,
|
||||||
|
'auth_state': dict,
|
||||||
}
|
}
|
||||||
|
|
||||||
_group_model_types = {
|
_group_model_types = {
|
||||||
|
@@ -170,7 +170,10 @@ class UserAPIHandler(APIHandler):
|
|||||||
if self.find_user(data['name']):
|
if self.find_user(data['name']):
|
||||||
raise web.HTTPError(400, "User %s already exists, username must be unique" % data['name'])
|
raise web.HTTPError(400, "User %s already exists, username must be unique" % data['name'])
|
||||||
for key, value in data.items():
|
for key, value in data.items():
|
||||||
setattr(user, key, value)
|
if key == 'auth_state':
|
||||||
|
await user.save_auth_state(value)
|
||||||
|
else:
|
||||||
|
setattr(user, key, value)
|
||||||
self.db.commit()
|
self.db.commit()
|
||||||
user_ = self.user_model(user)
|
user_ = self.user_model(user)
|
||||||
user_['auth_state'] = await user.get_auth_state()
|
user_['auth_state'] = await user.get_auth_state()
|
||||||
|
@@ -421,6 +421,31 @@ def test_make_admin(app):
|
|||||||
assert user.admin
|
assert user.admin
|
||||||
|
|
||||||
|
|
||||||
|
@mark.user
|
||||||
|
@mark.gen_test
|
||||||
|
def test_set_auth_state(app):
|
||||||
|
auth_state = {'secret': 'hello'}
|
||||||
|
db = app.db
|
||||||
|
name = 'admin'
|
||||||
|
user = find_user(db, name)
|
||||||
|
assert user is not None
|
||||||
|
|
||||||
|
r = yield api_request(app, 'users', name, method='patch',
|
||||||
|
data=json.dumps({'auth_state': auth_state})
|
||||||
|
)
|
||||||
|
assert r.status_code == 200
|
||||||
|
user = find_user(db, name)
|
||||||
|
assert user is not None
|
||||||
|
assert user.name == name
|
||||||
|
encrypted_auth = user.encrypted_auth_state
|
||||||
|
assert encrypted_auth is not None
|
||||||
|
|
||||||
|
r = yield api_request(app, 'users', name)
|
||||||
|
assert r.status_code == 200
|
||||||
|
assert user.name == name
|
||||||
|
assert r.json()['auth_state'] == auth_state
|
||||||
|
|
||||||
|
|
||||||
@mark.gen_test
|
@mark.gen_test
|
||||||
def test_spawn(app):
|
def test_spawn(app):
|
||||||
db = app.db
|
db = app.db
|
||||||
|
Reference in New Issue
Block a user