2026-10-08 02:01:58 +02:00
<! DOCTYPE html >
< html lang = " fr " >
< head >
< meta charset = " utf-8 " >
< meta name = " viewport " content = " width=device-width, initial-scale=1 " >
< title > Intégration et sécurité · Syllabus </ title >
2026-10-09 21:07:25 +02:00
{{ Vite :: fonts () }}
2026-10-08 02:01:58 +02:00
< script src = " https://cdn.tailwindcss.com " ></ script >
< script > tailwind . config = { theme : { extend : { fontFamily : { display : [ 'Archivo' , 'system-ui' , 'sans-serif' ], mono : [ '"IBM Plex Mono"' , 'monospace' ]}}}} </ script >
< style >
. etoile { clip - path : polygon ( 50 % 0 , 61 % 35 % , 98 % 35 % , 68 % 57 % , 79 % 91 % , 50 % 70 % , 21 % 91 % , 32 % 57 % , 2 % 35 % , 39 % 35 % ); }
. zigzag { background : linear - gradient ( 135 deg , transparent 50 % , #000 50% 62%, transparent 62%) 0 0 / 16px 16px, linear-gradient(45deg, transparent 50%, #000 50% 62%, transparent 62%) 0 0 / 16px 16px; }
@ keyframes flotte { 0 % , 100 % { transform : translateY ( 0 ) rotate ( var ( -- r , 0 deg )); } 50 % { transform : translateY ( - 10 px ) rotate ( var ( -- r , 0 deg )); } }
. flotte { animation : flotte 6 s ease - in - out infinite ; }
@ keyframes clignote { 50 % { opacity : 0 ; } }
. curseur { animation : clignote 1 s steps ( 1 ) infinite ; }
@ media ( prefers - reduced - motion : reduce ) { . flotte , . curseur { animation : none ; } }
</ style >
2026-10-09 21:07:25 +02:00
< link rel = " stylesheet " href = " { { asset('vendor/xterm/xterm.css') }} " >
< script defer src = " { { asset('vendor/xterm/xterm.js') }} " ></ script >
< script defer src = " { { asset('vendor/xterm/addon-fit.js') }} " ></ script >
2026-10-08 02:01:58 +02:00
< script defer src = " { { asset('js/paillasse-terminal.js') }} " ></ script >
< link rel = " stylesheet " href = " { { asset('css/syllabus-theme.css') }} " >
</ head >
< body class = " bg-white font-display text-black antialiased " >
< header style = " position:sticky;top:0;z-index:40;background:rgba(255,255,255,.92);backdrop-filter:saturate(180%) blur(12px);border-bottom:1px solid #e3e5e8 " >
< nav aria - label = " Navigation principale " style = " position:relative;max-width:1200px;margin:0 auto;padding:0 20px;min-height:64px;display:flex;flex-wrap:wrap;align-items:center;gap:12px 40px " >
< a href = " { { route('accueil') }} " aria - label = " Syllabus, accueil " style = " display:flex;align-items:center;gap:0;text-decoration:none " >< img src = " { { asset('images/logo-syllabus-icone.png') }} " alt = " " style = " height:32px;width:auto;display:block " >< span style = " font-family:Mulish,system-ui,sans-serif;font-weight:800;font-size:19px;color:#111827;letter-spacing:-0.01em;margin-left:-14px;position:relative " > Syllabus </ span ></ a >
< ul style = " margin:0;padding:0;list-style:none;display:flex;flex-wrap:wrap;align-items:center;gap:8px 28px;flex:1;line-height:1.5 " >< li >< details class = " group " >< summary @ if ( request () -> routeIs ( 'fonctionnalites' ) || request () -> routeIs ( 'ressource' )) aria - current = " page " @ endif style = " cursor:pointer;list-style:none;display:flex;align-items:center;gap:6px;height:36px;margin:-6px -12px;padding:0 12px;border-radius:999px;line-height:1.5;font-size:15px;font-weight:600;color:#0b1220 " class = " hover:bg-[#f1f3f4] group-open:bg-[#e8f0fe] group-open:text-[#0b57d0] aria-[current=page]:text-[#0b57d0] [&::-webkit-details-marker]:hidden " > Fonctionnalités < svg aria - hidden = " true " viewBox = " 0 0 16 16 " width = " 16 " height = " 16 " class = " transition-transform duration-200 group-open:rotate-180 " style = " flex:none;opacity:.7 " >< path d = " M4 6l4 4 4-4 " fill = " none " stroke = " currentColor " stroke - width = " 1.8 " stroke - linecap = " round " stroke - linejoin = " round " /></ svg ></ summary >
< div style = " position:absolute;left:20px;right:20px;top:100%;margin-top:4px;z-index:50;max-width:1160px;margin-left:auto;margin-right:auto;box-sizing:border-box;max-height:calc(100vh - 90px);overflow:auto;border-radius:20px;background:#fff;border:1px solid #e3e5e8;box-shadow:0 24px 48px -16px rgba(15,23,42,.22) " >
< div class = " grid grid-cols-2 sm:grid-cols-3 min-[1100px]:grid-cols-5 [&>div:last-child]:col-span-2 min-[1100px]:[&>div:last-child]:col-span-1 " style = " gap:1px;background:#e3e5e8 " >< div style = " padding:22px 20px 20px;min-width:0;background:#fff " >< p style = " margin:0;display:flex;align-items:center;gap:10px;font-size:14px;font-weight:800;color:#0b1220 " >< span aria - hidden = " true " style = " flex:none;width:10px;height:10px;border-radius:3px;background:#0b57d0 " ></ span > Piloter la classe </ p >< p style = " margin:4px 0 0 20px;min-height:32px;font-size:12px;line-height:16px;font-weight:500;color:#5f6368 " > En direct et au quotidien </ p >< ul style = " margin:10px 0 0 20px;padding:12px 0 0;border-top:1px solid #f1f3f4;list-style:none;display:grid;gap:2px " >< li >< a href = " { { route('ressource') }}?outil=cockpit " style = " display:block;margin:0 -8px;padding:6px 8px;border-radius:8px;font-size:14px;line-height:1.35;font-weight:600;color:#0b1220;text-decoration:none " class = " hover:bg-[#f1f3f4] hover:text-[#0b57d0] " > Tableau de bord prof </ a ></ li >< li >< a href = " { { route('ressource') }}?outil=visio " style = " display:block;margin:0 -8px;padding:6px 8px;border-radius:8px;font-size:14px;line-height:1.35;font-weight:600;color:#0b1220;text-decoration:none " class = " hover:bg-[#f1f3f4] hover:text-[#0b57d0] " > Visio de classe </ a ></ li >< li >< a href = " { { route('ressource') }}?outil=espace-eleve " style = " display:block;margin:0 -8px;padding:6px 8px;border-radius:8px;font-size:14px;line-height:1.35;font-weight:600;color:#0b1220;text-decoration:none " class = " hover:bg-[#f1f3f4] hover:text-[#0b57d0] " > Espace élève </ a ></ li >< li >< a href = " { { route('ressource') }}?outil=fiche-eleve " style = " display:block;margin:0 -8px;padding:6px 8px;border-radius:8px;font-size:14px;line-height:1.35;font-weight:600;color:#0b1220;text-decoration:none " class = " hover:bg-[#f1f3f4] hover:text-[#0b57d0] " > Fiche élève </ a ></ li >< li >< a href = " { { route('ressource') }}?outil=messagerie " style = " display:block;margin:0 -8px;padding:6px 8px;border-radius:8px;font-size:14px;line-height:1.35;font-weight:600;color:#0b1220;text-decoration:none " class = " hover:bg-[#f1f3f4] hover:text-[#0b57d0] " > Messagerie </ a ></ li ></ ul ></ div >< div style = " padding:22px 20px 20px;min-width:0;background:#fff " >< p style = " margin:0;display:flex;align-items:center;gap:10px;font-size:14px;font-weight:800;color:#0b1220 " >< span aria - hidden = " true " style = " flex:none;width:10px;height:10px;border-radius:3px;background:#137333 " ></ span > Apprendre </ p >< p style = " margin:4px 0 0 20px;min-height:32px;font-size:12px;line-height:16px;font-weight:500;color:#5f6368 " > Cours , TP et code </ p >< ul style = " margin:10px 0 0 20px;padding:12px 0 0;border-top:1px solid #f1f3f4;list-style:none;display:grid;gap:2px " >< li >< a href = " { { route('ressource') }}?outil=cours " style = " display:block;margin:0 -8px;padding:6px 8px;border-radius:8px;font-size:14px;line-height:1.35;font-weight:600;color:#0b1220;text-decoration:none " class = " hover:bg-[#f1f3f4] hover:text-[#0b57d0] " > Cours gratuits </ a ></ li >< li >< a href = " { { route('ressource') }}?outil=labs " style = " display:block;margin:0 -8px;padding:6px 8px;border-radius:8px;font-size:14px;line-height:1.35;font-weight:600;color:#0b1220;text-decoration:none " class = " hover:bg-[#f1f3f4] hover:text-[#0b57d0] " > TP sur machine Linux </ a ></ li >< li >< a href = " { { route('ressource') }}?outil=lab-web " style = " display:block;margin:0 -8px;padding:6px 8px;border-radius:8px;font-size:14px;line-height:1.35;font-weight:600;color:#0b1220;text-decoration:none " class = " hover:bg-[#f1f3f4] hover:text-[#0b57d0] " > Lab web </ a ></ li >< li >< a href = " { { route('ressource') }}?outil=ide " style = " display:block;margin:0 -8px;padding:6px 8px;border-radius:8px;font-size:14px;line-height:1.35;font-weight:600;color:#0b1220;text-decoration:none " class = " hover:bg-[#f1f3f4] hover:text-[#0b57d0] " > Éditeur de code en ligne </ a ></ li >< li >< a href = " { { route('ressource') }}?outil=maison " style = " display:block;margin:0 -8px;padding:6px 8px;border-radius:8px;font-size:14px;line-height:1.35;font-weight:600;color:#0b1220;text-decoration:none " class = " hover:bg-[#f1f3f4] hover:text-[#0b57d0] " > Ressources à la maison </ a ></ li ></ ul ></ div >< div style
< div style = " position:sticky;bottom:0;padding:14px 24px;border-top:1px solid #e3e5e8;background:#f8f9fa;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px " >< span style = " font-size:14px;font-weight:500;color:#5f6368 " > 24 outils , chacun avec sa présentation et sa démo </ span >< a href = " { { route('fonctionnalites') }} " style = " font-size:15px;font-weight:700;color:#0b57d0;text-decoration:none " > Voir toutes les fonctionnalités → </ a ></ div >
</ div ></ details ></ li >< li >< a href = " { { route('cours.index') }} " @ if ( request () -> routeIs ( 'cours.index' )) aria - current = " page " @ endif style = " display:inline-flex;align-items:center;height:24px;line-height:1.5;font-size:15px;font-weight:600;color:#0b1220;text-decoration:none " class = " hover:text-[#0b57d0] aria-[current=page]:text-[#0b57d0] " > Cours </ a ></ li >< li >< a href = " { { route('tarifs') }} " @ if ( request () -> routeIs ( 'tarifs' )) aria - current = " page " @ endif style = " display:inline-flex;align-items:center;height:24px;line-height:1.5;font-size:15px;font-weight:600;color:#0b1220;text-decoration:none " class = " hover:text-[#0b57d0] aria-[current=page]:text-[#0b57d0] " > Tarifs </ a ></ li ></ ul >
< div style = " display:flex;align-items:center;gap:20px " >
< a href = " { { route('login') }} " style = " font-size:15px;font-weight:600;color:#0b1220;text-decoration:none " class = " hover:text-[#0b57d0] " > Se connecter </ a >
< a href = " { { route('register') }} " style = " display:inline-flex;align-items:center;height:40px;padding:0 20px;border-radius:999px;background:#0b57d0;color:#fff;font-size:15px;font-weight:700;text-decoration:none " > Créer une classe </ a >
</ div >
</ nav >
</ header >
< main >
< div class = " border-b border-[#e3e5e8] bg-[#f8f9fa] " >< div class = " mx-auto grid max-w-[1600px] lg:grid-cols-[240px_minmax(0,1fr)] " >< aside class = " border-b border-[#e3e5e8] bg-white p-5 lg:border-b-0 lg:border-r-2 " >< p class = " font-mono text-[11px] font-semibold uppercase tracking-wider " > Pour la DSI </ p >< ul class = " mt-2 grid gap-1 " >< li >< a href = " #auth " class = " flex items-center gap-3 border border-[#dadce0] rounded-lg bg-[#0b57d0] text-white px-3 py-2 text-sm font-bold " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z " /></ svg >< span class = " flex-1 " > Authentification </ span ></ a ></ li >< li >< a href = " #provision " class = " flex items-center gap-3 border-2 border-transparent hover:border-black px-3 py-2 text-sm font-bold " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2 " />< circle cx = " 9 " cy = " 7 " r = " 4 " /></ svg >< span class = " flex-1 " > Comptes </ span ></ a ></ li >< li >< a href = " #api " class = " flex items-center gap-3 border-2 border-transparent hover:border-black px-3 py-2 text-sm font-bold " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M12 3v4M12 17v4M3 12h4M17 12h4M5.6 5.6l2.8 2.8M15.6 15.6l2.8 2.8M5.6 18.4l2.8-2.8M15.6 8.4l2.8-2.8 " /></ svg >< span class = " flex-1 " > API </ span ></ a ></ li >< li >< a href = " #reseau " class = " flex items-center gap-3 border-2 border-transparent hover:border-black px-3 py-2 text-sm font-bold " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M1 6v16l7-4 8 4 7-4V2l-7 4-8-4-7 4zM8 2v16M16 6v16 " /></ svg >< span class = " flex-1 " > Prérequis réseau </ span ></ a ></ li >< li >< a href = " #isolation " class = " flex items-center gap-3 border-2 border-transparent hover:border-black px-3 py-2 text-sm font-bold " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M3 3h7v7H3zM14 3h7v7h-7zM3 14h7v7H3zM14 14h7v7h-7z " /></ svg >< span class = " flex-1 " > Isolation des VM </ span ></ a ></ li >< li >< a href = " #conformite " class = " flex items-center gap-3 border-2 border-transparent hover:border-black px-3 py-2 text-sm font-bold " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M4 19.5A2.5 2.5 0 0 1 6.5 17H20V2H6.5A2.5 2.5 0 0 0 4 4.5v15z " /></ svg >< span class = " flex-1 " > Conformité </ span ></ a ></ li ></ ul >< div class = " mt-6 border border-[#dadce0] rounded-lg bg-[#e6f4ea] p-3 text-xs font-semibold " >< p class = " font-extrabold " > Contact sécurité </ p >< p class = " mt-1 " > securite @ syllabus . fr · signalement de vulnérabilité traité sous 72 h </ p ></ div ></ aside >< div class = " min-w-0 p-5 lg:p-8 " >< div class = " flex flex-wrap items-end justify-between gap-4 " >< div >< p class = " font-mono text-xs font-semibold " > Documentation technique </ p >< div class = " min-w-0 flex-1 " >< p data - public = " P " class = " mb-2 inline-flex items-center gap-2 rounded-full border border-[#b8c1cf] bg-white px-3 py-1 text-sm font-bold text-[#1d3fa8] " > Pour les profs </ p >
< h1 class = " mt-1 text-4xl font-extrabold tracking-tight " > Intégration et sécurité </ h1 ></ div >< p class = " mt-1 font-semibold " > Ce qu’ il faut savoir pour raccorder Syllabus au système d’ information de l’ établissement .</ p ></ div >< div class = " flex flex-wrap gap-3 " >< button type = " button " class = " inline-flex h-11 items-center gap-2 border border-[#dadce0] rounded-lg px-4 text-sm font-extrabold bg-white hover:bg-[#f8f9fa] " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3 " /></ svg > Télécharger le dossier sécurité ( PDF ) </ button >< button type = " button " id = " n-test " class = " inline-flex h-11 items-center gap-2 border border-[#dadce0] rounded-lg bg-[#fef7e0] px-4 text-sm font-extrabold " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M20 6 9 17l-5-5 " /></ svg > Tester mon réseau </ button ></ div ></ div >< p id = " n-res " class = " mt-4 hidden border border-[#dadce0] rounded-lg bg-white p-3 font-mono text-sm font-semibold " aria - live = " polite " ></ p >
< div class = " mt-6 grid gap-6 xl:grid-cols-2 " >
< section id = " auth " class = " border border-[#dadce0] rounded-lg bg-white " aria - labelledby = " t-auth " >< div class = " flex flex-wrap items-center justify-between gap-3 border-b border-[#e3e5e8] p-4 " >< h2 id = " t-auth " class = " flex items-center gap-2 text-lg font-extrabold " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z " /></ svg > Authentification unique ( SSO ) </ h2 ></ div >< div class = " grid gap-3 p-4 text-sm font-semibold " >< p > Protocoles pris en charge : < b > SAML 2.0 </ b > ( Shibboleth , ADFS , fédération Renater ), < b > OpenID Connect </ b > ( Entra ID , Google Workspace , Keycloak ), < b > CAS </ b > ( ENT ) . EduConnect pour les élèves du secondaire via l’ ENT de l’ académie .</ p >< div class = " overflow-x-auto " >< table class = " w-full min-w-[480px] border-collapse text-left text-sm " >< thead class = " border-b border-[#e3e5e8] bg-[#f8f9fa] font-mono text-[11px] uppercase tracking-wider " >< tr >< th class = " px-4 py-3 font-semibold " > Paramètre </ th >< th class = " px-4 py-3 font-semibold " > Valeur </ th ></ tr ></ thead >< tbody >< tr class = " border-b border-[#e3e5e8] last:border-b-0 hover:bg-[#f8f9fa] " >< td class = " px-4 py-3 font-semibold " > Entity ID </ td >< td class = " px-4 py-3 font-semibold " >< span class = " font-mono text-xs " > https :// auth . syllabus . fr / saml / metadata </ span ></ td ></ tr >< tr class = " border-b border-[#e3e5e8] last:border-b-0 hover:bg-[#f8f9fa] " >< td class = " px-4 py-3 font-semibold " > ACS URL </ td >< td class = " px-4 py-3 font-semibold " >< span class = " font-mono text-xs " > https :// auth . syllabus . fr / saml / acs </ span ></ td ></ tr >< tr class = " border-b border-[#e3e5e8] last:border-b-0 hover:bg-[#f8f9fa] " >< td class = " px-4 py-3 font-semibold " > Attributs requis </ td >< td class = " px-4 py-3 font-semibold " >< span class = " font-mono text-xs " > mail , givenName , sn , eduPersonAffiliation </ span ></ td ></ tr >< tr class = " border-b border-[#e3e5e8] last:border-b-0 hover:bg-[#f8f9fa] " >< td class = " px-4 py-3 font-semibold " > Redirect URI OIDC </ td >< td class = " px-4 py-3 font-semibold " >< span class = " font-mono text-xs " > https :// auth . syllabus . fr / oidc / callback </ span ></ td ></ tr ></ tbody ></ table ></ div >< div class = " flex flex-wrap gap-2 " >< button type = " button " onclick = " window.print() " class = " inline-flex h-9 items-center gap-2 border border-[#dadce0] rounded-lg px-3 text-xs font-extrabold hover:bg-[#0b57d0] hover:text-white " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3 " /></ svg > Métadonnées SAML ( XML ) </ button >< button type = " button " onclick = " window.print() " class = " inline-flex h-9 items-center gap-2 border border-[#dadce0] rounded-lg px-3 text-xs font-extrabold hover:bg-[#0b57d0] hover:text-white " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3 " /></ svg > Guide ADFS </ button >< button type = " button " onclick = " window.print() " class = " inline-flex h-9 items-center gap-2 border border-[#dadce0] rounded-lg px-3 text-xs font-extrabold hover:bg-[#0b57d0] hover:text-white " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3 " /></ svg > Guide Keycloak </ button ></ div ></ div ></ section >
< section id = " provision " class = " border border-[#dadce0] rounded-lg bg-white " aria - labelledby = " t-provision " >< div class = " flex flex-wrap items-center justify-between gap-3 border-b border-[#e3e5e8] p-4 " >< h2 id = " t-provision " class = " flex items-center gap-2 text-lg font-extrabold " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2 " />< circle cx = " 9 " cy = " 7 " r = " 4 " /></ svg > Création et suppression des comptes </ h2 ></ div >< ul class = " divide-y divide-[#e3e5e8] text-sm font-semibold " >< li class = " p-4 " >< p class = " font-extrabold " > Import CSV </ p >< p class = " mt-1 " > Classes et étudiants , depuis l’ export de votre logiciel de scolarité </ p ></ li >< li class = " p-4 " >< p class = " font-extrabold " > Juste à temps ( JIT ) </ p >< p class = " mt-1 " > Compte créé à la première connexion SSO , rattaché selon l’ affiliation </ p ></ li >< li class = " p-4 " >< p class = " font-extrabold " > SCIM 2.0 </ p >< p class = " mt-1 " > Synchronisation automatique depuis Entra ID ou Keycloak </ p ></ li >< li class = " p-4 " >< p class = " font-extrabold " > LDAP / Active Directory </ p >< p class = " mt-1 " > Synchronisation planifiée des groupes en lecture seule </ p ></ li >< li class = " p-4 " >< p class = " font-extrabold " > Suppression </ p >< p class = " mt-1 " > Compte désactivé à la fin de licence , données effacées après 12 mois </ p ></ li ></ ul ></ section >
</ div >
< div class = " mt-6 grid gap-6 xl:grid-cols-2 " >
< section id = " api " class = " border border-[#dadce0] rounded-lg bg-white " aria - labelledby = " t-api " >< div class = " flex flex-wrap items-center justify-between gap-3 border-b border-[#e3e5e8] p-4 " >< h2 id = " t-api " class = " flex items-center gap-2 text-lg font-extrabold " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M12 3v4M12 17v4M3 12h4M17 12h4M5.6 5.6l2.8 2.8M15.6 15.6l2.8 2.8M5.6 18.4l2.8-2.8M15.6 8.4l2.8-2.8 " /></ svg > API REST </ h2 ></ div >< div class = " grid gap-3 p-4 text-sm font-semibold " >< p > API REST en JSON , documentée au format < b > OpenAPI 3.1 </ b >. Authentification par jeton porteur , une clé par établissement avec des droits limités ( lecture des notes , gestion des comptes ) . Limite : 600 requêtes par minute . Webhooks signés ( HMAC - SHA256 ) pour les événements devoir rendu , examen terminé , alerte ouverte .</ p >< pre class = " overflow-x-auto border border-[#dadce0] rounded-lg bg-[#13233A] p-3 font-mono text-xs text-white " > curl - H " Authorization: Bearer $PAILLASSE_TOKEN " \
https :// api . syllabus . fr / v1 / classes / bts - sio - 1 a / notes ? format = csv </ pre >< div class = " flex flex-wrap gap-2 " >< button type = " button " class = " inline-flex h-11 items-center gap-2 border border-[#dadce0] rounded-lg px-4 text-sm font-extrabold h-9 text-xs bg-white " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M4 19.5A2.5 2.5 0 0 1 6.5 17H20V2H6.5A2.5 2.5 0 0 0 4 4.5v15z " /></ svg > Documentation OpenAPI </ button >< button type = " button " class = " inline-flex h-11 items-center gap-2 border border-[#dadce0] rounded-lg px-4 text-sm font-extrabold h-9 text-xs bg-white " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z " /></ svg > Générer une clé </ button ></ div ></ div ></ section >
< section id = " reseau " class = " border border-[#dadce0] rounded-lg bg-white " aria - labelledby = " t-reseau " >< div class = " flex flex-wrap items-center justify-between gap-3 border-b border-[#e3e5e8] p-4 " >< h2 id = " t-reseau " class = " flex items-center gap-2 text-lg font-extrabold " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M1 6v16l7-4 8 4 7-4V2l-7 4-8-4-7 4zM8 2v16M16 6v16 " /></ svg > Prérequis réseau et postes </ h2 ></ div >< div class = " grid gap-3 p-4 text-sm font-semibold " >< div class = " overflow-x-auto " >< table class = " w-full min-w-[480px] border-collapse text-left text-sm " >< thead class = " border-b border-[#e3e5e8] bg-[#f8f9fa] font-mono text-[11px] uppercase tracking-wider " >< tr >< th class = " px-4 py-3 font-semibold " > À autoriser </ th >< th class = " px-4 py-3 font-semibold " > Protocole </ th >< th class = " px-4 py-3 font-semibold " > Usage </ th ></ tr ></ thead >< tbody >< tr class = " border-b border-[#e3e5e8] last:border-b-0 hover:bg-[#f8f9fa] " >< td class = " px-4 py-3 font-semibold " >< span class = " font-mono text-xs " > syllabus . fr , *. syllabus . fr </ span ></ td >< td class = " px-4 py-3 font-semibold " > HTTPS 443 </ td >< td class = " px-4 py-3 font-semibold " > site , cours , API </ td ></ tr >< tr class = " border-b border-[#e3e5e8] last:border-b-0 hover:bg-[#f8f9fa] " >< td class = " px-4 py-3 font-semibold " >< span class = " font-mono text-xs " > vm . syllabus . fr </ span ></ td >< td class = " px-4 py-3 font-semibold " > WSS 443 ( WebSocket ) </ td >< td class = " px-4 py-3 font-semibold " > terminal et IDE </ td ></ tr >< tr class = " border-b border-[#e3e5e8] last:border-b-0 hover:bg-[#f8f9fa] " >< td class = " px-4 py-3 font-semibold " >< span class = " font-mono text-xs " > auth . syllabus . fr </ span ></ td >< td class = " px-4 py-3 font-semibold " > HTTPS 443 </ td >< td class = " px-4 py-3 font-semibold " > connexion SSO </ td ></ tr ></ tbody ></ table ></ div >< p > Aucun port autre que 443 , aucun logiciel à installer . Le proxy doit laisser passer les connexions WebSocket ( en - tête Upgrade ) et ne pas couper les sessions inactives avant 10 minutes . Navigateurs : Firefox , Chrome , Edge et Safari des deux dernières versions majeures . Débit : environ 50 kbit / s par terminal , 300 kbit / s par IDE .</ p ></ div ></ section >
</ div >
< div class = " mt-6 grid gap-6 xl:grid-cols-2 " >
< section id = " isolation " class = " border border-[#dadce0] rounded-lg bg-white " aria - labelledby = " t-isolation " >< div class = " flex flex-wrap items-center justify-between gap-3 border-b border-[#e3e5e8] p-4 " >< h2 id = " t-isolation " class = " flex items-center gap-2 text-lg font-extrabold " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M3 3h7v7H3zM14 3h7v7h-7zM3 14h7v7H3zM14 14h7v7h-7z " /></ svg > Isolation des environnements </ h2 ></ div >< ul class = " grid gap-2 p-4 text-sm font-semibold " >< li class = " flex gap-2 " >< span class = " font-extrabold " > ■ </ span > Une VM KVM dédiée par étudiant et par séance , jamais partagée </ li >< li class = " flex gap-2 " >< span class = " font-extrabold " > ■ </ span > Trafic entre VM d’ étudiants bloqué , y compris dans une même classe </ li >< li class = " flex gap-2 " >< span class = " font-extrabold " > ■ </ span > Sortie Internet filtrée : fermée par défaut , liste blanche de dépôts ( Debian , PyPI , npm ) activable par le prof </ li >< li class = " flex gap-2 " >< span class = " font-extrabold " > ■ </ span > VM détruite en fin de séance ; seul le dossier de travail est conservé , chiffré </ li >< li class = " flex gap-2 " >< span class = " font-extrabold " > ■ </ span > Quotas CPU , mémoire et disque par VM ; arrêt automatique après 30 min d’ inactivité </ li >< li class = " flex gap-2 " >< span class = " font-extrabold " > ■ </ span > Commandes et connexions journalisées , consultables par le prof et la DSI </ li ></ ul ></ section >
< section id = " conformite " class = " border border-[#dadce0] rounded-lg bg-white " aria - labelledby = " t-conformite " >< div class = " flex flex-wrap items-center justify-between gap-3 border-b border-[#e3e5e8] p-4 " >< h2 id = " t-conformite " class = " flex items-center gap-2 text-lg font-extrabold " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M4 19.5A2.5 2.5 0 0 1 6.5 17H20V2H6.5A2.5 2.5 0 0 0 4 4.5v15z " /></ svg > Conformité et continuité </ h2 ></ div >< div class = " overflow-x-auto " >< table class = " w-full min-w-[480px] border-collapse text-left text-sm " >< thead class = " border-b border-[#e3e5e8] bg-[#f8f9fa] font-mono text-[11px] uppercase tracking-wider " >< tr >< th class = " px-4 py-3 font-semibold " > Sujet </ th >< th class = " px-4 py-3 font-semibold " > Engagement </ th ></ tr ></ thead >< tbody >< tr class = " border-b border-[#e3e5e8] last:border-b-0 hover:bg-[#f8f9fa] " >< td class = " px-4 py-3 font-semibold " > Hébergement </ td >< td class = " px-4 py-3 font-semibold " > Scaleway , datacenters de Paris , France </ td ></ tr >< tr class = " border-b border-[#e3e5e8] last:border-b-0 hover:bg-[#f8f9fa] " >< td class = " px-4 py-3 font-semibold " > RGPD </ td >< td class = " px-4 py-3 font-semibold " > Accord de sous - traitance art . 28 , registre des traitements fourni </ td ></ tr >< tr class = " border-b border-[#e3e5e8] last:border-b-0 hover:bg-[#f8f9fa] " >< td class = " px-4 py-3 font-semibold " > Conservation </ td >< td class = " px-4 py-3 font-semibold " > Traces d’ activité 12 mois , notes jusqu’ à fin de scolarité + 1 an </ td ></ tr >< tr class = " border-b border-[#e3e5e8] last:border-b-0 hover:bg-[#f8f9fa] " >< td class = " px-4 py-3 font-semibold " > Sauvegardes </ td >< td class = " px-4 py-3 font-semibold " > Quotidiennes , chiffrées , conservées 30 jours , second site en France </ td ></ tr >< tr class = " border-b border-[#e3e5e8] last:border-b-0 hover:bg-[#f8f9fa] " >< td class = " px-4 py-3 font-semibold " > Disponibilité </ td >< td class = " px-4 py-3 font-semibold " > 99 , 5 % par mois en période scolaire , maintenance hors cours </ td ></ tr >< tr class = " border-b border-[#e3e5e8] last:border-b-0 hover:bg-[#f8f9fa] " >< td class = " px-4 py-3 font-semibold " > Chiffrement </ td >< td class = " px-4 py-3 font-semibold " > TLS 1.2 + en transit , AES - 256 au repos </ td ></ tr >< tr class = " border-b border-[#e3e5e8] last:border-b-0 hover:bg-[#f8f9fa] " >< td class = " px-4 py-3 font-semibold " > DPO </ td >< td class = " px-4 py-3 font-semibold " > dpo @ syllabus . fr </ td ></ tr ></ tbody ></ table ></ div >< div class = " flex flex-wrap gap-2 border-t border-[#e3e5e8] p-4 " >< button type = " button " onclick = " window.print() " class = " inline-flex h-9 items-center gap-2 border border-[#dadce0] rounded-lg px-3 text-xs font-extrabold hover:bg-[#0b57d0] hover:text-white " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3 " /></ svg > Accord de sous - traitance </ button >< button type = " button " onclick = " window.print() " class = " inline-flex h-9 items-center gap-2 border border-[#dadce0] rounded-lg px-3 text-xs font-extrabold hover:bg-[#0b57d0] hover:text-white " >< svg viewBox = " 0 0 24 24 " class = " h-4 w-4 shrink-0 " fill = " none " stroke = " currentColor " stroke - width = " 2.2 " stroke - linecap = " round " stroke - linejoin = " round " aria - hidden = " true " >< path d = " M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3 " /></ svg > Registre des traitements </ button >< a href = " { { route('legal') }} " class = " inline-flex h-9 items-center border border-[#dadce0] rounded-lg px-3 text-xs font-extrabold hover:bg-[#0b57d0] hover:text-white " > Mentions légales → </ a ></ div ></ section >
</ div >
< script > document . addEventListener ( 'DOMContentLoaded' , function (){ var b = document . getElementById ( 'n-test' ), r = document . getElementById ( 'n-res' ); b . addEventListener ( 'click' , function (){ r . classList . remove ( 'hidden' ); r . textContent = 'Test en cours…' ; var t0 = performance . now (); setTimeout ( function (){ var ws = 'WebSocket' in window ; r . innerHTML = 'HTTPS 443 : OK (' + Math . round ( performance . now () - t0 ) + ' ms)<br>WebSocket : ' + ( ws ? 'pris en charge par le navigateur' : 'non pris en charge' ) + '<br>Navigateur : ' + navigator . userAgent . split ( ') ' ) . pop ();}, 600 );});}); </ script ></ div ></ div ></ div >
</ main >
< footer style = " background:#f8f9fa;border-top:1px solid #e3e5e8;font-family:Mulish,system-ui,sans-serif " >
< div class = " mx-auto grid max-w-7xl gap-10 px-5 py-14 sm:grid-cols-2 lg:grid-cols-4 lg:px-10 " >
< div >
< p style = " margin:0;font-size:18px;font-weight:800;color:#0b1220 " > Syllabus </ p >
< p style = " margin:10px 0 0;font-size:14px;line-height:1.6;font-weight:500;color:#5f6368 " > Cours , labs , IDE et examens en ligne , du lycée au master .</ p >
</ div >
< nav aria - label = " Produit " >< p style = " margin:0;font-size:13px;font-weight:800;color:#0b1220 " > Produit </ p >< ul style = " margin:14px 0 0;padding:0;list-style:none;display:grid;gap:10px " >< li >< a href = " { { route('fonctionnalites') }} " style = " font-size:14px;font-weight:500;color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Fonctionnalités </ a ></ li >< li >< a href = " { { route('cours.index') }} " style = " font-size:14px;font-weight:500;color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Cours gratuits </ a ></ li >< li >< a href = " { { route('labs.essai') }} " style = " font-size:14px;font-weight:500;color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Essayer un lab </ a ></ li >< li >< a href = " { { route('tarifs') }} " style = " font-size:14px;font-weight:500;color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Tarifs </ a ></ li ></ ul ></ nav >< nav aria - label = " Outils " >< p style = " margin:0;font-size:13px;font-weight:800;color:#0b1220 " > Outils </ p >< ul style = " margin:14px 0 0;padding:0;list-style:none;display:grid;gap:10px " >< li >< a href = " { { route('ressource') }}?outil=cockpit " style = " font-size:14px;font-weight:500;color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Tableau de bord prof </ a ></ li >< li >< a href = " { { route('ressource') }}?outil=labs " style = " font-size:14px;font-weight:500;color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > TP sur machine Linux </ a ></ li >< li >< a href = " { { route('ressource') }}?outil=ide " style = " font-size:14px;font-weight:500;color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Éditeur de code </ a ></ li >< li >< a href = " { { route('ressource') }}?outil=quiz " style = " font-size:14px;font-weight:500;color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Quiz flash </ a ></ li >< li >< a href = " { { route('ressource') }}?outil=sujet " style = " font-size:14px;font-weight:500;color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Examens </ a ></ li >< li >< a href = " { { route('ressource') }}?outil=bibliotheque " style = " font-size:14px;font-weight:500;color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Bibliothèque du prof </ a ></ li ></ ul ></ nav >< nav aria - label = " Établissements " >< p style = " margin:0;font-size:13px;font-weight:800;color:#0b1220 " > Établissements </ p >< ul style = " margin:14px 0 0;padding:0;list-style:none;display:grid;gap:10px " >< li >< a href = " { { route('etablissements') }} " style = " font-size:14px;font-weight:500;color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Équiper une classe </ a ></ li >< li >< a href = " { { route('ressource') }}?outil=vie-scolaire " style = " font-size:14px;font-weight:500;color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Vie scolaire </ a ></ li >< li >< a href = " { { route('ressource') }}?outil=espace-etablissement " style = " font-size:14px;font-weight:500;color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Licences et factures </ a ></ li >< li >< a href = " { { route('ressource') }}?outil=integration " style = " font-size:14px;font-weight:500;color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Intégration et sécurité </ a ></ li ></ ul ></ nav >< nav aria - label = " Syllabus " >< p style = " margin:0;font-size:13px;font-weight:800;color:#0b1220 " > Syllabus </ p >< ul style = " margin:14px 0 0;padding:0;list-style:none;display:grid;gap:10px " >< li >< a href = " { { route('aide') }} " style = " font-size:14px;font-weight:500;color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Aide et tutoriels </ a ></ li >< li >< a href = " { { route('legal') }} " style = " font-size:14px;font-weight:500;color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Mentions légales et RGPD </ a ></ li ></ ul ></ nav >
< p style = " margin:0;align-self:start;font-size:14px;font-weight:600;color:#5f6368 " >< span style = " color:#137333 " > ● </ span > Tous les services fonctionnent </ p >
</ div >
2026-10-09 21:07:25 +02:00
< div style = " border-top:1px solid #e3e5e8 " >< ul aria - label = " Engagements " style = " max-width:1200px;margin:0 auto;padding:24px 20px;list-style:none;display:flex;flex-wrap:wrap;gap:12px 40px " >< li style = " font-size:14px;font-weight:700;color:#0b1220 " > Hébergé en France </ li >< li style = " font-size:14px;font-weight:700;color:#0b1220 " >< a href = " { { route('confidentialite') }} " style = " color:#0b1220 " > Conforme au RGPD </ a > < span style = " font-weight:500;color:#5f6368 " > · données minimisées </ span ></ li >< li style = " font-size:14px;font-weight:700;color:#0b1220 " > 6 cursus < span style = " font-weight:500;color:#5f6368 " > · du lycée au BUT </ span ></ li >< li style = " font-size:14px;font-weight:700;color:#0b1220 " > 0 € < span style = " font-weight:500;color:#5f6368 " > · sans carte bancaire </ span ></ li ></ ul >
2026-10-08 02:01:58 +02:00
</ div >
< div style = " border-top:1px solid #e3e5e8 " >
2026-10-09 21:07:25 +02:00
< div class = " mx-auto flex max-w-7xl flex-wrap items-center justify-center gap-x-6 gap-y-2 px-5 py-4 lg:px-10 " >< nav aria - label = " Informations légales " >< ul class = " flex flex-wrap justify-center gap-x-5 gap-y-1 " style = " margin:0;padding:0;list-style:none;font-size:14px;font-weight:500 " >< li >< a href = " { { route('legal') }}#mentions " style = " color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Mentions légales </ a ></ li >< li >< a href = " { { route('legal') }}#cgu " style = " color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > CGU </ a ></ li >< li >< a href = " { { route('confidentialite') }}#confidentialite " style = " color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Confidentialité et RGPD </ a ></ li >< li >< a href = " { { route('confidentialite') }}#cookies " style = " color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Cookies </ a ></ li >< li >< a href = " { { route('confidentialite') }}#sous-traitance " style = " color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Sous - traitance </ a ></ li >< li >< a href = " { { route('statut') }} " style = " color:#5f6368;text-decoration:none " class = " hover:text-[#0b57d0] " > Statut du service </ a ></ li ></ ul ></ nav ></ div >
2026-10-08 02:01:58 +02:00
</ div >
</ footer >
</ body >
</ html >