Readd possibility to add containers as apps to boards (#1276)

This commit is contained in:
Meier Lukas
2023-09-10 14:28:13 +02:00
committed by GitHub
parent f35f6debaf
commit d05c0023cd
13 changed files with 266 additions and 123 deletions

View File

@@ -1,7 +1,13 @@
import { TRPCError } from '@trpc/server';
import fs from 'fs';
import { z } from 'zod';
import { configExists } from '~/tools/config/configExists';
import { getConfig } from '~/tools/config/getConfig';
import { getFrontendConfig } from '~/tools/config/getFrontendConfig';
import { generateDefaultApp } from '~/tools/shared/app';
import { createTRPCRouter, protectedProcedure, publicProcedure } from '../trpc';
import { adminProcedure, createTRPCRouter, protectedProcedure } from '../trpc';
import { configNameSchema } from './config';
export const boardRouter = createTRPCRouter({
all: protectedProcedure.query(async ({ ctx }) => {
@@ -30,4 +36,53 @@ export const boardRouter = createTRPCRouter({
})
);
}),
addAppsForContainers: adminProcedure
.input(
z.object({
boardName: configNameSchema,
apps: z.array(
z.object({
name: z.string(),
port: z.number().optional(),
})
),
})
)
.mutation(async ({ input }) => {
if (!(await configExists(input.boardName))) {
throw new TRPCError({
code: 'NOT_FOUND',
message: 'Board not found',
});
}
const config = await getConfig(input.boardName);
const lowestWrapper = config?.wrappers.sort((a, b) => a.position - b.position)[0];
const newConfig = {
...config,
apps: [
...config.apps,
...input.apps.map((container) => {
const defaultApp = generateDefaultApp(lowestWrapper.id);
const address = container.port
? `http://localhost:${container.port}`
: 'http://localhost';
return {
...defaultApp,
name: container.name,
url: address,
behaviour: {
...defaultApp.behaviour,
externalUrl: address,
},
};
}),
],
};
const targetPath = `data/configs/${input.boardName}.json`;
fs.writeFileSync(targetPath, JSON.stringify(newConfig, null, 2), 'utf8');
}),
});

View File

@@ -13,7 +13,7 @@ import { IRssWidget } from '~/widgets/rss/RssWidgetTile';
import { getConfig } from '~/tools/config/getConfig';
import { adminProcedure, createTRPCRouter, publicProcedure } from '../trpc';
const configNameSchema = z.string().regex(/^[a-zA-Z0-9-_]+$/);
export const configNameSchema = z.string().regex(/^[a-zA-Z0-9-_]+$/);
export const configRouter = createTRPCRouter({
delete: adminProcedure