171 lines
5.4 KiB
TypeScript
171 lines
5.4 KiB
TypeScript
import { appRouter } from "../server/routers.ts";
|
|
import * as db from "../server/db.ts";
|
|
import { withEffectiveInternalAccess } from "../server/internalAccess.ts";
|
|
|
|
async function main() {
|
|
const baseUser = await db.getUserByEmail("selectakeke973@gmail.com");
|
|
if (!baseUser) {
|
|
throw new Error("super admin introuvable");
|
|
}
|
|
|
|
const user = await withEffectiveInternalAccess(baseUser);
|
|
const caller = appRouter.createCaller({
|
|
req: {
|
|
headers: {},
|
|
socket: { remoteAddress: "127.0.0.1" },
|
|
} as any,
|
|
res: {} as any,
|
|
user,
|
|
});
|
|
|
|
const reviewDate = "2026-06-12";
|
|
|
|
await caller.compliance.upsertSupplier({
|
|
id: "ovh-hosting",
|
|
supplierName: "OVHcloud",
|
|
service: "Hebergement VPS de production et preproduction, DNS et exposition web",
|
|
location: "Montreal, Quebec, Canada",
|
|
criticality: "critique",
|
|
dpaStatus: "pending",
|
|
reviewDate,
|
|
owner: "Referent interne a confirmer",
|
|
notes: "Hebergement observe sur OVHcloud via VPS avec volumes Docker distincts pour production et preproduction.",
|
|
});
|
|
|
|
await caller.compliance.upsertSupplier({
|
|
id: "smtp-ovh",
|
|
supplierName: "OVH Mail",
|
|
service: "SMTP transactionnel pour notifications, MFA email et messages systeme",
|
|
location: "A confirmer contractuellement",
|
|
criticality: "elevee",
|
|
dpaStatus: "pending",
|
|
reviewDate,
|
|
owner: "Referent interne a confirmer",
|
|
notes: "Configuration SMTP OVH detectee et active dans l administration du portail.",
|
|
});
|
|
|
|
await caller.compliance.upsertSupplier({
|
|
id: "google-oauth",
|
|
supplierName: "Google",
|
|
service: "Connexion OAuth Google pour comptes utilises sur le portail",
|
|
location: "A confirmer contractuellement",
|
|
criticality: "elevee",
|
|
dpaStatus: "pending",
|
|
reviewDate,
|
|
owner: "Referent interne a confirmer",
|
|
notes: "Client OAuth Google configure sur le portail.",
|
|
});
|
|
|
|
await caller.compliance.upsertSupplier({
|
|
id: "meta-oauth",
|
|
supplierName: "Meta / Facebook",
|
|
service: "Connexion OAuth Facebook pour comptes utilises sur le portail",
|
|
location: "A confirmer contractuellement",
|
|
criticality: "moyenne",
|
|
dpaStatus: "pending",
|
|
reviewDate,
|
|
owner: "Referent interne a confirmer",
|
|
notes: "Client OAuth Facebook configure sur le portail.",
|
|
});
|
|
|
|
await caller.compliance.upsertDpa({
|
|
id: "dpa-ovh-hosting",
|
|
supplierId: "ovh-hosting",
|
|
supplierName: "OVHcloud",
|
|
status: "pending",
|
|
signedAt: "",
|
|
expiresAt: "",
|
|
reviewDueAt: "2027-06-12",
|
|
owner: "Referent interne a confirmer",
|
|
notes: "DPA hebergeur a centraliser ou confirmer dans le centre de conformite.",
|
|
});
|
|
|
|
await caller.compliance.upsertDpa({
|
|
id: "dpa-smtp-ovh",
|
|
supplierId: "smtp-ovh",
|
|
supplierName: "OVH Mail",
|
|
status: "pending",
|
|
signedAt: "",
|
|
expiresAt: "",
|
|
reviewDueAt: "2027-06-12",
|
|
owner: "Referent interne a confirmer",
|
|
notes: "DPA ou clauses RGPD du service de messagerie a centraliser.",
|
|
});
|
|
|
|
await caller.compliance.upsertDpa({
|
|
id: "dpa-google-oauth",
|
|
supplierId: "google-oauth",
|
|
supplierName: "Google",
|
|
status: "pending",
|
|
signedAt: "",
|
|
expiresAt: "",
|
|
reviewDueAt: "2026-12-12",
|
|
owner: "Referent interne a confirmer",
|
|
notes: "Verifier le cadre contractuel lie a l authentification Google.",
|
|
});
|
|
|
|
await caller.compliance.upsertDpa({
|
|
id: "dpa-meta-oauth",
|
|
supplierId: "meta-oauth",
|
|
supplierName: "Meta / Facebook",
|
|
status: "pending",
|
|
signedAt: "",
|
|
expiresAt: "",
|
|
reviewDueAt: "2026-12-12",
|
|
owner: "Referent interne a confirmer",
|
|
notes: "Verifier le cadre contractuel lie a l authentification Facebook.",
|
|
});
|
|
|
|
await caller.compliance.upsertEvidence({
|
|
id: "evidence-backup-observed-vps",
|
|
category: "backup_report",
|
|
title: "Archives de sauvegarde code observees sur le VPS",
|
|
reference: "Observation infrastructure",
|
|
url: "",
|
|
description:
|
|
"Dernieres archives observees dans /home/ubuntu/backups le 2026-06-12 a 03:05 pour production et preproduction. Cette observation ne remplace pas encore une preuve complete de sauvegarde 3-2-1.",
|
|
updatedAt: "2026-06-12T03:05:00Z",
|
|
});
|
|
|
|
await caller.compliance.upsertEvidence({
|
|
id: "evidence-no-third-party-analytics",
|
|
category: "audit_report",
|
|
title: "Absence d analytics tiers detectee dans le code applicatif",
|
|
reference: "Revue technique",
|
|
url: "",
|
|
description:
|
|
"Aucun traceur tiers de type Google Analytics, Matomo, Plausible, Umami ou equivalent n a ete detecte dans le front et le serveur lors de la revue technique.",
|
|
updatedAt: new Date().toISOString(),
|
|
});
|
|
|
|
await caller.compliance.upsertEvidence({
|
|
id: "evidence-openmaptiles-healthcheck",
|
|
category: "audit_report",
|
|
title: "Diagnostic healthcheck OpenMapTiles",
|
|
reference: "Infrastructure cartographique",
|
|
url: "",
|
|
description:
|
|
"Le conteneur OpenMapTiles repond aux styles, tuiles et glyphes, mais son healthcheck /health retourne en erreur. Sujet a traiter a part du lot conformite.",
|
|
updatedAt: new Date().toISOString(),
|
|
});
|
|
|
|
const result = await caller.compliance.getOperations();
|
|
console.log(
|
|
JSON.stringify(
|
|
{
|
|
suppliers: result.suppliers.length,
|
|
dpas: result.dpas.length,
|
|
evidence: result.evidenceCenter.length,
|
|
backupRecords: result.backupRecords.length,
|
|
restoreTests: result.restoreTests.length,
|
|
},
|
|
null,
|
|
2,
|
|
),
|
|
);
|
|
}
|
|
|
|
main().catch((error) => {
|
|
console.error(error);
|
|
process.exit(1);
|
|
});
|