fix(platform): finalize runner registration, certificate verification and dynamic workspace loading

This commit is contained in:
Alex Mueller 2026-09-12 20:34:03 +02:00
parent 3b27101503
commit 45e11299c6
3 changed files with 30 additions and 10 deletions

View file

@ -137,9 +137,13 @@
if (window.RunnerRegistry) {
window.RunnerRegistry.register(HtmlCssAdapter);
window.RunnerRegistry.register({ ...HtmlCssAdapter, id: "html" });
} else {
document.addEventListener("DOMContentLoaded", () => {
if (window.RunnerRegistry) window.RunnerRegistry.register(HtmlCssAdapter);
if (window.RunnerRegistry) {
window.RunnerRegistry.register(HtmlCssAdapter);
window.RunnerRegistry.register({ ...HtmlCssAdapter, id: "html" });
}
});
}
})();

View file

@ -564,8 +564,8 @@ class PlatformRequestHandler(http.server.SimpleHTTPRequestHandler):
conn.close()
if not cert:
return self.send_json({"valid": False, "error": "Zertifikat nicht gefunden"}, 404)
return self.send_json({"valid": True, "certificate": dict(cert)})
return self.send_json({"valid": False, "verified": False, "error": "Zertifikat nicht gefunden"}, 404)
return self.send_json({"valid": True, "verified": True, "certificate": dict(cert)})
elif path == "/api/stats/leaderboard":
conn = get_db()

View file

@ -369,14 +369,15 @@
<script src="assets/runners/rust_runner.js"></script>
<script src="assets/runners/csharp_runner.js"></script>
<script src="assets/runners/cpp_runner.js"></script>
<script src="assets/courses_manifest.js"></script>
<script src="assets/monaco_ide.js"></script>
<script>
const urlParams = new URLSearchParams(window.location.search);
const courseId = urlParams.get("course") || "python";
const trackFolder = urlParams.get("track") || "lehrpfad_1_grundlagen";
const chapterFolder = urlParams.get("chapter") || "01_erste_schritte_taschenrechner";
const chapterId = `${trackFolder}/${chapterFolder}`;
let trackFolder = urlParams.get("track") || (courseId === "python" ? "lehrpfad_1_grundlagen" : "");
let chapterFolder = urlParams.get("chapter") || "";
let chapterId = "";
let CHAPTERS_MANIFEST = [];
let currentCourseManifest = null;
@ -467,17 +468,33 @@
try {
await loadCourseManifest();
// Dynamische Ermittlung des aktuellen Kapitels
if (!chapterFolder && CHAPTERS_MANIFEST.length > 0) {
chapterFolder = CHAPTERS_MANIFEST[0].folder;
} else if (!chapterFolder) {
chapterFolder = "01_erste_schritte_taschenrechner";
}
const currentChap = CHAPTERS_MANIFEST.find(c => c.folder === chapterFolder) || CHAPTERS_MANIFEST[0];
if (currentChap) {
chapterFolder = currentChap.folder;
if (currentChap.track && !trackFolder) trackFolder = currentChap.track;
}
if (!trackFolder) trackFolder = "lehrpfad_1_grundlagen";
chapterId = (courseId === "python") ? `${trackFolder}/${chapterFolder}` : `${courseId}/${chapterFolder}`;
setupNextChapterButton();
const activeLanguage = currentCourseManifest ? (currentCourseManifest.language || "python") : "python";
const runner = window.RunnerRegistry ? window.RunnerRegistry.get(activeLanguage) : null;
const activeRunnerId = currentCourseManifest ? (currentCourseManifest.runner || currentCourseManifest.language || "python") : "python";
const runner = window.RunnerRegistry ? (window.RunnerRegistry.get(activeRunnerId) || window.RunnerRegistry.get(currentCourseManifest?.language) || null) : null;
let basePath = `${trackFolder}/${chapterFolder}`;
if (courseId !== "python") {
basePath = `courses/${courseId}/${chapterFolder}`;
}
const currentChap = CHAPTERS_MANIFEST.find(c => c.folder === chapterFolder);
let taskFile = (currentChap && currentChap.taskFile) ? currentChap.taskFile : (runner ? `aufgabe${runner.fileExtension}` : "aufgabe.py");
let testFile = (currentChap && currentChap.testFile) ? currentChap.testFile : (runner ? runner.testFileExtension : "test_aufgabe.py");
let loesungFile = (currentChap && currentChap.taskFile && currentChap.taskFile.startsWith("Aufgabe")) ? `Musterloesung${runner ? runner.fileExtension : ".java"}` : (runner ? `musterloesung${runner.fileExtension}` : "musterloesung.py");
@ -646,7 +663,6 @@
document.addEventListener("DOMContentLoaded", loadWorkspaceData);
</script>
<script src="assets/courses_manifest.js"></script>
<script src="assets/course_sidebar.js"></script>
</body>
</html>