2023-01-06 16:27:42 +00:00
|
|
|
// oauth_client stores information about known clients developed against stroj.
|
|
|
|
model oauth_client (
|
2023-02-23 15:40:44 +00:00
|
|
|
key id
|
|
|
|
|
|
|
|
index ( fields user_id )
|
|
|
|
|
|
|
|
// id is a unique identifier for the client.
|
|
|
|
field id blob
|
|
|
|
// encrypted_secret is a token that the client uses to authenticate.
|
|
|
|
field encrypted_secret blob ( updatable )
|
|
|
|
// redirect_url is the uri where the user should be redirected after authentication.
|
|
|
|
field redirect_url text ( updatable )
|
|
|
|
// user_id is a UUID which refers to user.id.
|
|
|
|
field user_id blob
|
|
|
|
// app_name is text that should be displayed as the application requesting authentication.
|
|
|
|
field app_name text ( updatable )
|
|
|
|
// app_logo_url is icon that should be shown for the application.
|
|
|
|
field app_logo_url text ( updatable )
|
2023-01-06 16:27:42 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
create oauth_client (
|
|
|
|
noreturn
|
|
|
|
)
|
|
|
|
|
|
|
|
read one (
|
2023-02-23 15:40:44 +00:00
|
|
|
select oauth_client
|
|
|
|
where oauth_client.id = ?
|
2023-01-06 16:27:42 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
update oauth_client (
|
2023-02-23 15:40:44 +00:00
|
|
|
where oauth_client.id = ?
|
|
|
|
noreturn
|
2023-01-06 16:27:42 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
delete oauth_client (
|
2023-02-23 15:40:44 +00:00
|
|
|
where oauth_client.id = ?
|
2023-01-06 16:27:42 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// oauth_code are single use tokens that are handed off to the third party applications.
|
|
|
|
// they're exchanged for an access_token (and maybe a refresh_token).
|
|
|
|
// they can only be claimed once.
|
|
|
|
model oauth_code (
|
2023-02-23 15:40:44 +00:00
|
|
|
key code
|
|
|
|
|
|
|
|
index ( fields user_id )
|
|
|
|
index ( fields client_id )
|
|
|
|
|
|
|
|
// client_id is the oauth_client.id that requested this user.
|
|
|
|
field client_id blob
|
|
|
|
// user_id is the user.id that tries to use this token.
|
|
|
|
field user_id blob
|
|
|
|
// scope is Access Token Scope which specifies what the user is allowed to access.
|
|
|
|
field scope text
|
|
|
|
// redirect_url is the location that user should be redirected to.
|
|
|
|
field redirect_url text
|
|
|
|
|
|
|
|
// challenge is used for PKCE authorization flow. It is created from code verifier that the
|
|
|
|
// client uses to verify the response.
|
|
|
|
field challenge text
|
|
|
|
// challenge_method is used for PKCE authorization flow.
|
|
|
|
// It is the method that was used to generate the challenge.
|
|
|
|
field challenge_method text
|
|
|
|
|
|
|
|
// code contains the authorization code which the client will later exchange for an access token.
|
|
|
|
field code text
|
|
|
|
// created_at specifies when the code was created.
|
|
|
|
field created_at timestamp
|
|
|
|
// expires_at specifies when the code is invalid.
|
|
|
|
field expires_at timestamp
|
|
|
|
// claimed_at specifies the time when the code was used.
|
|
|
|
field claimed_at timestamp ( nullable, updatable )
|
2023-01-06 16:27:42 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
create oauth_code (
|
|
|
|
noreturn
|
|
|
|
)
|
|
|
|
|
|
|
|
read one (
|
2023-02-23 15:40:44 +00:00
|
|
|
select oauth_code
|
|
|
|
where oauth_code.code = ?
|
|
|
|
where oauth_code.claimed_at = null
|
2023-01-06 16:27:42 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
update oauth_code (
|
2023-02-23 15:40:44 +00:00
|
|
|
where oauth_code.code = ?
|
|
|
|
where oauth_code.claimed_at = null
|
|
|
|
noreturn
|
2023-01-06 16:27:42 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// oauth_token can be an access or refresh token
|
|
|
|
model oauth_token (
|
2023-02-23 15:40:44 +00:00
|
|
|
key token
|
|
|
|
|
|
|
|
index ( fields user_id )
|
|
|
|
index ( fields client_id )
|
|
|
|
|
|
|
|
// client_id is the oauth_client.id that requested this user.
|
|
|
|
field client_id blob
|
|
|
|
// user_id is the user.id that tries to use this token.
|
|
|
|
field user_id blob
|
|
|
|
// scope is Access Token Scope which specifies what the user is allowed to access.
|
|
|
|
field scope text
|
|
|
|
|
|
|
|
// kind specifies the purpose of the token. It refers to oidc.OAuthTokenKind. unknown=0, access=1, refresh=2, rest=3.
|
|
|
|
field kind int
|
|
|
|
// token is the access which is implemented as an encrypted macaroon.
|
|
|
|
field token blob
|
|
|
|
// created_at is when the token was created.
|
|
|
|
field created_at timestamp
|
|
|
|
// expires_at says when the token becomes invalid.
|
|
|
|
field expires_at timestamp ( updatable )
|
2023-01-06 16:27:42 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
create oauth_token (
|
|
|
|
noreturn
|
|
|
|
)
|
|
|
|
|
|
|
|
read one (
|
2023-02-23 15:40:44 +00:00
|
|
|
select oauth_token
|
|
|
|
where oauth_token.kind = ?
|
|
|
|
where oauth_token.token = ?
|
2023-01-06 16:27:42 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
update oauth_token (
|
|
|
|
where oauth_token.token = ?
|
|
|
|
where oauth_token.kind = ?
|
|
|
|
noreturn
|
|
|
|
)
|