mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-12 04:23:01 +00:00
fix Spawner.oauth_roles config
missing cast to orm.Role from config when populating oauth client test included
This commit is contained in:
@@ -428,7 +428,22 @@ async def test_hub_connect_url(db):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_spawner_oauth_roles(app):
|
async def test_spawner_oauth_roles(app, user):
|
||||||
allowed_roles = ['lotsa', 'roles']
|
allowed_roles = ["admin", "user"]
|
||||||
spawner = new_spawner(app.db, oauth_roles=allowed_roles)
|
spawner = user.spawners['']
|
||||||
assert spawner.oauth_roles == allowed_roles
|
spawner.oauth_roles = allowed_roles
|
||||||
|
# exercise start/stop which assign roles to oauth client
|
||||||
|
await spawner.user.spawn()
|
||||||
|
oauth_client = spawner.orm_spawner.oauth_client
|
||||||
|
assert sorted(role.name for role in oauth_client.allowed_roles) == allowed_roles
|
||||||
|
await spawner.user.stop()
|
||||||
|
|
||||||
|
|
||||||
|
async def test_spawner_oauth_roles_bad(app, user):
|
||||||
|
allowed_roles = ["user", "nosuchrole"]
|
||||||
|
spawner = user.spawners['']
|
||||||
|
spawner.oauth_roles = allowed_roles
|
||||||
|
# exercise start/stop which assign roles
|
||||||
|
# raises ValueError if we try to assign a role that doesn't exist
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
await spawner.user.spawn()
|
||||||
|
@@ -622,6 +622,19 @@ class User:
|
|||||||
if callable(allowed_roles):
|
if callable(allowed_roles):
|
||||||
allowed_roles = allowed_roles(spawner)
|
allowed_roles = allowed_roles(spawner)
|
||||||
|
|
||||||
|
# allowed_roles config is a list of strings
|
||||||
|
# oauth provider.allowed_roles is a list of orm.Roles
|
||||||
|
if allowed_roles:
|
||||||
|
allowed_role_names = allowed_roles
|
||||||
|
allowed_roles = list(
|
||||||
|
self.db.query(orm.Role).filter(orm.Role.name.in_(allowed_roles))
|
||||||
|
)
|
||||||
|
if len(allowed_roles) != len(allowed_role_names):
|
||||||
|
missing_roles = set(allowed_role_names).difference(
|
||||||
|
{role.name for role in allowed_roles}
|
||||||
|
)
|
||||||
|
raise ValueError(f"No such role(s): {', '.join(missing_roles)}")
|
||||||
|
|
||||||
oauth_client = oauth_provider.add_client(
|
oauth_client = oauth_provider.add_client(
|
||||||
client_id,
|
client_id,
|
||||||
api_token,
|
api_token,
|
||||||
|
Reference in New Issue
Block a user