gelinive

Créer des profils du manteau neigeux - retour accueil

git clone git://bebou.netlib.re/gelinive
Log | Files | Refs | README |

commit 1f8517da73ee4ff727b1fd4bd1be30e0cc75b208
parent de5aba83986f0810cc4cea4c088a07ff574b343a
Auterice: Arthur Pons <arthur.pons@unistra.fr>
Date:   Fri, 15 Mar 2024 13:46:53 +0100

Ajout d'un cgi pour attaque gelinive via le web

Doc qui va avec dans le readme

Diffstat:
M.gitignore | 2++
MREADME.md | 26++++++++++++++++++++++++++
Acgi/cgi-bin/gelinive.cgi | 32++++++++++++++++++++++++++++++++
Acgi/index.html | 35+++++++++++++++++++++++++++++++++++
4 files changed, 95 insertions(+), 0 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -15,3 +15,5 @@ !geliniveplot !gelinive_?.?.deb !big-logo.png +!cgi/cgi-bin/gelinive.cgi +!cgi/index.html diff --git a/README.md b/README.md @@ -70,6 +70,8 @@ Depuis apt : ## Utilisation +### En local en ligne de commande + L'exemple le plus typique serait : gelinive profil "Titre" tableau temperature > image.png @@ -89,6 +91,29 @@ bases déjà existantes par exemple ) : < profil geliniveplot "titre" temp > image.png +### En montant un service web + +Pour monter le service web il faut d'abord installer gelinive sur le serveur. + +Une fois gelinive installé de quelque manière que ce soit, vous pouvez utiliser +le contenu du dossier cgi pour faire tourner un service web rudimentaire. Son +installation la plus basique consiste simplement à servir le dossier cgi +par un serveur web : + + busybox httpd -p 80 -h cgi + +Il faut ensuite remplir le formulaire et le soumettre pour obtenir le rendu de +gelinive. + +**ATTENTION** : En l'état le service ne sauvegarde rien du tout sur le serveur. +A chaque génération de graphique tout est écrasé par les nouvelles données. Si +vous voulez conserver les données et le graphique il est essentiel de les +copier/coller. + +Il est possible de modifier la destination des fichiers et leur donner des noms +uniques afin de les conserver en éditant le script `cgi/cgi-bin/gelinive.cgi`. +Chaque projet le fera en fonction de son besoin. + ## Les fichiers * gelinivetest : le script depuis lequel le script final est généré. Il calculera R, e, @@ -103,6 +128,7 @@ bases déjà existantes par exemple ) : * tests/[lieu]tab : les jeux de données contre lesquels vérifier le bon calcul de d, de R et de H * tests/[lieu]temp : les jeux de données contenant les températures * tests/[lieu].png : les images contre lesquelles vérifier la bonne génération de l'image + * cgi/* : la page html et le cgi nécessaires pour faire tourner gelinive en service web * README.md : ce fichier ## Exemple de sortie diff --git a/cgi/cgi-bin/gelinive.cgi b/cgi/cgi-bin/gelinive.cgi @@ -0,0 +1,32 @@ +#! /bin/sh + +tempdir=$(mktemp -d) +trap "rm -rf $tempdir" EXIT + +read -r delim +cat | head -n-1 > $tempdir/data + +getblock() { + sed -n "/name=\"$1\"/,/------/ p" $tempdir/data +} + +getvalue() { + sed -E "s/$delim//;s/$//" | + grep -av "^$" | + tail -n+2 +} + +uploadfile() { + grep -aEv "^(Content|------)" | tail -n+2 | sed '$ d' > $tempdir/$1.tsv +} + +titre=$(getblock "titre" | getvalue) +getblock "releve" | uploadfile releve +getblock "temp" | uploadfile temp + +echo "Content-Type: text/html" +echo "" + +gelinive $tempdir/releve.tsv "$titre" $tempdir/tab.tsv $tempdir/temp.tsv > ../image.png + +echo "<img src='../image.png'>" diff --git a/cgi/index.html b/cgi/index.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8" /> +<meta name="viewport" content="width=device-width,initial-scale=1" /> +<title>Créer un graphique</title> +</head> +<body> + + +<h1 id="tlverse-un-fichier">Créer un graphique</h1> + +<form action="/cgi-bin/gelinive.cgi" method=post enctype=multipart/form-data> + <p> + <label for="titre">Titre</label> + <input type="text" id="titre" name="titre" /> + </p> + <p> + <label for="image">Téléverser un relevé</label> + <input type="file" id="releve" name="releve" accept="application/octet-stream" /> + </p> + <p> + <label for="temp">Téléverser les températures</label> + <input type="file" id="temp" name="temp" accept="application/octet-stream" /> + </p> + <p> + <button type="submit">Soumettre les informations</button> + </p> + <p> + <input type="reset" value="Réinitialiser"> + </p> +</form> + +</body> +</html>