feat: patch cs2 gameinfo after metamod install
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import type { FastifyInstance } from 'fastify';
|
||||
import { Type } from '@sinclair/typebox';
|
||||
import { and, eq } from 'drizzle-orm';
|
||||
import { nodes, servers } from '@source/database';
|
||||
import { games, nodes, servers } from '@source/database';
|
||||
import { AppError } from '../../lib/errors.js';
|
||||
import { requirePermission } from '../../lib/permissions.js';
|
||||
import {
|
||||
@@ -19,6 +19,17 @@ const FileParamSchema = {
|
||||
}),
|
||||
};
|
||||
|
||||
function shouldHideFileForGame(gameSlug: string, fileName: string, isDirectory: boolean): boolean {
|
||||
if (gameSlug !== 'cs2') return false;
|
||||
if (isDirectory) return false;
|
||||
|
||||
const normalizedName = fileName.trim().toLowerCase();
|
||||
if (normalizedName.endsWith('.vpk')) return true;
|
||||
if (/^backup_round.*\.txt$/.test(normalizedName)) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function decodeBase64Payload(data: string): Buffer {
|
||||
const normalized = data.trim();
|
||||
if (!normalized) return Buffer.alloc(0);
|
||||
@@ -56,7 +67,11 @@ export default async function fileRoutes(app: FastifyInstance) {
|
||||
path?.trim() || '/',
|
||||
);
|
||||
|
||||
return { files };
|
||||
const filteredFiles = files.filter(
|
||||
(file) => !shouldHideFileForGame(serverContext.gameSlug, file.name, file.isDirectory),
|
||||
);
|
||||
|
||||
return { files: filteredFiles };
|
||||
},
|
||||
);
|
||||
|
||||
@@ -151,17 +166,20 @@ export default async function fileRoutes(app: FastifyInstance) {
|
||||
|
||||
async function getServerContext(app: FastifyInstance, orgId: string, serverId: string): Promise<{
|
||||
serverUuid: string;
|
||||
gameSlug: string;
|
||||
node: DaemonNodeConnection;
|
||||
}> {
|
||||
const [server] = await app.db
|
||||
.select({
|
||||
uuid: servers.uuid,
|
||||
gameSlug: games.slug,
|
||||
nodeFqdn: nodes.fqdn,
|
||||
nodeGrpcPort: nodes.grpcPort,
|
||||
nodeDaemonToken: nodes.daemonToken,
|
||||
})
|
||||
.from(servers)
|
||||
.innerJoin(nodes, eq(servers.nodeId, nodes.id))
|
||||
.innerJoin(games, eq(servers.gameId, games.id))
|
||||
.where(and(eq(servers.id, serverId), eq(servers.organizationId, orgId)));
|
||||
|
||||
if (!server) {
|
||||
@@ -170,6 +188,7 @@ async function getServerContext(app: FastifyInstance, orgId: string, serverId: s
|
||||
|
||||
return {
|
||||
serverUuid: server.uuid,
|
||||
gameSlug: server.gameSlug,
|
||||
node: {
|
||||
fqdn: server.nodeFqdn,
|
||||
grpcPort: server.nodeGrpcPort,
|
||||
|
||||
Reference in New Issue
Block a user