Commit Graph

243 Commits

Author SHA1 Message Date
Min RK
66cb630b86 separate OAuth access tokens from API tokens
OAuth access tokens can only be used to identify users, not perform actions on their behalf, which API tokens do.

Implementing OAuth scopes would allow us to achieve this limitation without separating the two items, but that would be a much bigger change, including having an OAuth "Would you like to grant permissions..." confirmation page.
2017-04-21 14:52:07 +02:00
Min RK
f58015dc57 remove references to unused other_user_cookies
OAuth gets rid of the concept of the Hub managing cookies on behalf of sub-servers
2017-04-18 11:22:00 +02:00
Min RK
39fce0304d support oauth in services
fix bugs caught by tests
2017-04-04 17:02:34 +02:00
Min RK
453d1daf8b move oauth tables to top-level orm 2017-03-29 13:35:13 +02:00
Min RK
9a40196678 Avoid storing secrets and tokens at rest
- OAuth access tokens *are* APITokens.
  oauth_access_tokens table only stores extra oauth metadata.
- only store hashed client_secret in database,
  using HashedCompare to allow comparison.
2017-03-28 16:19:56 +02:00
Christian Barra
4fdf405d77 add JupyterHub.allow_multiple_servers 2017-02-24 00:37:41 +01:00
Christian Barra
b09ccc4373 fix base_url 2017-02-24 00:37:40 +01:00
Christian Barra
5b85d1e248 correct server name and base_url unique=True 2017-02-24 00:09:48 +01:00
Christian Barra
a823a6b371 add a name field for the server 2017-02-24 00:09:48 +01:00
YuviPanda
9df6e76cc3 Make cookie_id be unique and not-null too
Fixes #985
2017-02-13 09:15:39 -08:00
Carol Willing
69d20eb297 Edit spacing in orm.py 2017-02-08 21:46:33 -08:00
Christian Barra
d28036e173 fix docstrings 2017-01-11 12:27:30 +01:00
Christian Barra
11196443ac remove relationship, fix some typo 2017-01-06 22:15:51 +01:00
Christian Barra
6694cb42c8 remove pep8 corrections 2017-01-03 14:30:36 +01:00
Christian Barra
02090c953b fix errors, remove pep8 corrections 2017-01-03 14:10:46 +01:00
Christian Barra
dbe8bf5428 add users_servers class in orm.py, correct test_orm.py, fix some pep8, issue #766 2016-12-17 04:55:00 +01:00
Min RK
aad063e3cd remove stopped users from proxy on startup
We already added running users, but we didn't handle removing users from the proxy
if the user's server was stopped (e.g. while the Hub was restarting).
2016-09-26 13:20:42 +02:00
Min RK
f97d32c5bd add services to the proxy
and start test coverage
2016-09-01 14:46:34 +02:00
Min RK
2a35d1c8a6 add service API tokens
service_tokens supersedes api_tokens,
since they now map to a new services collection,
rather than regular Hub usernames.

Services in the ORM have:

- API tokens
- servers (multiple, can be 0)
- pid (0 if not managed)
2016-07-28 17:23:44 +02:00
Min RK
d0449d136c cascade on API token delete 2016-07-11 10:44:55 -05:00
Min RK
ff9aeb70b4 try ondelete=SET NULL in foreign keys 2016-07-09 12:13:04 +02:00
Min RK
71f47b7a70 add user groups 2016-06-01 13:47:53 +02:00
Min RK
64dd1db327 add User.auth_state column
a place for storing authenticator state,
and a simple test case for alembic.
2016-05-26 14:17:41 +02:00
Min RK
094ac451c7 Don't allow bad tokens to create tokens in the db 2016-04-15 12:42:52 +02:00
Min RK
fa4b666693 allow pre-loading API tokens from config
This is the first small part of easing the pain of services,
which is generating the API tokens,
and used to require initializing the JupyterHub database.
2016-04-14 16:45:40 +02:00
Min RK
74e558dad2 set default pool_recycle if using mysql 2016-03-08 10:58:18 +01:00
Min RK
da1b9bdd80 Merge pull request #460 from yuvipanda/mysql-fix
Add lengths to all Unicode() columns
2016-03-07 10:36:17 +01:00
YuviPanda
bf9dea5522 Add lengths to all Unicode() ones
- Otherwise does not work with MySQL
- Change JSONDict to be TEXT (Unbounded) rather than VARCHAR.
  This makes most sense, since you can't index these anyway.
- The 'ip' field in Server is set to 255, since that is the
  max allowed length of DNS entries.
- Most of the rest of the Unicodes have approximately high
  values that most people should not mostly run into
  (famous last words).
2016-03-06 18:26:25 -08:00
Min RK
4533d96002 use the same connection check everywhere
avoids inconsistencies in error handling
2016-03-04 16:28:57 +01:00
Min RK
f565f8ac53 Don't add users with spawn_pending to the proxy
check_routes checks for missing routes for running users.
This is meant for when the proxy has been relaunched outside the Hub.

If spawners are slow to start, it's possible for check_routes to fire in the middle of spawning,
triggering addition of the user's server (which has no defined location yet) to the proxy before it's up.
If the spawning fails, the route will remain indefinitely (because it never should have been added in the first place), and the user will see 503 until their server is launched manually again.

Checking `spawn_pending` in user.running prevents this.
2016-03-01 15:18:51 +01:00
Min RK
29416463ff proxy needs user dict, which has proxy path
this won't be needed if/when I make a schema change, where domain is included in the Server table.
2016-02-26 17:32:55 +01:00
Min RK
a9b8542ec7 pass hub's host to single-user servers via hub_host 2016-02-26 17:32:54 +01:00
Min RK
b54bfad8c2 [WIP]: allow running single-user servers on subdomains
relies on CHP's host-based routing (a feature I didn't add!)

requires wildcard DNS and wildcard SSL for a proper setup

still lots to workout and cleanup in terms of cookies and where to use host, domain, path, but it works locally.
2016-02-26 17:32:54 +01:00
Min RK
cb55118f70 add debug logging for adding users with no running server
in check_routes, it has been reported that users without a running server are attempted to be added.

So something is wrong, either in sqlalchemy or my understanding of what it does (likely the latter),
because a filter for users with a non-None server is returning at least one result whose server is None.
2016-02-20 14:22:50 +01:00
Min RK
f626d2f6e5 use 127.0.0.1 instead of localhost
localhost can cause some issues on badly behaved or misconfigured systems,
and 127 seems simpler.
2016-02-03 10:30:09 +01:00
Min RK
cc4c65bd0b fix possible loss of port info due to mixed db sessions 2016-01-25 14:28:54 +01:00
Min RK
b9df681115 Merge pull request #353 from minrk/try-localhost
Ensure that we can bind and connect to localhost
2016-01-20 15:37:42 +01:00
Zoltan Fedor
faa259e97b IPv6 ready hosts file localhost issue
This is to resolve the 'Network is Unreachable' error experienced by a few when JupyterHUB is connecting to localhost.

On most recent linux OS versions like CentOS 6, 7, Red Hat 6, 7, Oracle Linux 6, 7, etc, the hosts file (/etc/hosts) usually has a line to make the server IPv6-ready:
    ::1 localhost
even if the given server actually has no IPv6 permissioned. In such case the Python socket library when connecting to 'localhost' will try to connect via the IPv6 protocol - which will fail with the 'Network is Unreachable' error.

To solve this we capture this error and try to reconnect on 127.0.0.1 instead of localhost, alias forcing the user of the IPv4 protocol.
2015-12-15 10:53:06 -05:00
Min RK
4785a1ef87 Ensure that we can bind and connect to localhost
otherwise fallback to 127.0.0.1 for defaults
2015-12-15 13:37:30 +01:00
Min RK
6f128758db move non-persisted User objects (spawner-related) off of orm.User
adds higher level User object, which handles spawning.
This object has running, spawner, etc. attributes.
2015-11-30 14:05:00 +01:00
Min RK
6f2aefb990 add pre/post-spawn hooks for Authenticators
allows setup/cleanup to be performed by the authenticator

use this to open PAM sessions at spawn
and close them at stop,
rather than open at login and never close.
2015-10-16 12:02:44 +02:00
Min RK
a451f11cd3 give Spawners a handle on the Authenticator
band-aid for spawner-authenticator pairs
2015-09-11 11:57:41 +02:00
Jessica B. Hamrick
ea5bfa9999 Unset all login cookies 2015-08-21 19:24:44 -07:00
Min RK
d4a4d04183 quote usernames
allow @ to be left unescaped in URLs, quote everything in cookie names
2015-04-30 12:04:32 -07:00
Min RK
e883fccf2b don't update last_activity on shutdown 2015-04-08 12:48:04 -07:00
Min RK
ba81bd4a01 Merge pull request #190 from minrk/bind_url
url logging
2015-03-24 11:52:33 -07:00
Min RK
5529774c1d url logging
log the actual bind url (Server.bind_url),
rather than the connect url (Server.url),
which converts all-interfaces IPs to 'localhost'
2015-03-23 12:12:10 -07:00
Min RK
da1fe54aee better error messages for spawn failure
Server started, but never became accessible:

> Failed to reach your server.
> Please try again later.
> Contact admin if the issue persists.

Server failed to start (errors in Spawner):

> Failed to start your server.
> Please contact admin.
2015-03-13 12:12:36 -07:00
Scott Sanderson
0c3bce8b57 DEV: Make the timeout used by wait_for_http_server configurable. 2015-03-04 23:37:30 -05:00
Min RK
c991438c3d make host connectable when ip is empty
turn '' into 'localhost', so that it is a valid URL for connection
2015-03-04 12:13:06 -08:00