Commit Graph

576 Commits

Author SHA1 Message Date
pre-commit-ci[bot]
cedf12baeb [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2022-06-01 20:28:55 +00:00
Simon Li
b403c41c15 Remove old comment, include description in servername error
Co-authored-by: Min RK <benjaminrk@gmail.com>
2022-06-01 21:28:24 +01:00
Simon Li
50fb1a016c Move server-name / check to higher up, add test 2022-05-27 22:06:19 +01:00
Simon Li
f51faa25ed Ban / from server-name 2022-05-24 17:46:08 +01:00
Min RK
5ca96fa758 Merge pull request #3878 from minrk/admin-ui-scope
add 'admin-ui' scope for access to the admin ui
2022-05-03 11:20:23 +02:00
Min RK
debac715bf add 'admin-ui' scope for access to the admin ui 2022-04-29 11:54:02 +02:00
Min RK
c6ed41e322 don't confuse :// in next_url query params for a redirect hostname 2022-04-28 13:35:37 +02:00
code-review-doctor
f0b2d8c4eb Fix issue probably-meant-fstring found at https://codereview.doctor 2022-04-24 17:30:49 +01:00
Joseph Clark
f2faf0ee43 Fix ValueError
Fixes ValueError: too many values to unpack (expected 2)
2022-04-01 15:44:28 -06:00
Min RK
7a9778249f run pre-commit with isort 2022-03-31 12:33:26 +02:00
Min RK
e7bc282c80 clear_cookie only accepts path, domain cookie args 2022-03-11 09:24:31 +01:00
Min RK
7861662e17 Replace failed spawners when starting new launch
Avoids leaving stale state when re-using a spawner that failed the last time it started

we keep failed spawners around to track their errors,
but we don't want to re-use them when it comes time to start a new launch.

adds User.get_spawner(server_name, replace_failed=True) to always get a non-failed Spawner
2022-03-07 14:03:48 +01:00
Rollin Thomas
a9fbe5c9f6 Enable options_from_form w/spawner from configuration 2022-02-11 10:06:38 -08:00
pre-commit-ci[bot]
6633f8ef28 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2022-01-31 22:17:11 +00:00
Min RK
bb5ec39b2f Merge pull request #3548 from C4IROcean/authenticator_user_group_management
Authenticator user group management
2022-01-25 14:36:41 +01:00
Min RK
88be7a9967 test coverage for Authenticator.managed_groups
- tests
- docs
- ensure all group APIs are rejected when auth is in control
- use 'groups' field in return value of authenticate/refresh_user, instead of defining new method
- log group changes in sync_groups
2022-01-24 13:45:35 +01:00
Erik Sundell
538abdf084 Merge pull request #3763 from minrk/page-scopes
apply scope checks to some admin-or-self situations
2022-01-20 16:21:51 +01:00
Thomas Li Fredriksen
144abcb965 Added authenticator hook for synchronizing user groups
- Added hook function stub to authenticator base class
- Added new config option `manage_groups` to base `Authenticator` class
- Call authenticator hook from `refresh_auth`-function in `Base` handler class
- Added example
2022-01-20 13:30:03 +01:00
Min RK
6e5c307edb apply scope checks to some admin-or-self pages
Some non-api spawn and redirect checks still had `self or admin`,
when they should have checked directly for the appropriate permissions

This removes the long-deprecated redirect from `/user/other` -> `/user/self` _if_ the other server is not running.
The result is a more consistent behavior whether the requested server is running or not,
and whether the user has _access_ to the running server or not.
2022-01-20 13:27:43 +01:00
Min RK
704712cc81 Add read:metrics scope for metrics endpoint
and ensure token auth is accepted
2022-01-18 15:02:24 +01:00
Min RK
f9fa21bfd7 relay custom messages in exception.jupyterhub_message in progress API
matches the message shown on the HTML spawn-failed page

For consistency, also support `jupyterhub_html_message` to populate the `html_message` field
2022-01-18 09:15:58 +01:00
Min RK
ccfee4d235 use outermost proxied entry when checking for browser protocol
wee care about what the browser sees, so trust the outermost entry instead of the innermost

This is not secure _in general_, in that these values can be spoofed by malicious proxies,
but for CORS and cookie purposes, we only care about what the browser sees,
however many hops there may be.

A malicious proxy in the chain here isn't a concern because what matters is the immediate
hop from the _browser_, not the immediate hop from the _server_.
2022-01-07 14:03:11 +01:00
Erik Sundell
225ca9007a Merge pull request #3731 from minrk/allow-token-auth-user-url
accept token auth on `/hub/user/...`
2021-12-20 17:42:41 +01:00
Min RK
36cb1df27e accept token auth on /hub/user/... which are probably requests to non-running servers
otherwise, requests get redirected to `/hub/login` instead of failing with 404/503
2021-12-20 13:37:47 +01:00
Min RK
2a8428dbb0 always assign default roles on login
successful authentication of a user always grants 'user' role

rather than only on first user creation in db
2021-12-16 12:42:47 +01:00
Min RK
bb75081086 Fix error message about pre_spawn_start
This isn't the only or even main thing likely to raise here,
so don't blame it, which is confusing, especially in a message shown to users.

Log the full exception, and show a more opaque message to the user to avoid confusion
2021-12-15 12:44:14 +01:00
Nathan Barber
3893fb6d2c Pass base_url 2021-12-13 19:55:23 -05:00
Erik Sundell
e540d143bb Merge pull request #3685 from minrk/session-id-model
Add Session id to token/identify models
2021-11-18 13:39:34 +01:00
Min RK
edfdf672d8 Hub: only accept tokens in API requests
do not allow token-based access to pages

Tokens are only accepted via Authorization header, which doesn't make sense to pass to pages,
so disallow it explicitly to avoid surprises
2021-11-18 09:36:49 +01:00
Min RK
39f19aef49 add session_id to token model 2021-11-17 09:46:26 +01:00
Min RK
9adbafdfb3 consistent handling of any timeout error
some things raise standard TimeoutError, others may raise tornado gen.TimeoutError (gen.with_timeout)

For consistency, add AnyTimeoutError tuple to allow catching any timeout, no matter what kind

Where we were raising `TimeoutError`,
we should have been raising `asyncio.TimeoutError`.

The base TimeoutError is an OSError for ETIMEO, which is for system calls
2021-10-20 20:07:45 +02:00
Min RK
9209ccd0de Merge pull request #3636 from yuvipanda/404
Fail suspected API requests with 424, not 503
2021-10-05 15:16:18 +02:00
YuviPanda
6007ba78b0 Preserve older 503 behavior behind a flag 2021-10-05 17:56:51 +05:30
YuviPanda
9cb19cc342 Use 424 rather than 404 to indicate non-running server
404 is also used to identify that a particular resource
(like a kernel or terminal) is not present, maybe because
it is deleted. That comes from the notebook server, while
here we are responding from JupyterHub. Saying that the
user server they are trying to request the resource (kernel, etc)
from does not exist seems right.
2021-10-05 17:44:17 +05:30
YuviPanda
0f471f4e12 Fail suspected API requests with 404, not 503
Non-running user servers making requests is a fairly
common occurance - user servers get culled while their
browser tabs are left open. So we now have a background level
of 503s responses on the hub *all* the time, making it
very difficult to detect *real* 503s, which should ideally
be closely monitored and alerted on.

I *think* 404 is a more appropriate response, as the resource
(API) being requested is no longer present.
2021-10-05 03:00:16 +05:30
pre-commit-ci[bot]
3f93942a24 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2021-09-26 19:55:05 +00:00
Michael Albert
aeb3130b25 Added base_url to path for jupyterhub_session_id cookie 2021-09-26 15:33:08 -04:00
Min RK
5f19989467 suggest roles instead of admin_users
and make admin link permission check match admin page

it would be nice if this could be consolidated (maybe an `admin:ui` permission?)
2021-09-16 11:57:36 +02:00
Min RK
559b626046 remove unused Pagination class
used only for 1.4 admin page, not api
2021-09-13 13:16:35 +02:00
Erik Sundell
bc71ad6d73 Apply suggestions from code review
Co-authored-by: Carol Willing <carolcode@willingconsulting.com>
2021-08-26 16:23:38 +02:00
Erik Sundell
d6c48b15fe pyupgrade: run pyupgrade --py36-plus and black on all but tests 2021-08-26 16:23:38 +02:00
Min RK
d0c2bc051a test pagination limits on users endpoint 2021-08-24 13:56:11 +02:00
Min RK
e4dbc22cdf Remove a couple every-request debug statements
logging all scopes every request and for every user model retrieval gets noisy
2021-08-24 09:44:23 +02:00
Min RK
3bcc542e27 finish up db rollback checks
- move catch_db_error to utils
- tidy catch/propagate errors in prepare, get_current_user
2021-08-10 15:03:41 +02:00
SHAHN3
044fb23a70 add explicit db rollback
add context manager/decorator for db rollback

add db rollback in top level prepare method

Co-authored-by: Sarath Babu <sbreached@gmail.com>
2021-08-10 14:49:37 +02:00
0mar
1bfe4be634 Added test for admin pages scope guard 2021-06-16 11:59:48 +02:00
0mar
7a3b237bb3 Refactored scope names and updated docs to reflect this 2021-06-15 13:00:15 +02:00
Min RK
744983e53f sync rbac with main
# Conflicts:
#	docs/rest-api.yml
#	jupyterhub/oauth/provider.py
2021-06-14 12:53:39 +02:00
Min RK
7e46d5d0fc store relationship between oauth client and service/spawner
so that we can look up the spawner/service from the oauth client and vice versa
2021-06-07 13:58:27 +02:00
Min RK
563146445f add scopes.check_scope_filter
Extracted from APIHandler.get_scope_filter for easier re-use

and mve get_scope_filter to BaseHandler from APIHandler since it will be needed on oauth
2021-06-07 13:58:27 +02:00