Gambas httpd server

Répondre

Code de confirmation
Saisissez le code exactement comme vous le voyez dans l’image. Notez que le code n’est pas sensible à la casse.
Smileys
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :| :mrgreen: :geek: :ugeek:

Les BBCodes sont activés
[img] est activé
[flash] est désactivé
[url] est activé
Les smileys sont activés

Revue du sujet
   

Étendre la vue Revue du sujet : Gambas httpd server

Gambas httpd server

par admin » 06 janv. 2021 08:50

Bonjour à tous et bonne année.

Voici le tout premier projet réalisé en Gambas Basic.
Il s'agit d'un serveur http minimaliste mais fonctionnel, réalisé sous forme de classe instanciable que l'on peut intégrer à n'importe quel projet pour le rendre accessible par internet.
Dans la version actuelle, il est conforme à la norme http 1.1 (enfin, à peu près :lol: ).

Description des actions depuis la version béta 0.0.11:

0.0.11 - 01/01/2021

- Le serveur renvoie une page "erreur 404" personnalisée si la page er404.html se trouve dans le répertoire web-docs, sinon il envoie juste un message.
- Ajout de l'entête de réponse "Cache-Control: no-cache" pour ne pas permettre la mise en cache des contenus par les navigateurs. Paramètrable dans la variable globale en tête de classe.
- Face à une page .gbp, le serveur appelle une fonction dans le programme principal avec comme arguments: un string contenant la page, un string array contenant les arguments et leur nom. Il récupère un string avec la page modifiée.
- Faute de page demandée, le serveur cherche une page index.html par défaut.

0.0.12 - 03/01.2021

- Ajout d'une fonction d'écriture des opérations (requêtes et envois) dans un fichier httpd_log.log dans le répertoire de l'application.
- Ajout d'une variable booléenne publique servant de switch pour la fonction log (activé "true" par défaut).

0.0.13 - 04/01.2021

- Correction d'un bug (en cas d'absence de la page demandée, la log file n'incluait pas de message d'erreur 404)
- Correction d'un bug, le fichier httpd_log n'avait pas d'extension il est maintenant du type *.log.
- Correction d'un bug, les sockets n'étaient jamais fermés, c'est désormais chose faite.

- Ajout d'une fonction publique pour encrypter un login et password et le sauver dans un fichier texte encrypté.
- Ajout d'une fonction publique pour tester si un login et un password sont présents et justes dans le fichier texte encrypté.

0.0.14 - 07/01.2021

- Ajout d'une gestion de session et d'une variable publique de classe qui contient la durée de validité de session.
- Ajout d'une fonction publique de test de validité de session.
- Ajout d'une gestion des redirections de page si la session n'est plus valide et que la page exige une session valide.
- Ajout d'une gestion d'envoi et de réception de cookie pour l'identification de session.
- Ajout de divers fonctions pour la création/vérification/mise à jour des sessions.
- Ajout d'une gestion des pages spécifiques (login, redirection pour session expirée)

- La balise <NeedCookie> entre les balise <head> </head> indique une page exigeant une session valide pour être affichée.

- Mise en place de divers outils d'exemples et de test dans le formulaire d'exemples:
- Test de session (Formulaire)
- Page de test de login
- Page de test d'envoi de formulaire et d'affichage du résultat dans une autre page
- Page d'information et de redirection sur session expirée

0.0.15 - 09/01.2021

- Ajout de deux variables publiques qui sont le reflet du nombre de connexions en cours et du nombre total de pages vues.
- Ajout de deux compteurs sur la Form d'exemple pour illustrer l'ajout précédent.
- Ajout de deux variables l'une contenant le nom de la procédure de traitement à appeler (peut être modifié depuis votre programme principal), l'autre récupérant l'objet qui contient votre programme principal(doit être initialisée au moment de l'ouverture du programme juste après l'instanciation de la classe).
- Ajout de la gestion de la méthode "POST" dans les requêtes et formulaires.
- Les deux exemples fournis (page de login et formulaire) sont modifiés pour utiliser la méthode POST.
- Ajout d'un exemple de création de login et pass depuis une page située dans un sous répertoire "admin"
- Ajout de la vérification de l'existance de l'utilisateur avant sa création.
- Ajout du nom d'utilisateur sur la ligne user/pwd/session dans le fichier des utilisateurs pour listage futur.

- Correction d'un bug sur les cookies, le cookie envoyé est maintenant valable pour tous les sous-répertoire de web-docs.

0.0.16 - 12/01.2021

- Modification de la procédure de traitement dans Le programme d'exemple, l'exploitation des arguments est désormais plus optimale et indépendante du nombre d'arguments.
- Correction d'un bug dans la gestion des sessions invalides, il manquait un argument dans l'appel de la fonction de traitement *.gbp.
- Correction d'un bug (minuscule au lieu de majuscule) dans l'update des cookies.
- Ajout de la création automatique du fichier utilisateurs si il n'existe pas avec login "Admin" et Mot de passe "password" par défaut.
- Ajout d'une variable en tête de class (DefAdmPwd), correspondant au password par défaut (doit être changé par sécurité depuis le programme principal avant la première utilisation).
- Ajout d'une fonction publique: ListUser() as string[] qui renvoie la liste des utilisateurs enregistrés dans le userpwd.txt.
- Modification de la procédure d'exemple de traitement (erreur de redirection de la page validate si l'utilisateur existe déjà)

0.0.17 - 18/01/2021

- Finalisation de modification de la procédure de traitement, tous les arguments sont désormais exploités par leur nom et non pas par leur ordre d'arrivée.(plus sécurisé).
- Ajout des principaux types Mime jusqu'à la lettre "J".
- Modification du fichier userpwd.txt qui contient désormais la date de dernière connexion d'un utilisateur.
- Modification de la fonction ListUser qui renvoie maintenant le nom d'utilisateur et sa dernière connexion dans le tableau de strings.(y compris la date de dernière connexion).
- La fonction Traitement est appelée systématiquement sur toutes les pages avec l'argument "Replace", ceci permet de remplacer des texte entre {} par ce que l'on veut (par exemple pour un numéro de version sur chaque page).
- Ajout d'une variable en tête de class, indiquant la version de la classe.
- Transformation en composant et premiers tests sous cette forme.
- Modification de la fonction ListUser qui renvoie maintenant un tableau de collections (Name,Date,Time)

Amitié
Olivier

ATTENTION tel quel le serveur écoute le port 1200, pour qu'il fonctionne en port 80 (standard http) il faut taper ces lignes dans un shell linux;

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 1200

sudo iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 1200

voila
Fichiers joints
ClsServer.class.zip
version 0.0.17 du 18/01/2021
HTTPD Gambas Server (as class file)
Le code de la class seule à importer dans votre programme
(4.91 Kio) Téléchargé 32 fois
http-server-0.0.17.tar.gz
version 0.0.17 du 18/01/2021
HTTPD Gambas Server (as class file)
Sources intégrales commentées
(84.62 Kio) Téléchargé 27 fois

Haut