Commit Graph

92 Commits

Author SHA1 Message Date
Min RK
55213f6f53 run pre-commit
black adds some blank lines
2024-01-30 14:32:25 +01:00
Min RK
3ad81f3bce sync with main 2023-02-08 16:39:59 +01:00
pre-commit-ci[bot]
be07c7ef31 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2023-02-07 04:40:23 +00:00
Min RK
58dccdb59b jupyterhub-singleuser as a Jupyter Server 2.0 extension
mostly a copy (fork) of singleuser app
using public APIs instead of lots of patching.

opt-in via `JUPYTERHUB_SINGLEUSER_EXTENSION=1`

related changes:

- stop running a test single-user server in a thread. It's complicated and fragile.
  Instead, run it normally, and get the info we need from a custom handler registered via an extension
  via the `full_spawn` fixture
2023-02-02 16:14:06 +01:00
Min RK
44cb302de0 simplify some async fixtures
use async fixtures for simpler event-loop integration

several of these fixtures were written before fixtures themselves could be async,
but now they can, which means we can use async/await instead of run_sync.
2023-01-31 11:17:40 +01:00
pre-commit-ci[bot]
865d5f7646 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2022-11-16 14:53:12 +00:00
Min RK
b0b7378e2b Avoid deprecated 'IOLoop.current' method
Deprecated in tornado 6.2, only access running loop from inside coroutines
2022-07-29 11:30:39 +02:00
Min RK
a7cced506b Remove 3.6 compatibility shims
- asyncio.all_tasks/current_task
- pytest-asyncio 0.17
- contextmanager.nullcontext
2022-07-14 09:05:01 -07:00
Min RK
bf2e322c22 Cleanup everything on API shutdown
via app.stop()
2022-05-05 12:53:21 +02:00
Min RK
b6210dc225 add !service and !server scope filters
allows oauth clients to issue scopes that only grant access to the issuing service

e.g. access:service!service or access:servers!server

especially useful with custom scopes
2022-04-08 20:10:23 +02:00
Min RK
7a9778249f run pre-commit with isort 2022-03-31 12:33:26 +02:00
Erik Sundell
318c95342d Merge pull request #3833 from minrk/token-scopes
Tokens have scopes instead of roles
2022-03-29 23:49:35 +02:00
Min RK
b935190da8 adopt pytest-asyncio asyncio_mode
removes need for our own implementation of the same behavior

but keep it around while we still support Python 3.6,
since the version (0.17) introducing asyncio_mode drops support for Python 3.6
2022-03-23 09:25:22 +01:00
Min RK
3076845927 tokens have scopes
instead of roles, which allow tokens to change permissions over time

This is mostly a low-level change,
with little outward-facing effects.

- on upgrade, evaluate all token role assignments to their current scopes,
  and store those scopes on the tokens
- assigning roles to tokens still works, but scopes are evaluated and validated immediately,
  rather than lazily stored as roles
- no longer need to check for role permission changes on startup, because token permissions aren't affected
- move a few scope utilities from roles to scopes
- oauth allows specifying scopes, not just roles.
  But these are still at the level specified in roles,
  not fully-resolved scopes.
- more granular APIs for working with scopes and roles
2022-03-18 14:13:16 +01:00
Min RK
fdf23600c0 allow custom scopes
defined with

    c.JupyterHub.custom_scopes = {
        'custom:scope': {'description': "text shown on oauth confirm"}
    }

Allows injecting custom scopes to roles,
allowing extension of granular permissions to service-defined custom scopes.

Custom scopes:

- MUST start with `custom:`
- MUST only contain ascii lowercase, numbers, colon, hyphen, asterisk, underscore
- MUST define a `description`
- MAY also define `subscopes` list(s), each of which must also be explicitly defined

HubAuth can be used to retrieve and check for custom scopes to authorize requests.
2022-03-11 11:37:26 +01:00
Erik Sundell
c8c7418ed2 pyupgrade: run pyupgrade --py36-plus and black on jupyterhub/tests 2021-08-26 16:05:18 +02:00
Min RK
8603723dbb add list:users|groups|services scopes
and govern GET /users|groups|services endpoints with these

Greatly simplifies filtering and pagination,
because these filters can be expressed in db filters,
unlike the potentially complex `read:users`.

Now the query itself will never return a model that should be excluded.

While writing the tests, I added more cleanup between tests.
We now ensure cleanup of all users and groups after each test,
which required updating some group tests which relied on this state leaking
2021-08-24 13:56:11 +02:00
0mar
528ab28871 Raise error when hub has no roles defined 2021-06-16 11:37:23 +02:00
Min RK
0a231fe8ba ensure managed services work with internal ssl
- ensure create_certs is called for managed services
- wait for services with http, which checks ssl connections (without http, only tcp was checked, which doesn't verify it works!)
2021-06-16 09:41:09 +02:00
Min RK
0ba222b288 move role/scope fixtures to conftest
so they can be more easily reused
2021-06-07 14:01:38 +02:00
Min RK
c8821b7700 init default oauth client in init_db
ensures jupyterhub client is present,
which is required for creation of tokens, etc.
2021-04-14 13:11:19 +02:00
Min RK
8f36e26b2d create initial oauth client in db fixture 2021-04-13 13:23:53 +02:00
0mar
1515747b1e Refactored role methods 2021-03-29 21:26:34 +02:00
0mar
7496fda089 Implemented default token roles, self scope for users and tokens for mockservices 2021-03-11 19:33:05 +01:00
IvanaH8
8a7320b318 fixed default roles for mocked services 2020-12-16 11:17:43 +01:00
Min RK
ba6c2cf854 Merge pull request #3266 from 0mar/reduce_ssl_testing
Test internal_ssl separately
2020-12-02 10:59:39 +01:00
Min RK
28fdbeb0c0 update back pre-commit hook
specify minimum target_version as py36

results in some churn
2020-11-30 10:13:10 +01:00
Omar Richardson
164447717f Fix formulation 2020-11-20 15:30:23 +01:00
Omar Richardson
0472ef0533 Central internal_ssl switch 2020-11-20 15:27:50 +01:00
Omar Richardson
313f050c42 Reduced ssl on for active tests only 2020-11-19 12:58:38 +01:00
Omar Richardson
c46beb976a Moving ssl tests to testing matrix 2020-11-19 11:59:03 +01:00
Erik Sundell
d581cf54cb Retain an assertion and update comments 2020-11-11 15:40:54 +01:00
Erik Sundell
fca2528332 Retain explicit pytest mark asyncio of our coroutines 2020-11-11 14:47:41 +01:00
Erik Sundell
e1166ec834 Replace @gen.coroutine/yield with async/await 2020-11-11 14:36:56 +01:00
Min RK
5e60582ef3 run autoformat
apologies to anyone finding this commit via git blame or log

run the autoformatting by

    pre-commit run --all-files
2019-02-19 17:00:10 +01:00
Min RK
895bc378df Merge branch 'master' into deprecations 2019-02-05 13:06:28 +01:00
Min RK
71a8573fdb fix some deprecation warnings in tests
Calling HasTraits(attr=value) doesn't work for non-traits

1. remove one redundant assignment for a non-trait
2. make one attribute a trait
2019-02-05 11:38:42 +01:00
Min RK
8c63f669a9 consolidate some test utilities in utils
instead of in test_api, test_pages

since they are used in a few places

also add user, username fixtures for generating test users
2019-01-04 11:03:20 +01:00
Min RK
d5f87fe09f update fixtures for pytest-asyncio
instead of pytest-tornado

verify that we don't make any async generator tests
which would pass silently without running any tests
2018-12-12 12:49:54 +01:00
Min RK
7a055e65db Catch and print errors stopping hub
in case it failed to fully start
2018-10-17 13:05:20 +02:00
Min RK
f3c2a15e53 ensure AsyncIOMainLoop is registered in tests 2018-10-15 16:29:00 +02:00
Min RK
d64853a6f5 fix ssl tmpdir in tests
must be module-scoped, not session-scoped, or it will get reused inconsistently
2018-10-15 15:35:21 +02:00
Min RK
b72d887dd7 register cleanup before start
avoids leaving lingering proxy if app fails to start
2018-10-15 15:33:59 +02:00
Thomas Mendoza
34d59f66d9 Setup mock services to use certs from env 2018-10-01 16:48:03 -07:00
Thomas Mendoza
d1aeff7bbf Fix issue where Mockub was not seeing ssl_enabled flag 2018-10-01 16:48:03 -07:00
Thomas Mendoza
67f19a65b7 Use Certipy's trust graph to set up internal_ssl
With changes to CHP requiring a second, different
authority, the complexity of managing trust within
JupyterHub has risen. To solve this, Certipy now
has a feature to specify what components should
trust what and builds trust bundles accordingly.
2018-09-12 17:46:39 -07:00
Thomas Mendoza
373c3f82dd SSL setup for testing
Setup general ssl request, not just to api

Basic tests comprised of non-ssl test copies

Create the context only when request is http

Refactor ssl key, cert, ca names

Configure the AsyncHTTPClient at app start

Change tests to import existing ones with ssl on

Override __new__ in MockHub to turn on SSL
2018-07-23 13:41:09 -07:00
Thomas Mendoza
a549edfd75 Testing internal ssl modifications 2018-07-18 16:02:57 -07:00
Carol Willing
07bbb4ea02 add comments to test file header docstring 2018-04-23 17:06:15 -07:00
Min RK
7b5235138f commit changes after stopping in cleanup 2018-04-09 16:00:04 +02:00