Table des matières


Créé le: 2024-01-09 ; Révisé le: 2024-01-09

Développons avec Simon - 6 - Processus de développement et scanner des ports avec Java

Vidéo (1 heure 45 minutes)

Désolé pour les cognements dans la vidéo. Il y avait du monde qui s’amusait fort à l’étage au-dessus de moi. J’ai essayé d’en enlever le plus possible, mais il en reste encore.

Introduction (00:00)

Pour développer un logiciel, il ne suffit pas de savoir programmer et d’utiliser des librairies. Il faut aussi savoir créer et ordonner des tâches, ainsi que gérer les services qu’on veut utiliser. C’est pourquoi, dans cette vidéo, je voudrais montrer un peu plus du processus complet avec la partie d’analyse qui est faite avant la programmation et terminer ensuite par la partie programmation.

Aperçu du logiciel Acilia (00:58)

  • Encore en développement (pas téléchargeable et pas de code source disponible pour le moment).
  • Va être disponible sur GitHub avec une licence MIT.
  • C’est plusieurs scripts et applications que j’ai développés pour mon usage personnel que j’ai tout mis ensemble pour que ce soit plus facile et rapide à développer.
  • Pouvoir aussi créer des fonctionnalités qui se partagent entre plusieurs machines différentes que je possède (système pair à pair).
  • Utilise Java, ReactJS et MapDB (base de données NoSQL locale).

Fonctionnalité (07:59)

Vérifier quelques ports locaux ouverts de services que l’on veut exposer

Définir les cas d’utilisation (10:30)

  1. Accéder localement
  2. Proxy direct (portable -> bureau)
  3. Proxy indirect (portable -> serveur (qui va sur le bureau) ; pas crypté sur le dernier bout)
  4. Proxy direct avec relais interne (portable -> serveur -> bureau)

Définir les tâches et l’ordre (22:16)

  1. Découvrir les services locaux (scan)
  2. Envoyer les services locaux aux pairs
  3. Proxy direct (portable -> bureau)
    • Ouvrir un port local
    • Gérer les événements: nouvelle connexion, envoi de données, fermeture de la connexion
  4. Proxy indirect (portable -> serveur (qui va sur le bureau) ; pas crypté sur le dernier bout)
    • L’instance locale doit vérifier si elle a accès aux services des autres pairs avec une connexion directe
    • Peut-être mettre en dernier
  5. Proxy direct avec relais interne (portable -> serveur -> bureau)
    • Permettre de relayer des commandes par un pair tiers

Développer le scanner de ports (27:11)

  • Découper la tâche en sous-tâches (27:11)
    • Définir les champs de la nouvelle entité (29:49)
  • Créer la nouvelle entité pour la base de données (33:35)
    • Créer la classe (33:48)
    • Explication de la classe AbstractApiBase (33:55)
    • Explication de la classe AbstractJsonEntity (35:58)
    • Choisir quoi utiliser comme ID unique pour l’entité (37:11)
      • Utiliser un UUID choisi au hasard (38:23)
        • Montrer des exemples de UUID (38:43)
      • Ajouter les autres champs (39:55)
    • Création d’un Enum et explication de mon choix de style (pour la facilité des futurs changements dans Git) (41:31)
    • Générer les getters et setters dans IntelliJ (43:16)
  • Créer l’interface de Repository (43:59)
    • Explication de l’interface MapdbJsonRepository (44:28)
  • Créer la classe qui implémente le Repository (46:47)
    • Explication de la classe AbstractMapdbJsonRepository (48:29)
      • Contiens la configuration et l’utilisation de MapDB
      • Utiliser ou non les transactions avec les plus et moins (50:32)
  • Créer l’interface du Manager (56:13)
    • Pourquoi ne pas retourner la liste d’entités directement via l’API et utiliser un wrapper à la place (57:38)
      • Explication de la classe AbstractListResult (58:28)
      • Explication de la classe AbstractApiBaseWithError (58:37)
    • Explication de la classe FormResult (1:00:36)
  • Créer la classe d’implémentation du Manager (1:04:11)
    • Le scan de ports pour certains services prédéfinis (1:05:37)
      • Remplir la liste des services à scanner (1:10:33)
      • Essayer de se connecter au port avec un Socket (1:12:00)
      • Effacer les services locaux précédents (1:14:36)
      • Sauvegarder les nouveaux services locaux (1:18:35)
  • Créer le Controller (01:21:16)
    • Pourquoi le Controller appelle le Manager et au lieu d’avoir la logique directement dedans (01:23:01)
  • Ajouter les requêtes du Controller dans un service en JavaScript (01:24:18)
  • Créer la page web pour lister les services (01:26:08)
  • Ajouter une route pour la page web (01:34:27)
  • Ajouter un lien vers la page web dans le menu (01:35:06)
  • Tester l’application (01:36:05)
    • Essayer le scan (1:37:05)
    • Régler les deux problèmes (1:37:37)
      • Régler le problème avec l’effacement qui ne fonctionne pas (1:37:42)
      • Régler le problème avec les traductions qui fonctionnent à moitié (1:38:48)

Vérifier le code et le mettre dans l’entrepôt Git (01:41:26)

Mot de la fin (01:44:34)