-
Notifications
You must be signed in to change notification settings - Fork 44
[1/n] Add id
column on tokens and sessions
#8137
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
48c4c68
to
7f377d8
Compare
@@ -957,7 +957,7 @@ authz_resource! { | |||
authz_resource! { | |||
name = "DeviceAccessToken", | |||
parent = "Fleet", | |||
primary_key = String, // token | |||
primary_key = { uuid_kind = AccessTokenKind }, | |||
roles_allowed = false, | |||
polar_snippet = FleetChild, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm realizing FleetChild
will probably have to change.
ce269ce
to
6fbe688
Compare
id
column on tokens and sessionsid
column on tokens and sessions
6fbe688
to
a4d0d74
Compare
a4d0d74
to
6f16cfe
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Overall, this makes sense to me. I had some minor nitpicks and style suggestions.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lovely, thanks for addressing my suggestions!
Closes #2302. Built on top of #8137, but doesn't really rely on much in there. Implementing [RFD 570](https://rfd.shared.oxide.computer/rfd/0570). - [x] Add `silo_settings` table with nullable device token expiration (seconds) column. Null setting means no max - Also populate this table with null maxes for all existing silos - [x] Follow behavior of quotas table: create silo settings entry on silo create, delete it on silo delete - [x] View and update settings endpoints at `/v1/settings` with all necessary plumbing - Following RFD 570, these are silo-scoped endpoints, only accessible to users inside the silo, as opposed to, for example, fleet operators being able to set it for any silo - [x] Users don't set token expiration directly yet — at token create time, if the current silo has its max set, the token gets an expiration timestamp based on that max. Otherwise the token does not expire - [x] Test that trying to set a negative or 0 TTL 400s - [x] Fix authz tests and verify endpoint tests - [x] Bikeshed endpoint paths, operation IDs, property names, etc
Built on top of #8137 and #8214. This is only for a user to list and delete their own tokens. It doesn't quite match RFD 570, which says `/v1/device-tokens` instead of `/v1/me/access-tokens`, but it feels good under `/v1/me`, and after trying to make the UI too, I think "access tokens" is much more intuitive. If I stick with this, I will update RFD 570 to match. ~~I'm not sure about the path `/v1/device-tokens` — in the API we call them `Device Access Tokens`. I think `/v1/access-tokens` might be more intuitive because the `device` is sort of an implementation detail, it refers to the OAuth device auth flow, which we are using. In practice, the user just gets a token with the CLI and pastes a code into the web UI and they don't have to think too much about it, so exposing that detail in the name might not be worth it.~~ Went with `/v1/me/access-tokens`. - [x] Basic token list and delete - [x] Basic integration tests - [x] Finalize endpoint paths - [x] Figure out authz story - Went with restricting datastore functions to current actor for now
Closes #8139. Token IDs are used in #8227 and #8231 for token CRUD.
WIP. Everything compiles and existing tests work, but we are not yet testing retrieval by ID and we need to think about authz checks on the datastore functions for retrieving tokens and sessions by token string.
This PR would be a lot shorter if not for the fact that the
token
column was the primary key on both tables, so adding theid
requires a bunch of migration steps to change the primary key. There were also a lot of changes to code and tests around making things ID-centric instead of token-centric.id
col and changing primary key to thatTypedUuid
to session and token DB modelsauthz_resource!
andlookup_resource!
calls for new primary keySession
trait methods to useid
instead oftoken
FakeSession
implementations (one for unit tests, one for integration tests) to a) track sessions in aVec
instead of aHashMap
with token keys