1.0.32
This commit is contained in:
26 files changed
+1367
-765
No files matched your search
@@ -1,10 +1,14 @@
|
||||
import { json } from '@sveltejs/kit';
|
||||
import type { RequestHandler } from './$types';
|
||||
import { inspectContainer } from '$lib/server/docker';
|
||||
import { inspectContainer, inspectImage } from '$lib/server/docker';
|
||||
import { getSecretKeysToMask } from '$lib/server/db';
|
||||
import { getStackComposeFile } from '$lib/server/stacks';
|
||||
import { authorize } from '$lib/server/authorize';
|
||||
import { validateDockerIdParam } from '$lib/server/docker-validation';
|
||||
import {
|
||||
detectImageEnvDivergence,
|
||||
detectImageLabelDivergence
|
||||
} from '$lib/server/container-image-divergence';
|
||||
|
||||
export const GET: RequestHandler = async ({ params, url, cookies }) => {
|
||||
const invalid = validateDockerIdParam(params.id, 'container');
|
||||
@@ -23,6 +27,25 @@ export const GET: RequestHandler = async ({ params, url, cookies }) => {
|
||||
try {
|
||||
const containerData = await inspectContainer(params.id, envIdNum);
|
||||
|
||||
// Compute env/label divergence BEFORE masking, so the comparison
|
||||
// uses real values. Failure to inspect the image is non-fatal —
|
||||
// the field is omitted in that case.
|
||||
let divergence: { env: string[]; labels: string[] } | undefined;
|
||||
try {
|
||||
const imageRef = containerData.Config?.Image;
|
||||
if (imageRef) {
|
||||
const imageData: any = await inspectImage(imageRef, envIdNum);
|
||||
const imageEnv: string[] = imageData?.Config?.Env || [];
|
||||
const imageLabels: Record<string, string> = imageData?.Config?.Labels || {};
|
||||
divergence = {
|
||||
env: detectImageEnvDivergence(containerData.Config?.Env || [], imageEnv),
|
||||
labels: detectImageLabelDivergence(containerData.Config?.Labels, imageLabels)
|
||||
};
|
||||
}
|
||||
} catch {
|
||||
// image not present / not pullable / etc — drop the field
|
||||
}
|
||||
|
||||
// Mask secret env vars for containers belonging to a Compose stack.
|
||||
// Uses compose file parsing to detect interpolation (e.g., MYSQL_PASSWORD=${db_secret}).
|
||||
const stackName = containerData.Config?.Labels?.['com.docker.compose.project'];
|
||||
@@ -42,7 +65,7 @@ export const GET: RequestHandler = async ({ params, url, cookies }) => {
|
||||
}
|
||||
}
|
||||
|
||||
return json(containerData);
|
||||
return json({ ...containerData, divergence });
|
||||
} catch (error) {
|
||||
console.error('Failed to inspect container:', error);
|
||||
return json({ error: 'Failed to inspect container' }, { status: 500 });
|
||||
|
||||
Reference in new issue
Block a user