Commit Graph

155 Commits

Author SHA1 Message Date
Min RK
fd3ae8b2b6 Merge pull request #5033 from manics/urlpathjoin-trailing-empty
url_path_join: handle empty trailing components
2025-03-31 10:07:57 +02:00
Simon Li
5e77ca22e3 url_path_join: handle empty trailing components
This ensures that `url_path_join("/x/", "") returns "/x/" not "/x"
2025-03-27 18:36:50 +00:00
Simon Li
5b02d9c222 Add method to handle formatting of IPv6 in URLs 2025-01-30 18:44:50 +00:00
Simon Li
79af8ea264 Use ::1 for localhost if hub IP is :: 2025-01-30 18:28:49 +00:00
Simon Li
ec83356261 Wrap ipv6 in [] when displaying/logging messages 2025-01-30 18:28:49 +00:00
Min RK
a2877c7be2 satisfy updated ruff rules
mostly f-strings, manual fixes
2024-12-03 09:45:09 +01:00
YuviPanda
5f3833bc95 Allow overriding spawner config based on user group membership
Similar to 'kubespawner_override' in KubeSpawner, this allows
admins to selectivel override spawner configuration based on
groups a user belongs to. This allows for low maintenance but
extremely powerful customization based on group membership.
This is particularly powerful when combined with
https://github.com/jupyterhub/oauthenticator/pull/735

\#\# Dictionary vs List

Ordering is important here, but still I choose to implement this
configuration as a dictionary of dictionaries vs a list. This is
primarily to allow for easy overriding in z2jh (and similar places),
where Lists are just really hard to override. Ordering is provided
by lexicographically sorting the keys, similar to how we do it in z2jh.

\#\# Merging config

The merging code is literally copied from KubeSpawner, and provides
the exact same behavior. Documentation of how it acts is also copied.
2024-05-23 19:48:25 -07:00
Min RK
5636472ebf apply ruff fixes for UP031 2024-05-07 11:33:59 +02:00
Jakub Klinkovský
dbd3813a1c async_generator is needed only for python<3.10
- the asynccontextmanager object is available in the standard contextlib
  module since Pyhton 3.7
- the aclosing object is available in the standard contextlib module
  since Pyhton 3.10
- JupyterHub currently requires Python 3.8 or newer
2024-04-24 23:11:10 +02:00
Min RK
83ce6d3f6b forward-port 4.1.0 2024-03-19 18:45:58 +01:00
Tim Kreuzer
ed5b9249fe catch all exceptions, to allow a more stable wait_up. Without removing OSError specific catch 2024-03-18 18:28:27 +01:00
Tim Kreuzer
bb702abe15 Revert "except ValueError while waiting for server to be reachable"
This reverts commit 6bc3e05c6c.
2024-03-18 18:27:31 +01:00
Tim Kreuzer
5723746e05 catch all exceptions, to allow a more stable wait_up 2024-03-18 14:47:14 +01:00
Tim Kreuzer
6bc3e05c6c except ValueError while waiting for server to be reachable 2024-03-18 11:05:08 +01:00
Min RK
52af3abedc run ruff via pre-commit 2024-03-11 09:39:10 +01:00
Min RK
e15b7c2620 apply pyupgrade fixes via ruff
ruff check --fix --select UP
2024-03-11 09:16:02 +01:00
pre-commit-ci[bot]
ef568e3d61 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2024-02-05 20:27:29 +00:00
Min RK
be14baf096 avoid deprecated datetime.utcnow
deprecated in Python 3.12

replace with equivalent utils.utcnow(with_tz=False)
2023-12-20 14:23:49 +01:00
Min RK
96f20cf2b0 simplify, avoid errors in parsing accept headers 2023-11-16 11:14:24 +01:00
Min RK
ece8408381 Improve debugging when waiting for servers
Add debug messages and timers for start and end waiting for servers

and improve logic for awaiting proxy endpoints using concurrency primitives instead of a for-loop
2023-09-12 09:27:59 +02:00
Min RK
340abcc0d5 No suffix for user subdomains 2023-08-15 11:20:45 +02:00
Min RK
6ea1976b9c Apply suggestions from code review
Co-authored-by: Erik Sundell <erik.i.sundell@gmail.com>
2023-08-01 14:31:07 +02:00
Min RK
8e8640de3e make new subdomain scheme compatible with wildcard SSL
rather than using multi-level subdomains, which are nicer,
use `--user` and `--service` so it's only one DNS level below hub.

This is not as nice, but is compatible with wildcard SSL which only allows one level of separation.
2023-06-26 11:06:29 +02:00
Min RK
f7c601ec25 expose dns_safe_name on users
so spawners (e.g. KubeSpawner) can use it.

on users, it is limited to 40 characters to allow it to be used as part of a label.
2023-06-26 11:05:02 +02:00
Min RK
bd06651bb0 add JupyterHub.subdomain_hook
and new opt-in 'idna' hook that should always produce valid domains
2023-06-06 11:04:21 +02:00
Min RK
4026ed87e8 exponential_backoff: preserve jitter when max_wait is reached 2023-03-02 13:57:13 +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
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
986de0b5db use str-format for ssl.Purposes
rather than default, which is a weird repr
2022-07-29 09:26:21 +02:00
Min RK
a2a01755ec simplify make_ssl_context
pass ssl.Purpose explicitly, deprecate verify/check_hostname

3.10 disallows 'purpose=SERVER_AUTH' from creating server sockets.
Instead:

- pass purpose directly
- always verify
- no need to set check_hostname, already covered by purpose defaults
2022-07-14 11:02:44 -07: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
Simon Li
84cb9761e8 Escape named servers when used in URL paths 2022-05-22 23:31:47 +01:00
Min RK
7a9778249f run pre-commit with isort 2022-03-31 12:33:26 +02: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
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
pre-commit-ci[bot]
13172e6856 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2022-01-03 21:06:46 +00:00
Min RK
487c4524ad deprecate instead of remove @admin_only auth decorator
no harm in keeping it around for a deprecation cycle
2021-10-25 13:00:45 +02: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
Erik Sundell
d6c48b15fe pyupgrade: run pyupgrade --py36-plus and black on all but tests 2021-08-26 16:23:38 +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
0mar
7544965145 Fixed server model, removed some auth decorators 2021-04-15 16:34:46 +02:00
Min RK
ebb13ed39f Merge master into rbac 2021-04-13 13:07:30 +02:00
YuviPanda
9f6467be05 Use 'secrets' module to generate secrets
Python 3.6+ has this
2021-03-29 17:07:03 +05:30
Min RK
4dac580d3d Merge master into rbac 2021-01-27 12:39:02 +01:00
Omar Richardson
662017f260 Refactored scope module. Implemented filter in *ListApiHandlers 2021-01-05 11:42:53 +01:00
Omar Richardson
82bebfaff2 Added unit tests and fixed bugs in scope filter 2021-01-04 22:44:23 +01:00
0mar
f4ba57b1d7 Implemented filter list skeleton 2021-01-04 16:24:50 +01:00
0mar
3eccf7abdd Changed scopes from list to set and made filters additive 2020-12-14 17:39:06 +01:00
0mar
62c56ec2c8 Started work on fixing tests 2020-12-09 17:34:49 +01:00
IvanaH8
9de9070641 fixed scope test attr error for older_requirements.txt test 2020-12-09 14:50:50 +01:00