Skip to content

Commit 0c5904b

Browse files
authored
Personal access tokens (#135)
This requires MAS 1.5.0 It introduces a UI for managing personal tokens for automation purposes
2 parents 2a6d12f + 766d424 commit 0c5904b

20 files changed

+3509
-18
lines changed

openapi-ts.config.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,26 @@ export default defineConfig({
3333
: undefined;
3434
},
3535

36+
PersonalSession: (schema) => {
37+
if (!schema.properties)
38+
throw new Error("PersonalSession schema has no properties");
39+
40+
// openapi-ts doesn't like the nullable ref, so we make this a string
41+
// instead instead of the reference to the ULID type
42+
schema.properties["owner_user_id"] = {
43+
description:
44+
"The ID of the user who owns this session (if user-owned)",
45+
type: "string",
46+
nullable: true,
47+
};
48+
schema.properties["owner_client_id"] = {
49+
description:
50+
"The ID of the `OAuth2` client who owns this session (if client-owned)",
51+
type: "string",
52+
nullable: true,
53+
};
54+
},
55+
3656
SiteConfig: (schema) => {
3757
// Only make the `server_name` required, rest can be optional
3858
schema.required = ["server_name"];

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"test": "playwright test"
2727
},
2828
"dependencies": {
29+
"@floating-ui/react": "0.27.16",
2930
"@fontsource/inconsolata": "5.2.8",
3031
"@fontsource/inter": "5.2.8",
3132
"@formatjs/intl-localematcher": "0.6.2",

pnpm-lock.yaml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/api/mas/api/sdk.gen.ts

Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ import type {
1212
AddUserEmailResponses,
1313
AddUserRegistrationTokenData,
1414
AddUserRegistrationTokenResponses,
15+
CreatePersonalSessionData,
16+
CreatePersonalSessionErrors,
17+
CreatePersonalSessionResponses,
1518
CreateUserData,
1619
CreateUserErrors,
1720
CreateUserResponses,
@@ -42,6 +45,9 @@ import type {
4245
GetOAuth2SessionData,
4346
GetOAuth2SessionErrors,
4447
GetOAuth2SessionResponses,
48+
GetPersonalSessionData,
49+
GetPersonalSessionErrors,
50+
GetPersonalSessionResponses,
4551
GetPolicyDataData,
4652
GetPolicyDataErrors,
4753
GetPolicyDataResponses,
@@ -72,6 +78,9 @@ import type {
7278
ListOAuth2SessionsData,
7379
ListOAuth2SessionsErrors,
7480
ListOAuth2SessionsResponses,
81+
ListPersonalSessionsData,
82+
ListPersonalSessionsErrors,
83+
ListPersonalSessionsResponses,
7584
ListUpstreamOAuthLinksData,
7685
ListUpstreamOAuthLinksErrors,
7786
ListUpstreamOAuthLinksResponses,
@@ -93,6 +102,12 @@ import type {
93102
ReactivateUserData,
94103
ReactivateUserErrors,
95104
ReactivateUserResponses,
105+
RegeneratePersonalSessionData,
106+
RegeneratePersonalSessionErrors,
107+
RegeneratePersonalSessionResponses,
108+
RevokePersonalSessionData,
109+
RevokePersonalSessionErrors,
110+
RevokePersonalSessionResponses,
96111
RevokeUserRegistrationTokenData,
97112
RevokeUserRegistrationTokenErrors,
98113
RevokeUserRegistrationTokenResponses,
@@ -126,6 +141,8 @@ import {
126141
vAddUserEmailResponse,
127142
vAddUserRegistrationTokenData,
128143
vAddUserRegistrationTokenResponse,
144+
vCreatePersonalSessionData,
145+
vCreatePersonalSessionResponse,
129146
vCreateUserData,
130147
vCreateUserResponse,
131148
vDeactivateUserData,
@@ -146,6 +163,8 @@ import {
146163
vGetLatestPolicyDataResponse,
147164
vGetOAuth2SessionData,
148165
vGetOAuth2SessionResponse,
166+
vGetPersonalSessionData,
167+
vGetPersonalSessionResponse,
149168
vGetPolicyDataData,
150169
vGetPolicyDataResponse,
151170
vGetUpstreamOAuthLinkData,
@@ -166,6 +185,8 @@ import {
166185
vListCompatSessionsResponse,
167186
vListOAuth2SessionsData,
168187
vListOAuth2SessionsResponse,
188+
vListPersonalSessionsData,
189+
vListPersonalSessionsResponse,
169190
vListUpstreamOAuthLinksData,
170191
vListUpstreamOAuthLinksResponse,
171192
vListUpstreamOAuthProvidersData,
@@ -182,6 +203,10 @@ import {
182203
vLockUserResponse,
183204
vReactivateUserData,
184205
vReactivateUserResponse,
206+
vRegeneratePersonalSessionData,
207+
vRegeneratePersonalSessionResponse,
208+
vRevokePersonalSessionData,
209+
vRevokePersonalSessionResponse,
185210
vRevokeUserRegistrationTokenData,
186211
vRevokeUserRegistrationTokenResponse,
187212
vSetPolicyDataData,
@@ -443,6 +468,157 @@ export const finishOAuth2Session = <ThrowOnError extends boolean = false>(
443468
});
444469
};
445470

471+
/**
472+
* List personal sessions
473+
* Retrieve a list of personal sessions.
474+
* Note that by default, all sessions, including revoked ones are returned, with the oldest first.
475+
* Use the `filter[status]` parameter to filter the sessions by their status and `page[last]` parameter to retrieve the last N sessions.
476+
*/
477+
export const listPersonalSessions = <ThrowOnError extends boolean = false>(
478+
options: Options<ListPersonalSessionsData, ThrowOnError>,
479+
) => {
480+
return options.client.get<
481+
ListPersonalSessionsResponses,
482+
ListPersonalSessionsErrors,
483+
ThrowOnError
484+
>({
485+
requestValidator: async (data) => {
486+
return await v.parseAsync(vListPersonalSessionsData, data);
487+
},
488+
responseValidator: async (data) => {
489+
return await v.parseAsync(vListPersonalSessionsResponse, data);
490+
},
491+
security: [
492+
{
493+
scheme: "bearer",
494+
type: "http",
495+
},
496+
],
497+
url: "/api/admin/v1/personal-sessions",
498+
...options,
499+
});
500+
};
501+
502+
/**
503+
* Create a new personal session with personal access token
504+
*/
505+
export const createPersonalSession = <ThrowOnError extends boolean = false>(
506+
options: Options<CreatePersonalSessionData, ThrowOnError>,
507+
) => {
508+
return options.client.post<
509+
CreatePersonalSessionResponses,
510+
CreatePersonalSessionErrors,
511+
ThrowOnError
512+
>({
513+
requestValidator: async (data) => {
514+
return await v.parseAsync(vCreatePersonalSessionData, data);
515+
},
516+
responseValidator: async (data) => {
517+
return await v.parseAsync(vCreatePersonalSessionResponse, data);
518+
},
519+
security: [
520+
{
521+
scheme: "bearer",
522+
type: "http",
523+
},
524+
],
525+
url: "/api/admin/v1/personal-sessions",
526+
...options,
527+
headers: {
528+
"Content-Type": "application/json",
529+
...options.headers,
530+
},
531+
});
532+
};
533+
534+
/**
535+
* Get a personal session
536+
*/
537+
export const getPersonalSession = <ThrowOnError extends boolean = false>(
538+
options: Options<GetPersonalSessionData, ThrowOnError>,
539+
) => {
540+
return options.client.get<
541+
GetPersonalSessionResponses,
542+
GetPersonalSessionErrors,
543+
ThrowOnError
544+
>({
545+
requestValidator: async (data) => {
546+
return await v.parseAsync(vGetPersonalSessionData, data);
547+
},
548+
responseValidator: async (data) => {
549+
return await v.parseAsync(vGetPersonalSessionResponse, data);
550+
},
551+
security: [
552+
{
553+
scheme: "bearer",
554+
type: "http",
555+
},
556+
],
557+
url: "/api/admin/v1/personal-sessions/{id}",
558+
...options,
559+
});
560+
};
561+
562+
/**
563+
* Revoke a personal session
564+
*/
565+
export const revokePersonalSession = <ThrowOnError extends boolean = false>(
566+
options: Options<RevokePersonalSessionData, ThrowOnError>,
567+
) => {
568+
return options.client.post<
569+
RevokePersonalSessionResponses,
570+
RevokePersonalSessionErrors,
571+
ThrowOnError
572+
>({
573+
requestValidator: async (data) => {
574+
return await v.parseAsync(vRevokePersonalSessionData, data);
575+
},
576+
responseValidator: async (data) => {
577+
return await v.parseAsync(vRevokePersonalSessionResponse, data);
578+
},
579+
security: [
580+
{
581+
scheme: "bearer",
582+
type: "http",
583+
},
584+
],
585+
url: "/api/admin/v1/personal-sessions/{id}/revoke",
586+
...options,
587+
});
588+
};
589+
590+
/**
591+
* Regenerate a personal session by replacing its personal access token
592+
*/
593+
export const regeneratePersonalSession = <ThrowOnError extends boolean = false>(
594+
options: Options<RegeneratePersonalSessionData, ThrowOnError>,
595+
) => {
596+
return options.client.post<
597+
RegeneratePersonalSessionResponses,
598+
RegeneratePersonalSessionErrors,
599+
ThrowOnError
600+
>({
601+
requestValidator: async (data) => {
602+
return await v.parseAsync(vRegeneratePersonalSessionData, data);
603+
},
604+
responseValidator: async (data) => {
605+
return await v.parseAsync(vRegeneratePersonalSessionResponse, data);
606+
},
607+
security: [
608+
{
609+
scheme: "bearer",
610+
type: "http",
611+
},
612+
],
613+
url: "/api/admin/v1/personal-sessions/{id}/regenerate",
614+
...options,
615+
headers: {
616+
"Content-Type": "application/json",
617+
...options.headers,
618+
},
619+
});
620+
};
621+
446622
/**
447623
* Set the current policy data
448624
*/

0 commit comments

Comments
 (0)