WebHost: offer combined yaml file on /check if successful (#2337)

This commit is contained in:
Fabian Dill 2023-10-22 02:02:30 +02:00 committed by GitHub
parent a5022ccfc5
commit ee31051c43
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 41 additions and 27 deletions

View File

@ -1,5 +1,6 @@
import zipfile import zipfile
from typing import * import base64
from typing import Union, Dict, Set, Tuple
from flask import request, flash, redirect, url_for, render_template from flask import request, flash, redirect, url_for, render_template
from markupsafe import Markup from markupsafe import Markup
@ -30,7 +31,15 @@ def check():
flash(options) flash(options)
else: else:
results, _ = roll_options(options) results, _ = roll_options(options)
return render_template("checkResult.html", results=results) if len(options) > 1:
# offer combined file back
combined_yaml = "---\n".join(f"# original filename: {file_name}\n{file_content.decode('utf-8-sig')}"
for file_name, file_content in options.items())
combined_yaml = base64.b64encode(combined_yaml.encode("utf-8-sig")).decode()
else:
combined_yaml = ""
return render_template("checkResult.html",
results=results, combined_yaml=combined_yaml)
return render_template("check.html") return render_template("check.html")
@ -41,17 +50,17 @@ def mysterycheck():
def get_yaml_data(files) -> Union[Dict[str, str], str, Markup]: def get_yaml_data(files) -> Union[Dict[str, str], str, Markup]:
options = {} options = {}
for file in files: for uploaded_file in files:
# if user does not select file, browser also # if user does not select file, browser also
# submit an empty part without filename # submit an empty part without filename
if file.filename == '': if uploaded_file.filename == '':
return 'No selected file' return 'No selected file'
elif file.filename in options: elif uploaded_file.filename in options:
return f'Conflicting files named {file.filename} submitted' return f'Conflicting files named {uploaded_file.filename} submitted'
elif file and allowed_file(file.filename): elif uploaded_file and allowed_file(uploaded_file.filename):
if file.filename.endswith(".zip"): if uploaded_file.filename.endswith(".zip"):
with zipfile.ZipFile(file, 'r') as zfile: with zipfile.ZipFile(uploaded_file, 'r') as zfile:
infolist = zfile.infolist() infolist = zfile.infolist()
if any(file.filename.endswith(".archipelago") for file in infolist): if any(file.filename.endswith(".archipelago") for file in infolist):
@ -60,12 +69,13 @@ def get_yaml_data(files) -> Union[Dict[str, str], str, Markup]:
for file in infolist: for file in infolist:
if file.filename.endswith(banned_zip_contents): if file.filename.endswith(banned_zip_contents):
return "Uploaded data contained a rom file, which is likely to contain copyrighted material. " \ return ("Uploaded data contained a rom file, "
"Your file was deleted." "which is likely to contain copyrighted material. "
"Your file was deleted.")
elif file.filename.endswith((".yaml", ".json", ".yml", ".txt")): elif file.filename.endswith((".yaml", ".json", ".yml", ".txt")):
options[file.filename] = zfile.open(file, "r").read() options[file.filename] = zfile.open(file, "r").read()
else: else:
options[file.filename] = file.read() options[uploaded_file.filename] = uploaded_file.read()
if not options: if not options:
return "Did not find a .yaml file to process." return "Did not find a .yaml file to process."
return options return options

View File

@ -28,6 +28,10 @@
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
{% if combined_yaml %}
<h1>Combined File Download</h1>
<p><a href="data:text/yaml;base64,{{ combined_yaml }}" download="combined.yaml">Download</a></p>
{% endif %}
</div> </div>
</div> </div>
{% endblock %} {% endblock %}

View File

@ -67,7 +67,7 @@ Wenn du eine Option nicht gewählt haben möchtest, setze ihren Wert einfach auf
### Überprüfung deiner YAML-Datei ### Überprüfung deiner YAML-Datei
Wenn man sichergehen will, ob die YAML-Datei funktioniert, kann man dies bei der [YAML Validator](/mysterycheck) Seite Wenn man sichergehen will, ob die YAML-Datei funktioniert, kann man dies bei der [YAML Validator](/check) Seite
tun. tun.
## ein Einzelspielerspiel erstellen ## ein Einzelspielerspiel erstellen

View File

@ -82,7 +82,7 @@ debe tener al menos un valor mayor que cero, si no la generación fallará.
### Verificando tu archivo YAML ### Verificando tu archivo YAML
Si quieres validar que tu fichero YAML para asegurarte que funciona correctamente, puedes hacerlo en la pagina Si quieres validar que tu fichero YAML para asegurarte que funciona correctamente, puedes hacerlo en la pagina
[YAML Validator](/mysterycheck). [YAML Validator](/check).
## Generar una partida para un jugador ## Generar una partida para un jugador

View File

@ -83,7 +83,7 @@ chaque paramètre il faut au moins une option qui soit paramétrée sur un nombr
### Vérifier son fichier YAML ### Vérifier son fichier YAML
Si vous voulez valider votre fichier YAML pour être sûr qu'il fonctionne, vous pouvez le vérifier sur la page du Si vous voulez valider votre fichier YAML pour être sûr qu'il fonctionne, vous pouvez le vérifier sur la page du
[Validateur de YAML](/mysterycheck). [Validateur de YAML](/check).
## Générer une partie pour un joueur ## Générer une partie pour un joueur

View File

@ -50,7 +50,7 @@ them. Player settings page: [Donkey Kong Country 3 Player Settings Page](/games/
### Verifying your config file ### Verifying your config file
If you would like to validate your config file to make sure it works, you may do so on the YAML Validator page. YAML If you would like to validate your config file to make sure it works, you may do so on the YAML Validator page. YAML
validator page: [YAML Validation page](/mysterycheck) validator page: [YAML Validation page](/check)
## Generating a Single-Player Game ## Generating a Single-Player Game

View File

@ -31,7 +31,7 @@ them. Factorio player settings page: [Factorio Settings Page](/games/Factorio/pl
### Verifying your config file ### Verifying your config file
If you would like to validate your config file to make sure it works, you may do so on the YAML Validator page. YAML If you would like to validate your config file to make sure it works, you may do so on the YAML Validator page. YAML
Validator page: [Yaml Validation Page](/mysterycheck) Validator page: [Yaml Validation Page](/check)
## Connecting to Someone Else's Factorio Game ## Connecting to Someone Else's Factorio Game

View File

@ -40,7 +40,7 @@ game you will be playing as well as the settings you would like for that game.
YAML is a format very similar to JSON however it is made to be more human-readable. If you are ever unsure of the YAML is a format very similar to JSON however it is made to be more human-readable. If you are ever unsure of the
validity of your YAML file you may check the file by uploading it to the check page on the Archipelago website: validity of your YAML file you may check the file by uploading it to the check page on the Archipelago website:
[YAML Validation Page](/mysterycheck) [YAML Validation Page](/check)
### Creating a YAML ### Creating a YAML

View File

@ -40,7 +40,7 @@ your personal settings and export a config file from them.
### Verifying your config file ### Verifying your config file
If you would like to validate your config file to make sure it works, you may do so on the If you would like to validate your config file to make sure it works, you may do so on the
[YAML Validator](/mysterycheck) page. [YAML Validator](/check) page.
## Generating a Single-Player Game ## Generating a Single-Player Game

View File

@ -44,7 +44,7 @@ your personal settings and export a config file from them.
### Verifying your config file ### Verifying your config file
If you would like to validate your config file to make sure it works, you may do so on the If you would like to validate your config file to make sure it works, you may do so on the
[YAML Validator](/mysterycheck) page. [YAML Validator](/check) page.
## Generating a Single-Player Game ## Generating a Single-Player Game

View File

@ -49,7 +49,7 @@ them. Player settings page: [Super Metroid Player Settings Page](/games/Super%20
### Verifying your config file ### Verifying your config file
If you would like to validate your config file to make sure it works, you may do so on the YAML Validator page. YAML If you would like to validate your config file to make sure it works, you may do so on the YAML Validator page. YAML
validator page: [YAML Validation page](/mysterycheck) validator page: [YAML Validation page](/check)
## Generating a Single-Player Game ## Generating a Single-Player Game

View File

@ -50,7 +50,7 @@ them. Player settings page: [Super Mario World Player Settings Page](/games/Supe
### Verifying your config file ### Verifying your config file
If you would like to validate your config file to make sure it works, you may do so on the YAML Validator page. YAML If you would like to validate your config file to make sure it works, you may do so on the YAML Validator page. YAML
validator page: [YAML Validation page](/mysterycheck) validator page: [YAML Validation page](/check)
## Joining a MultiWorld Game ## Joining a MultiWorld Game

View File

@ -47,7 +47,7 @@ them. Player settings page: [SMZ3 Player Settings Page](/games/SMZ3/player-setti
### Verifying your config file ### Verifying your config file
If you would like to validate your config file to make sure it works, you may do so on the YAML Validator page. YAML If you would like to validate your config file to make sure it works, you may do so on the YAML Validator page. YAML
validator page: [YAML Validation page](/mysterycheck) validator page: [YAML Validation page](/check)
## Generating a Single-Player Game ## Generating a Single-Player Game

View File

@ -29,7 +29,7 @@ them. Player settings page: [Secret of Evermore Player Settings PAge](/games/Sec
### Verifying your config file ### Verifying your config file
If you would like to validate your config file to make sure it works, you may do so on the YAML Validator If you would like to validate your config file to make sure it works, you may do so on the YAML Validator
page: [YAML Validation page](/mysterycheck) page: [YAML Validation page](/check)
## Generating a Single-Player Game ## Generating a Single-Player Game

View File

@ -44,7 +44,7 @@ them. Player settings page: [The Legend of Zelda Player Settings Page](/games/Th
### Verifying your config file ### Verifying your config file
If you would like to validate your config file to make sure it works, you may do so on the YAML Validator page. YAML If you would like to validate your config file to make sure it works, you may do so on the YAML Validator page. YAML
validator page: [YAML Validation page](/mysterycheck) validator page: [YAML Validation page](/check)
## Generating a Single-Player Game ## Generating a Single-Player Game

View File

@ -51,7 +51,7 @@ them.
### Verifying your config file ### Verifying your config file
If you would like to validate your config file to make sure it works, you may do so on the [YAML Validator page](/mysterycheck). If you would like to validate your config file to make sure it works, you may do so on the [YAML Validator page](/check).
## Generating a Single-Player Game ## Generating a Single-Player Game