fmidue / codeworld

Educational computer programming environment using Haskell
https://autotool.fmi.uni-due.de/codeworld
Apache License 2.0
0 stars 1 forks source link

Optionen um Code vorabzuladen #17

Closed nimec01 closed 3 weeks ago

nimec01 commented 3 weeks ago

Fügt zwei Optionen hinzu, um Code aus einer Quelle zu laden:

  1. Vorabladen von Code via searchParameter

Es ist nun möglich über den searchParameter loadSrc eine URL anzugeben, von der Code vorab zu laden ist. Wichtig ist hierbei, dass die Response über die entsprechenden CORS Header verfügt. Andernfalls ist ein Vorabladen nicht möglich. Die Idee ist hier z. B. ein Template als Gist hochzuladen und dies dann mit dem seachParameter vorab zuladen. Das könnte dann so aussehen:

https://autotool.fmi.uni-due.de/haskell?loadSrc=https://gist.github.com/...
  1. Vorabladen von Code via POST Request

Es ist jetzt möglich, Code über eine POST Request an /haskell vorabzuladen. Die Payload (als multipart/form-data encoded) muss hierbei über das Feld source verfügen. Vorgesehen ist dafür die Nutzung eines <form> Elements, sodass der Nutzer am Ende auch auf /haskell landet (eine alleinstehende Request würde auch keinen Sinn ergeben). Dies erlaubt es z.B. eine Abgabe aus Autotool direkt zu CodeWorld zu posten.

Der Hintergrund für diese Änderung ist hier zu finden: autotool-dev#6

jvoigtlaender commented 3 weeks ago

Vielleicht sollten diese Feature irgendwie festgehalten werden? Und sei es einfach durch eine Notiz in der README, die auf dieses Issue hier verlinkt.

jvoigtlaender commented 3 weeks ago

Zur Nutzbarkeit:

Wichtig ist hierbei, dass die Response über die entsprechenden CORS Header verfügt.

Was genau heißt das für den Laien, bzw. wie kann ich das sicherstellen? Würde zum Beispiel ein Link zu GH-Pages, etwa zu Dateien wie Example01.hs auf https://fmidue.github.io/ProPa-Slides/2024/ dieses Kriterium erfüllen?

nimec01 commented 3 weeks ago

Zur Nutzbarkeit:

Wichtig ist hierbei, dass die Response über die entsprechenden CORS Header verfügt.

Was genau heißt das für den Laien, bzw. wie kann ich das sicherstellen? Würde zum Beispiel ein Link zu GH-Pages, etwa zu Dateien wie Example01.hs auf https://fmidue.github.io/ProPa-Slides/2024/ dieses Kriterium erfüllen?

Es ist schwer, hier eine generelle Aussage zu tätigen. Ob die entsprechenden Header gesetzt sind, ist vom jeweiligen Server-Admin abhängig, da der notwendige Header (Access-Control-Allow-Origin) nicht standardmäßig gesetzt wird.

Spontan fallen mir folgende Möglichkeiten ein, dies zu überprüfen:

  1. Seite aufrufen und im Network-Tab der Developer Tools die Response-Header überprüfen image Hier sieht man z. B., dass es möglich wäre von jeder Domain aus (Access-Control-Allow-Origin: *) eine cross-origin Anfrage an einen Gist zu stellen. Wenn man stattdessen auf https://code.world geht, sieht man, dass der Header fehlt.
  2. Ausprobieren Neuen Tab öffnen, in die Entwickler-Konsole gehen und fetch('<url>') ausführen. Falls dann ein Fehler der Art "Access to fetch at [...] has been blocked by CORS policy [...]" auftritt, wissen wir, dass eine cross-origin Anfrage an nicht möglich ist. image

Würde zum Beispiel ein Link zu GH-Pages, etwa zu Dateien wie Example01.hs auf https://fmidue.github.io/ProPa-Slides/2024/ dieses Kriterium erfüllen?

Ja, das klappt. Hier mal mit Methode 2 getestet: image