2 Commits
Author SHA1 Message Date
fred 14e4b63f9b feat: appel ttyd depuis wiki php w 2026-07-12 19:06:10 +02:00
fred afba9c2200 fix 2026-07-12 18:05:29 +02:00
3 changed files with 106 additions and 8 deletions

No files matched your search

+14 -8
View File
@@ -15,6 +15,8 @@
/* compilation : gcc -o api api.c -Wall -lssl -lcrypto */
/* ./apid 50000 cert.pem server.key 0 */
char * flog = NULL;
#define TRUE 1
@@ -474,20 +476,24 @@ void trt_connexion()
keepAlive = FALSE;
//
//strcpy(data, "HTTP/1.1 200 OK\r\nConnection: keep-alive\r\nContent-Type:text/html\r\nContent-Length:35\r\n\r\n<html><h2>Hello World !</h2></html>");
if((fp = popen("/root/create_ttyd_session.sh", "r")) == NULL)
remove("/tmp/ttyd.txt");
system("/root/create_ttyd_session.sh > /tmp/ttyd.txt");
if((fp = fopen("/tmp/ttyd.txt", "r")) == NULL)
strcpy(data, "HTTP/1.1 200 OK\r\nConnection: keep-alive\r\nContent-Type:text/html\r\nContent-Length:97\r\n\r\n<html><h2>Erreur, console de test non disponible, veuillez contacter l'administrateur</h2></html>");
else
{
*data = 0;
*rep = 0;
char ligne[10] = {0};
while (fgets(ligne, sizeof(ligne) - 1, fp)) {
strcat(rep, ligne);
}
pclose(fp);
sprintf(data, "HTTP/1.1 200 OK\r\nConnection: keep-alive\r\nContent-Type:text/html\r\nContent-Length:%ld", strlen(rep));
fseek(fp, 0, SEEK_END);
long lg = ftell(fp);
fseek(fp, 0, SEEK_SET);
fread(rep, lg, 1, fp);
rep[lg] = 0;
fclose(fp);
//
sprintf(data, "HTTP/1.1 200 OK\r\nConnection: keep-alive\r\nContent-Type:text/html\r\nContent-Length:%ld", lg);
strcat(data, "\r\n\r\n");
strcat(data, rep);
strncat(data, rep, lg);
}
//
trace("Reponse:\n%s\n", data);
+63
View File
@@ -0,0 +1,63 @@
#!/bin/bash
# dans /root du serveur docker (avec apid et certificat/cle privee)
cat /docker/registry/auth/password | docker login 192.168.10.10:5000/v2 -u nicolas --password-stdin
# Configuration
IMAGE_NAME="192.168.10.10:5000/ttyd_docker:latest"
BASE_PORT=9101
MAX_PORT=9105
# Générer un nom unique (apt install uuid-runtime)
USER_ID=$(uuidgen | cut -d'-' -f1)
CONTAINER_NAME="ttyd_docker_$USER_ID"
# Trouver un port disponible
find_free_port() {
for ((port=$BASE_PORT; port<=$MAX_PORT; port++)); do
if ! lsof -i :$port > /dev/null; then
echo $port
return 0
fi
done
return 1
}
PORT=$(find_free_port)
if [ -z "$PORT" ]; then
echo "Aucun port disponible entre $BASE_PORT et $MAX_PORT."
exit 1
fi
user=$(uuidgen | cut -d'-' -f1)
pass=$(uuidgen | cut -d'-' -f1)
# Lancer le conteneur ttyd
docker run -d \
--name "$CONTAINER_NAME" \
-p "$PORT":7681 \
-e TTYD_USER=$user \
-e TTYD_PASS=$pass \
--rm \
--stop-timeout=30 \
--memory="2g" \
--cpus="0.75" \
"$IMAGE_NAME"
( sleep 7200 && docker stop "$CONTAINER_NAME" ) &
if [ $? -ne 0 ]; then
echo "Erreur lors du démarrage du conteneur."
exit 1
fi
PORT_URL=$(($PORT - $BASE_PORT + 1))
# Afficher l'URL d'accès
#echo "Session ttyd créée avec succès !"
#echo "Nom du conteneur : $CONTAINER_NAME"
#echo "Conteneur lancé pour 2 heures : <a href=\"https://w-$PORT_URL.lanisys.fr\">URL</a>"
#echo "User: $user / Password: $pass"
#echo "Termine avec succes"
echo "https://$user:$pass@w-$PORT_URL.lanisys.fr/"
+29
View File
@@ -0,0 +1,29 @@
<?php
// dans /var/www/w.lanisys.fr sur le serveur ionos
$ctx = stream_context_create([
'http' => [
'timeout' => 4,
],
]);
echo file_get_contents(
"https://api.lanisys.fr:50000/",
false,
$ctx
);
$rep = file_get_contents(
"https://api.lanisys.fr:50000/",
false,
$ctx
);
$pos = strpos($rep, "https://");
if ($pos !== false)
{
header("Location: ".substr($rep, $pos));
exit;
}
else
echo $rep;