From ca5410af6d16cf42375f75cbbade44cb0c97082c Mon Sep 17 00:00:00 2001 From: Kiran Date: Sat, 5 Feb 2022 22:34:55 +0530 Subject: [PATCH] Create and list apps --- README.md | 6 ++++++ pages/api/apps/index.ts | 31 +++++++++++++++++++------------ prisma/schema.prisma | 6 +++--- services/apps.ts | 19 ++++++++++++++++--- types/index.ts | 2 +- 5 files changed, 45 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 08a4ccc..928d866 100644 --- a/README.md +++ b/README.md @@ -7,4 +7,10 @@ - Fix the SAML metadata URL - Improve the UI +https://github.com/prisma/prisma/issues/4571#issuecomment-747496127 + +# Apps +- Create an app +- Get all apps + http://localhost:4000/apps/saml?RelayState=boxyhq_jackson_2fd72712996df6104811ff8cc233d1e2&SAMLRequest=PD94bWwgdmVyc2lvbj0iMS4wIj8%2BPHNhbWxwOkF1dGhuUmVxdWVzdCB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIiBJRD0iXzZiMmU1ZDdhMDRiNjEzMzAyZDhmIiBWZXJzaW9uPSIyLjAiIElzc3VlSW5zdGFudD0iMjAyMi0wMS0xNFQxNToxODoxNi4yNTlaIiBQcm90b2NvbEJpbmRpbmc9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpiaW5kaW5nczpIVFRQLVBPU1QiIEFzc2VydGlvbkNvbnN1bWVyU2VydmljZVVSTD0iaHR0cHM6Ly8yOGEyLTEwMy0xNTMtMTA0LTQzLm5ncm9rLmlvL3Nzby9hY3MiIFByb3ZpZGVyTmFtZT0iQm94eUhRIj48c2FtbDpJc3N1ZXIgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiI%2BaHR0cHM6Ly9zYW1sLmJveHlocS5jb208L3NhbWw6SXNzdWVyPjxTaWduYXR1cmUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPjxTaWduZWRJbmZvPjxDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8%2BPFNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3JzYS1zaGEyNTYiLz48UmVmZXJlbmNlIFVSST0iI182YjJlNWQ3YTA0YjYxMzMwMmQ4ZiI%2BPFRyYW5zZm9ybXM%2BPFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNlbnZlbG9wZWQtc2lnbmF0dXJlIi8%2BPFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvVHJhbnNmb3Jtcz48RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxlbmMjc2hhMjU2Ii8%2BPERpZ2VzdFZhbHVlPlBXVFlGek9hV1FvZHNqK21haEdnam1VQkZsVFk5cGlQNy8yVVkvNEZkN289PC9EaWdlc3RWYWx1ZT48L1JlZmVyZW5jZT48L1NpZ25lZEluZm8%2BPFNpZ25hdHVyZVZhbHVlPm5HbEMrZVkwMC82eDZQNlBMcGFoOVR5QzlRTnNKR0U3V0Y1czQ1SXZRbWlJWmwrSmhNVGRQeExBSjJ1dVpQMWZzZ1NwUllPZG5HanRLNjlobS9LOHZDVGlab29EODdjdkJmdXp4NVVNQ3NiV0VQSERJV01rV1k3S2ZrYk5ySjNMdVZyYTR0SEZvY2luQnVwRzNMeVQ5dUtwRzI1NlQrNm9LUDNOdkJSTzRROUFpWlk4czlxaVhzRE9QQlJRd3NEaEdNdGRJcGVDaGZQU2RQdFV1RXV3UEdRS1pZellFY0d3WHpOTGYydm5PaS9QUE5rRHA4QTdPN2FJd09HWFNDVVlqL29oNUo4RWRQdVpyRzFuL0ZMdm04L0dNY2pNTTYwQWZ1NFg3WGMzRlFRUG5aZ2lxdFlsd2YwbjFDemlkbnYvbDE3NjF6T3grWXJqb08zaUp0SHB6Zz09PC9TaWduYXR1cmVWYWx1ZT48L1NpZ25hdHVyZT48c2FtbHA6TmFtZUlEUG9saWN5IHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6ZW1haWxBZGRyZXNzIiBBbGxvd0NyZWF0ZT0idHJ1ZSIvPjwvc2FtbHA6QXV0aG5SZXF1ZXN0Pg%3D%3D diff --git a/pages/api/apps/index.ts b/pages/api/apps/index.ts index ac2bcbd..b1afdb9 100644 --- a/pages/api/apps/index.ts +++ b/pages/api/apps/index.ts @@ -1,32 +1,39 @@ import { promises as fs } from 'fs'; import type { NextApiRequest, NextApiResponse } from 'next'; import path from 'path'; -import { metadata } from '../../../services'; +import { apps, metadata } from '../../../services'; import type { App, IdPMetadata } from '../../../types'; export default async function handler( req: NextApiRequest, res: NextApiResponse ) { - if (req.method === 'POST') { - return await create(req); + + switch (req.method) { + case 'GET': + return await getAllApps(); + case 'POST': + return await createApp(); + default: + return res.status(405).end(`Method ${req.method} Not Allowed`); } - async function create(req: NextApiRequest) { + async function getAllApps() { + const appList = await apps.getAll(); + + return res.json(appList); + } + + async function createApp() { const { + name, acs_url, entity_id, - name = 'My App', description = null, } = req.body; - const certificateFilePath = path.join('data', 'x509cert.txt'); - const certificate = await fs.readFile(certificateFilePath, 'utf8'); + const app = await apps.create(name, description, acs_url, entity_id); - return res - .status(200) - .json(metadata.create(acs_url, entity_id, certificate)); + return res.json(app); } - - async function downloadMetadata(req: NextApiRequest) {} } diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 11a0dbb..ced1aa1 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -18,8 +18,8 @@ model App { id String @id @default(uuid()) name String description String? - certificate String - acs_url String - entity_id String + certificate String? + acs_url String + entity_id String } diff --git a/services/apps.ts b/services/apps.ts index 5d470e6..531c4db 100644 --- a/services/apps.ts +++ b/services/apps.ts @@ -3,18 +3,31 @@ import type { App } from '../types'; const prisma = new PrismaClient(); -export async function create(body: Omit): Promise { +const create = async function(name: string, description: string, acsUrl: string, entityId: string): Promise { + const body = { + name, + description, + acs_url: acsUrl, + entity_id: entityId, + } + return await prisma.app.create({ data: body }); } -export async function getAll(): Promise { +const getAll = async function(): Promise { return await prisma.app.findMany(); } -export async function getById(id: string): Promise { +const getById = async function(id: string): Promise { return await prisma.app.findUnique({ where: { id, }, }); } + +export { + create, + getAll, + getById, +} \ No newline at end of file diff --git a/types/index.ts b/types/index.ts index 3f8efcb..41129f2 100644 --- a/types/index.ts +++ b/types/index.ts @@ -12,7 +12,7 @@ export type App = { id: string; name: string; description?: string | null; - certificate: string; + certificate?: string; } & ServiceProvider; export type IdPMetadata = {