Skip to content

Commit c9ad95d

Browse files
committed
dev-demo: update oauth config and create an resource for user identities
AdminForth/1731/security-audit
1 parent e343852 commit c9ad95d

5 files changed

Lines changed: 81 additions & 0 deletions

File tree

dev-demo/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ import { FICTIONAL_CAR_BRANDS, FICTIONAL_CAR_MODELS_BY_BRAND, ENGINE_TYPES, BODY
3030
import passkeysResource from './resources/passkeys.js';
3131
import carsDescriptionImage from './resources/cars_description_image.js';
3232
import translations from "./resources/translations.js";
33+
import adminExternalIdentitiesResource from './resources/adminUserExternalIdentities.js';
34+
3335
import { logger } from '../adminforth/modules/logger.js';
3436

3537
const ADMIN_BASE_URL = '';
@@ -142,6 +144,7 @@ export const admin = new AdminForth({
142144
sessionsResource,
143145
turnsResource,
144146
dashboardConfigsResource,
147+
adminExternalIdentitiesResource,
145148
],
146149
menu: [
147150
{ type: 'heading', label: 'SYSTEM' },
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
-- CreateTable
2+
CREATE TABLE "AdminUserExternalIdentity" (
3+
"id" TEXT NOT NULL PRIMARY KEY,
4+
"adminUserId" TEXT NOT NULL,
5+
"provider" TEXT NOT NULL,
6+
"subject" TEXT NOT NULL,
7+
"externalUserId" TEXT,
8+
"email" TEXT,
9+
"phone" TEXT,
10+
"fullName" TEXT,
11+
"avatarUrl" TEXT,
12+
"meta" JSONB,
13+
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
14+
);
15+
16+
-- CreateIndex
17+
CREATE INDEX "AdminUserExternalIdentity_adminUserId_idx" ON "AdminUserExternalIdentity"("adminUserId");
18+
19+
-- CreateIndex
20+
CREATE UNIQUE INDEX "AdminUserExternalIdentity_provider_subject_key" ON "AdminUserExternalIdentity"("provider", "subject");

dev-demo/migrations/prisma/sqlite/schema.prisma

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,4 +136,21 @@ model dashboard_configs {
136136
config Json
137137
138138
@@index([slug])
139+
}
140+
141+
model AdminUserExternalIdentity {
142+
id String @id @default(uuid())
143+
adminUserId String
144+
provider String
145+
subject String
146+
externalUserId String?
147+
email String?
148+
phone String?
149+
fullName String?
150+
avatarUrl String?
151+
meta Json?
152+
createdAt DateTime @default(now())
153+
154+
@@unique([provider, subject])
155+
@@index([adminUserId])
139156
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { AdminForthDataTypes, type AdminForthResourceInput } from 'adminforth';
2+
import { randomUUID } from 'crypto';
3+
4+
export default {
5+
dataSource: 'sqlite',
6+
table: 'AdminUserExternalIdentity',
7+
resourceId: 'admin_user_external_identities',
8+
label: 'Admin User External Identities',
9+
columns: [
10+
{
11+
name: 'id',
12+
type: AdminForthDataTypes.STRING,
13+
primaryKey: true,
14+
fillOnCreate: () => randomUUID(),
15+
showIn: { create: false, edit: false },
16+
},
17+
{ name: 'adminUserId', type: AdminForthDataTypes.STRING, required: true },
18+
{ name: 'provider', type: AdminForthDataTypes.STRING, required: true },
19+
{ name: 'subject', type: AdminForthDataTypes.STRING, required: true },
20+
{ name: 'externalUserId', type: AdminForthDataTypes.STRING },
21+
{ name: 'email', type: AdminForthDataTypes.STRING },
22+
{ name: 'phone', type: AdminForthDataTypes.STRING },
23+
{ name: 'fullName', type: AdminForthDataTypes.STRING },
24+
{ name: 'avatarUrl', type: AdminForthDataTypes.STRING },
25+
{ name: 'meta', type: AdminForthDataTypes.JSON },
26+
{
27+
name: 'createdAt',
28+
type: AdminForthDataTypes.DATETIME,
29+
fillOnCreate: () => new Date().toISOString(),
30+
showIn: { create: false, edit: false },
31+
},
32+
],
33+
} satisfies AdminForthResourceInput;

dev-demo/resources/adminuser.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,14 @@ export default {
215215
role: 'user',
216216
},
217217
},
218+
externalIdentityResource: {
219+
resourceId: 'admin_user_external_identities',
220+
emailField: 'email',
221+
phoneField: 'phone',
222+
fullNameField: 'fullName',
223+
avatarUrlField: 'avatarUrl',
224+
metaField: 'meta',
225+
},
218226
}),
219227
...(process.env.OPENAI_API_KEY ?
220228
[

0 commit comments

Comments
 (0)