Commit Graph

2070 Commits

Author SHA1 Message Date
Min RK
9bf70208c8 return 'spawn' pending for spawn or proxy_pending
In general, we treat both the same way
2017-08-03 10:52:01 +02:00
Min RK
fada0d99f0 call it active_server_limit 2017-08-03 10:50:50 +02:00
Min RK
e6ce468301 set Spawner.server directly
avoids Spawner.server property looking up on the ORM every time,
which is expensive and we want to check `Spawner.server is None` often.
2017-08-03 09:59:01 +02:00
Min RK
875e5d59fe Merge pull request #1300 from minrk/check-hub-ip
verify route targets in check_routes
2017-08-02 22:28:38 +02:00
Min RK
6556135a69 verify route targets in check_routes
updates routes that have the wrong target
2017-08-02 11:23:49 +02:00
Min RK
8636b4ebca Merge pull request #1294 from minrk/alembic-tag
always include and check alembic revision
2017-08-02 11:14:44 +02:00
Min RK
4a5f914a62 only apply reduced hash+salt to internally generated tokens
don't trust any user-provided tokens to have decent entropy, regardless of size
2017-08-02 11:14:18 +02:00
Yuvi Panda
47b6014d13 Merge pull request #1297 from minrk/check-enabled-auth-state
prevent saving auth_state if auth_state is not enabled.
2017-08-01 09:24:34 -07:00
Yuvi Panda
1995d825df Merge pull request #1293 from minrk/test-spawn-limit
test pending spawn count
2017-08-01 09:23:36 -07:00
Min RK
f49606dff6 add user.count_active_users
produces summary of active/pending/ready spawner counts

Avoids brittle bookkeeping of running counts,
computing the value upon request.

For 10k users this is still only a few milliseconds, which seems worth it
2017-08-01 17:00:45 +02:00
Min RK
7520d4b81e add concurrent_user_limit
limits total active users, not just spawns
2017-08-01 16:22:54 +02:00
Min RK
083408a685 add pending/ready/active properties to Spawner
- pending: stop or start is pending
- ready: spawner is running and ready (not pending)
- active: spawner is running or pending (consuming resources)
2017-08-01 16:17:37 +02:00
Min RK
9c4972239d prevent saving auth_state if auth_state is not enabled.
allows Authenticators to return auth_state without having to check enable_auth_state
2017-08-01 10:51:44 +02:00
Min RK
4458f2e6d4 error when db mismatches is SystemExit now
since we catch explicitly and call `self.exit` with a nice message
2017-07-31 17:04:27 +02:00
Min RK
a24027f188 hook up app logging in upgrade-db
matches default formatting
2017-07-31 16:19:47 +02:00
Min RK
c749fc05f4 update 0.8 alembic revision
add some missing transactions
2017-07-31 16:19:24 +02:00
Min RK
5ad77df04f check database revision on launch
fail with informative error if version mismatches

Since we weren't always tagging before,
we have to handle no tag being present:

- database empty (use latest because we are about to create everything anew)
- if 'spawners' is present, assume 0.8.dev
- if 'services' is present, assume 0.7.x
- else: assume base revision when we started tracking this stuff
2017-07-31 16:18:58 +02:00
Min RK
4b51d67d35 match alembic log formatting to default hub log format 2017-07-31 15:12:39 +02:00
Min RK
88268bd76f test spawn_pending_count
make sure to cover various cases of spawn failure
so that failed spawns don't leak pending-spawn counts
2017-07-31 12:39:06 +02:00
Min RK
744d96330e use properties for spawn_pending 2017-07-31 11:45:01 +02:00
Min RK
55c3164a7d Make default concurrent spawn limit 100
it's a conservative default, and deployments can turn it up if need be
2017-07-31 11:24:21 +02:00
Min RK
c78e31b136 Merge pull request #1290 from yuvipanda/concurrent_spawn_limit
Add support for limiting the number of concurrent spawns
2017-07-31 10:28:37 +02:00
Min RK
ecfd0a6796 Merge pull request #1285 from Carreau/spawner-import
Try enforcing methods overwrite at import time.
2017-07-31 10:27:28 +02:00
Yuvi Panda
162ce2a9c5 Merge pull request #1178 from yuvipanda/auth-state
Encrypt auth_state at rest
2017-07-30 10:31:32 -07:00
Min RK
1f2125a097 Add Authenticator.enable_auth_state
Allows authenticators to optionally enable this flag

and signal that auth_state will be used,
enabling early check and exit if encryption is not available.
2017-07-28 22:36:49 +02:00
Matthias Bussonnier
feae3eacb1 Try enforcing methods overwrite at import time.
Currently Spawners need to overwrite start, stop, poll. When this is not
done, it will fail at runtime.

This replicate this check at class definition time, meaning that
potential errors will be caught way earlier. It also have not runtime
cost as the check is a class definition time (ie often import time).

This takes only effect on Python 3.6+ which introduce __init_subclass__,
we could do it with metaclasses, but that's might be too complicated.

If one want to create a class the avoid these restriction they can
overwrite __init_subclass__ and not call the super() method.
2017-07-28 12:05:18 -07:00
yuvipanda
a1a706cb31 More cleanup 2017-07-28 11:58:58 -07:00
Min RK
8a1da297d9 CryptKeeper is configurable 2017-07-28 17:20:57 +02:00
Min RK
1987221026 Python 3.4 doesn't allow bytestring formatting
can't do  until Python 3.5. When do we get to drop py34 support :)
2017-07-28 17:08:18 +02:00
Min RK
4b7b34064b alembic revision for encrypted_auth_state 2017-07-28 16:52:18 +02:00
Min RK
5abb4618bd test auth_state on login handler 2017-07-28 16:51:46 +02:00
Min RK
75c1d36237 trade privy for raw Fernet
only benefit of privy was KDF, but if users provide good 32B keys, this doesn't help.

Fernet already adds randomness, etc. to tokens, so is good enough on its own if keys are good.
2017-07-28 16:08:12 +02:00
Min RK
90e8e1a8aa move auth_state encryption outside the ORM
privy is used for encryption

- db only has blob column, no knowledge of encryption
- add CryptKeeper for handling encryption
- use privy for encryption, so we have fewer choices to make
- storing/loading encrypted auth_state runs in a ThreadPool
2017-07-28 16:08:12 +02:00
Min RK
32a9b38d26 use HKDF on auth keys
if the given tokens aren't already the right shape, pass through a proper KDF
2017-07-28 16:08:12 +02:00
Min RK
5714f56083 encrypt auth_state with MultiFernet
- MultFernet allows key rotation via `AUTH_STATE_KEY=secret2;secret1;secret0`
- Failure to decrypt results in cleared state
- Attempting to set auth_state without encryption is a hard failure
- Absent encryption, auth_state will always be None
2017-07-28 16:08:12 +02:00
Min RK
3d635816c9 add cryptography to dev requirements 2017-07-28 16:08:12 +02:00
yuvipanda
1aa5ce2f35 Add sqlalchemy-utils to requirements.txt 2017-07-28 16:08:12 +02:00
yuvipanda
f765fde6c1 Add OptionalEncrypted type 2017-07-28 16:08:12 +02:00
Min RK
523cbf641c Merge pull request #1288 from Carreau/fix-port-number
Default port is 8081 not 8080
2017-07-28 15:36:01 +02:00
yuvipanda
112834bbaa Cleanup code a little 2017-07-28 01:10:19 -07:00
Matthias Bussonnier
f0ab1ae907 Merge pull request #1286 from willingc/authenticator-edits
Refresh docs on Authenticators
2017-07-27 22:16:32 -07:00
yuvipanda
d6827a2794 Error if we hit pending spawn limit
The backlog actually doesn't help - almost all of them fail,
and the exponential backoff just adds more work for our ticks
2017-07-27 20:36:59 -07:00
Carol Willing
a1591185c1 Flesh out auth in swagger spec 2017-07-27 19:44:59 -07:00
Carol Willing
b77c8a8717 Update the API index section 2017-07-27 19:44:59 -07:00
Carol Willing
831b7d2a86 WIP 2017-07-27 19:44:59 -07:00
Carol Willing
057a52dd32 Add oauth to swagger api doc 2017-07-27 19:44:59 -07:00
Matthias Bussonnier
8f88fae530 Default port is 8081 not 8080 2017-07-27 19:21:16 -07:00
Carol Willing
85cc8eb6f3 Fix typo 2017-07-27 17:42:49 -07:00
Carol Willing
349f1b115e Reorganize content 2017-07-27 17:33:37 -07:00
yuvipanda
27de44b0ec Add support for limiting the number of concurrent spawns 2017-07-27 16:32:45 -07:00