Aller au menu du forum Aller au contenu du forum Aller à la recherche dans le forum
Logo Khaganat
Menu principal

Derniers messages

Dernier message par YannK - 17 Août 2022 à 10:29:42
Cliquez pour afficher le message
Citation de: Zatalyz le 17 Août 2022 à 09:29:58
La première chose qui m'aiderait, c'est que vous me pointiez des forums où vous êtes actifs. Rien que de pouvoir voir leur ergonomie sera déjà utile. Si, en plus, vous pouvez analyser vos usages, voir ce qui fait que votre participation est fluide, ce qui vous plait, c'est encore mieux. À ce stade, c'est pour moi le plus important.
Pour moi, le plus important, c'est que la fonction « Voir les messages non lus depuis la dernière fois» fonctionne correctement :)

Citation
- Traduction française : plein de choix de termes qui sont foireux ("soumettre" plutôt que "poster", "réponse" au lieu de "répondre"...)
OK avec ça

Citation
- Enlever la réponse rapide. Nous ne sommes pas sur un chat, le but est justement d'être moins dans l'immédiateté.
- Smiley : va nécessiter un plugin... pas possible dans l'admin d'assigner des raccourcis à des smileys, de configurer leur titre et alt. Bon point : les alt sont renseignés. Question : sont-ils lisibles ? Par ailleurs, je préfèrerais un bouton pour déplier la liste de smiley, pouvoir les organiser en catégorie, en ajouter, etc... Oui le smiley est vital sur forum !
OK avec ça

Citation
Menu et global :
- Lien vers les messages non lus. Configurer pour que lors de la création du compte, tous les messages soient lus (oui c'est bête mais...). 
- Ajouter aussi un bouton "messages des dernières 24h" ? Probable que ce soit redondant et moins utile, pourtant je m'en sers plus que les non-lus sur le forum de ryzom.
OK avec ces deux propositions

Citation
- Lien vers flux RSS facile à trouver. À noter qu'il existe un plugin pour s'abonner spécifiquement à un/des sous-forum via RSS : cela vous semblerais utile ou de toute façon ce sera du "tout suivi" ?
Je ne sais pas trop, je n'utilise pas tant le RSS que ça

Citation
- Améliorer la visibilité de l'option "s'abonner au forum" (=> notification de tout nouveau message par mail).  Ajouter l'option pour le faire sur l'ensemble du forum, sans cliquer dans chaque sous-forum...
Ce serait pratique, mais pas essentiel selon moi

Citation
- "Rechercher" est redondant (deux boutons). Champ en haut => rapide mais n'affiche pas les options. Bouton plus bas => lien vers les options. Garder celui-ci, je crois...
Oui, un seul endroit me semble mieux

Citation
- Séparer les colonnes "réponse" et "vues". Je ne sais pourquoi, mais ça passe mieux. Cependant, le nombre de vue me semble une donnée vraiment inutile sauf pour l'ego...
C'est parfois utile de savoir si une éventuelle absence de réponse est dû à une non lecture par manque de vues.

Citation
- "Démarré par" : Alléger un max, "Par" suffit amplement, voir juste le pseudo.
- L'en-tête des colonnes doit être clairement séparé de la liste des messages (fond de couleur par exemple)
Pas trop d'opinion là-dessus, il faudra voir en réel ce que ça donnera

Citation
- Si il y a du nouveau : peut-être juste mettre le titre en gras ; l'icone "nouveau" a un coté assez lourd.
Personnellement j'aime bien la présence de l'icône, elle aide à bien voir.

Citation
- Séparer la colonne "messages" et "sujets". "Sujets" doit être en premier
- En-tête des colonnes avec "Sujets, message, dernière réponse" ; ces infos n'ont rien à faire sur les lignes (c'est hyper redondant).
- Dernier message : $titre par $répondant, (retour ligne) $date $heure. Uniquement le titre cliquable. Mieux, toute la zone est un lien cliquable vers la réponse.
Là aussi, à voir ce que ça donnera à l'usage

Citation
- Par défaut, abonnement et notification mail à toute réponse à un sujet où on a participé. Chacun peut aussi régler ça chez soi ensuite.
Je suis aussi pour cette option

Citation
- Les icones de "nouveau messages" restent-elles allumées après qu'on aie vue le message ? Ça hélas on va le découvrir après migration, j'ai du mal à reproduire le bug.
OK, à voir en effet, c'est important :)
Dernier message par Zatalyz - 17 Août 2022 à 09:29:58
Cliquez pour afficher le message
Il y a déjà deux ans, nous avions pris conscience que le forum actuel, dans son ergonomie, ne favorisait pas les échanges. Cette marche d'entrée rebutait suffisamment pour expliquer qu'il aie été si peu utilisé après le passage à SMF. Je sais que les usages évoluent aussi, pourtant je reste persuadée qu'un forum peu être vivant à condition d'être un lieu agréable.

Pour corriger ça, je me lance enfin dans sa réfection. Et je vais aussi avoir besoin de vos retours, afin d'améliorer au mieux les choses.

La première chose qui m'aiderait, c'est que vous me pointiez des forums où vous êtes actifs. Rien que de pouvoir voir leur ergonomie sera déjà utile. Si, en plus, vous pouvez analyser vos usages, voir ce qui fait que votre participation est fluide, ce qui vous plait, c'est encore mieux. À ce stade, c'est pour moi le plus important.

La seconde chose, c'est de bosser sur la liste des choses à changer par rapport au thème de base de SMF. Pas celui du forum, déjà un peu bidouillé, mais ce qu'on peut voir ici : https://www.simplemachines.org/community/index.php

Le reste de ce message concerne mes premières notes, qu'il est possible de discuter bien sûr.

À noter que le nouveau thème de SMF est responsive par défaut ; je vais tenter de ne pas casser ça. Et il semble plus accessible aussi, mais il faudra vérifier dans les coins. Quoi qu'il arrive, à terme le thème pour Khaganat sera responsive et accessible (autant que possible), cela fait partie des points importants.

Points génériques à modifier
- Traduction française : plein de choix de termes qui sont foireux ("soumettre" plutôt que "poster", "réponse" au lieu de "répondre"...)

Concernant les sujets :
- Enlever la réponse rapide. Nous ne sommes pas sur un chat, le but est justement d'être moins dans l'immédiateté.
- Smiley : va nécessiter un plugin... pas possible dans l'admin d'assigner des raccourcis à des smileys, de configurer leur titre et alt. Bon point : les alt sont renseignés. Question : sont-ils lisibles ? Par ailleurs, je préfèrerais un bouton pour déplier la liste de smiley, pouvoir les organiser en catégorie, en ajouter, etc... Oui le smiley est vital sur forum !

Menu et global :
- Lien vers les messages non lus. Configurer pour que lors de la création du compte, tous les messages soient lus (oui c'est bête mais...). 
- Ajouter aussi un bouton "messages des dernières 24h" ? Probable que ce soit redondant et moins utile, pourtant je m'en sers plus que les non-lus sur le forum de ryzom.
- Lien vers flux RSS facile à trouver. À noter qu'il existe un plugin pour s'abonner spécifiquement à un/des sous-forum via RSS : cela vous semblerais utile ou de toute façon ce sera du "tout suivi" ?
- Améliorer la visibilité de l'option "s'abonner au forum" (=> notification de tout nouveau message par mail).  Ajouter l'option pour le faire sur l'ensemble du forum, sans cliquer dans chaque sous-forum...
- "Rechercher" est redondant (deux boutons). Champ en haut => rapide mais n'affiche pas les options. Bouton plus bas => lien vers les options. Garder celui-ci, je crois...

Liste des sujets :
- Séparer les colonnes "réponse" et "vues". Je ne sais pourquoi, mais ça passe mieux. Cependant, le nombre de vue me semble une donnée vraiment inutile sauf pour l'ego...
- "Démarré par" : Alléger un max, "Par" suffit amplement, voir juste le pseudo.
- L'en-tête des colonnes doit être clairement séparé de la liste des messages (fond de couleur par exemple)
- Si il y a du nouveau : peut-être juste mettre le titre en gras ; l'icone "nouveau" a un coté assez lourd.

Forum et sous-forum
- Séparer la colonne "messages" et "sujets". "Sujets" doit être en premier
- En-tête des colonnes avec "Sujets, message, dernière réponse" ; ces infos n'ont rien à faire sur les lignes (c'est hyper redondant).
- Dernier message : $titre par $répondant, (retour ligne) $date $heure. Uniquement le titre cliquable. Mieux, toute la zone est un lien cliquable vers la réponse.

Détail de configuration (côté admin pour le truc par défaut) :
- Par défaut, abonnement et notification mail à toute réponse à un sujet où on a participé. Chacun peut aussi régler ça chez soi ensuite.

Bugs à vérifier :
- Les icones de "nouveau messages" restent-elles allumées après qu'on aie vue le message ? Ça hélas on va le découvrir après migration, j'ai du mal à reproduire le bug.
Dernier message par YannK - 25 Avril 2022 à 21:32:02
Cliquez pour afficher le message
Faisant suite à mon message d'hier sur l'architecture des services, j'ai mis au propre une proposition des exécutables sur lesquels nous devront nous pencher, et les dépôts Git qui y sont liés. Une partie de ces derniers seront communs, via des addons Godot qui permettront de partager les données entre les différents projets. Certains existent déjà, d'autres pas encore.



J'ai rassemblé les différents exécutables serveur sous un seul terme, « Ensemble serveur ».

Le « Khréateur » désigne ce qui servira aux level designers d'ajouter du contenu en jeu, de préparer les éléments, objets, missions, textes et cartes qui seront ensuite envoyés sur le serveur pour y être instanciés.

« L'oeil de la reine » servira à intervenir en direct sur le contenu en jeu : mise en place d'événements temporaires, action directe sur certaines données de jeu, modération en temps réel... Il pourrait même intégrer des caméras IG qui retransmettent des endroits.

Le client 3D est le premier à être envisagé, permettant de parcourir le Khanat en 3D.

Là encore, c'est une proposition qui est là pour être discutée, retravaillée etc. et mon svg est dispo pour celles qui veulent le reprendre.
Dernier message par YannK - 24 Avril 2022 à 22:31:12
Cliquez pour afficher le message
Ça fait un petit moment que je réfléchis à ce que l'on devrait mettre en place comme infrastructure technique et je me suis décidé à mettre ça un peu au propre. Si vous y voyez de très fortes inspirations d'OpenNeL, c'est normal, c'est basé dessus dans ses concepts. Par ailleurs, je trouve chouette d'essayer de garder au max leurs termes, pour rendre hommage à leur boulot qui demeure une source énorme d'inspiration pour Khaganat.

J'ai essayé de voir ce qui nous serait nécessaire à terme et de penser en modules qui pourraient eux-mêmes ensuite être découpés de nouveau, voire répartis sur plusieurs machines (dans ce cas il faudrait y ajouter de nouveaux gestion de load-balancing et de cohésion de la structure, mais on en est pas encore là).

J'ai donc fait un petit schéma simplifié pour vous proposer une base d'architecture et commencer à poser le vocabulaire (histoire de savoir de quoi on parle et ce qu'on met dans chaque terme). L'idée est aussi qu'on ait quelques billes en tête quand Godot 4 sera sorti et qu'on pourra vraiment commencer à implémenter le client de démo non multijoueur. On a intérêt à anticiper pour ne pas avoir à tout refaire pour le moment où on introduira le multijoueur. En sachant comment les services s'articuleront, on peut déjà commencer à bosser nos modules/classes et méthodes pour que leur déport soit ensuite facilité.



Il n'y a rien de révolutionnaire, c'est une structure épurée de ce que proposait le NeL, qui devrait nous offrir tout ce dont on aura besoin à moyen terme, sans gêner la montée en charge. Je ne sais pas encore ce que ça représenterait en terme d'exécutables à générer et/ou de machines à envisager pour le moment. Il me semble que se mettre d'accord sur ce qu'on va bâtir est un préalable avant de voir comment tout ça pourrait se générer via Godot.

Pour le client du milestone 0.1, on n'aurait qu'à se soucier de quelques classes et méthodes de l'Entity Game Service et du Global Position Manager Service, en gros.

Pour celles qui veulent, je peux partager mon .svg si vous voulez jouer avec  :)

Et pour celles qui veulent avoir quelques billes sur ce qu'on avait trouvé dans OpenNeL :
- https://khaganat.net/wikhan/fr:serveur_tour
- https://khaganat.net/wikhan/fr:commandes_serveur_ai_share
- https://khaganat.net/wikhan/fr:commandes_egs

Dernier message par Zatalyz - 24 Avril 2022 à 16:21:32
Cliquez pour afficher le message
Godot 4 voit arriver la gestion du réseau. Parallèlement à ça, une chaine vidéo développe la mise en place d'un réseau pour MMORPG basé sur Godot : https://www.youtube.com/playlist?list=PLZ-54sd-DMAKU8Neo5KsVmq8KtoDkfi4s.

Cette après-midi, ce qui existe a été discuté, je laisse le log ici pour les recherches et archives.

Spoiler for Hiden:
<YannK> J'ai découvert une super série d'un gars sur YT qui fait une suite de vidéos sur les techniques pour créer un MMORPG avec Godot, avec toutes els problématiques serveur (gateway, échnages sécurisés, déplacement de certains services sur le serveur pour éviter els exploits etc. etc.) : https://www.youtube.com/playlist?list=PLZ-54sd-DMAKU8Neo5KsVmq8KtoDkfi4s 
<YannK> C'est à la fois très précis niveau implémentation, mais il explique aussi les questions de façon un peu théorique pour qu'on comprenne les raisons de ses choix. 
<YannK> Je n'ai pas fini de regarder, mais jusque là j'ai trouvé ça de très très bonne qualité :) 
<YannK> Et du coup, j'y ai appris qu'un serveur seul sous Godot ne peut pas gérer plus de 4095 connections en même temps ^^ 
<YannK> Et il parle donc des méthodes pour ne pas avoir son architecture limitée par cette contrainte 
<Link Mauve> C'est dû à quoi ? 
<YannK> La contrainte des 4095 ? 
<‎Link Mauve>: Oui. 
<YannK> Hard codé dans Godot, mais je ne sais pas pourquoi 
<YannK> Mais de toute façon, on arrive à des goulots bien avant à d'autres niveaux :) 
<YannK> Tycho, si jamais tu as un jour l'envie de regarder cette série, j'aimerais bien ton avis sur son approche de la sécurité car il semble prendre ça très au sérieux :) 
<Tycho> oh god, il y a tellement de contenu... 
<YannK> Ah mais carrément, je trouve que c'est une des meilleurs chaines Godot que j'ai trouvées, avec GDQuest 
<Tycho> bon, je commence à regarder vite fait 
<Tycho> je pense faire mes remarques au fur et à mesure 
<Tycho> déjà je ne regarde pas tout, juste els vidéo qui causent de sécu 
<Tycho> donc je commance avec « Godot Multiplayer - Player Authentication | Godot Dedicated Server #3 » 
<Tycho> à 4:40, il parle de filtrage d'IP afin de ne pas totalement exposer le serveur d'auth : c'est OK, mais perso je pousserai plus loin en regroupant tous les serveurs dans un réseau privé et donc le serveur d'auth ne serait que dans ce réseau local, pas du tout sur internet 
<Tycho> et je précise que disposer d'un filtrage par IP alors que l'on est dans le réseau privé peut rester une bonne idée suivant la sensibilité des données 
<Tycho> ça ne coûte pas plus cher et ça augmente la sécurité, alors go 
<Tycho> à 5:14, il parle d'un token : alors ça se fait et c'est un choix respectable 
<Tycho> après, il y a également d'autres méthodes qui sont également cool 
<Tycho> le choix de la solution va surtout dépendre ses caractéristiques et des contraintes que l'on a 
<Tycho> je ne sais pas si c'est adapté à un MMORPG, mais un biscuit ( https://www.biscuitsec.org/ ) c'est super cool 
<Tycho> genre c'est adapté dans le sens où ça aide énormément à scale la solution, après le seul point qui m'inquiète c'est la taille du biscuit qui devra être transmis sur le réseau 
<YannK> Super, merci Tycho de ces retours. pourrais-tu juste mettre un tag genre #godotmultiplayerGDCtutorial comme ça je pourrais ensuite compiler tout ça à la fin ? 
<Tycho> punaise, j'ai vraiment l'impression qu'il stock le mot de passe en clair 
<Tycho> NE JAMAIS FAIRE ÇA 
<Tycho> j'ai pas mal attendu afin de voir si c'était temporaire et qu'il allait corriger 
<Tycho> ça n'a pas l'air d'être le cas 
<Tycho> et bien entendu, la comparaison du mot de passe est faite avec ==, ce qui est totalement sensible à une timing attack 
<Tycho> pareil pour le check de l'existence du client, ce qui est fun car il explique pourquoi il ne faut pas laisser savoir si c'est le login ou le mot de passe qui est mauvais 
<Tycho> mais bon, c'est moins grave 
<Tycho> allez, je passe direct à « Network Token Verification | Godot Dedicated Server #6 » 
<Tycho> bon, sa génération de token est pourave 
<Tycho> 32 bits d'entropie c'est pas assez 
<Tycho> bon, vu qu'il y a un timestamp ça passe, mais du peu que j'ai vu du code ça a l'air potentiellement foireux 
<Tycho> sérieusement mec, faut 128 bits d'entropie pour un truc unique et fiable 
<Tycho> puis le SHA-256 sert à quedal là 
<YannK> Sur le stockage du mot de passe en clair, il explique que c'est mal et pourquoi et ensuite il a une vidéo sur le hash et le salt 
<Tycho> ha ok, faudra que je regarde ça alors 
<Tycho> punaise, le timestamp qui à l'air sujet au bug de 2038 https://en.wikipedia.org/wiki/Year_2038_problem 
<YannK> Ses titres sont assez explicites, du coup tu vois comment il développe peu à peu les concepts 
<Tycho> rectification : ça semble dépendre d el'implem de l'OS, donc ça doti passer 
<Tycho> franchement, la génération du token c'est mauvais 
<Tycho> il prend 32 bits, qu'il hash afin d'ateindre une longueur de 256 bits (mais qui ne dispose toujours que de 32 bits d'entropie) qu'il va représenter sur 64 caractères donc 512 bits 
<Tycho> bref, prendre 128 bits d'aléat et les représenter en hexa divise la longueur de la première partie du token par 2 et en améliore considérablement la sécurité 
<Tycho> à noter que ça ne sert à rien de prendre plus de 128 bits d'entropie 
<Tycho> c'est juste de la perte de ressources 
<Tycho> fun fact : sa fonction de purge des tokens expirés pourrait etre plus performante 
<Tycho> supprimer 1 par 1 chaque token est pourri car sa liste est de base ordonnée (et s'il veut il peut s'en assurer de manière plus fiable), donc il suffit qu'il repère le token valide le plus vieux et qu'il supprime tous ceux qui sont situés avant dans la liste 
<Tycho> et du coup regarder la liste par le début ou par la fin se calcule en fonction des usage, faut monitorer et faire des stats afin de savoir lequel des 2 modes est le plus efficient (pareil pour la fréquence de purge d'ailleurs) 
<‎pep.>: TIL biscuit 
<Tycho> ouais, un biscuit (ainsi que d'autres technos telles qu'un HMAC, JWT, etc) permettrait d'éviter la boucle qu'il fait pour attendre l'éventuel retard de réception du token par le serveur de jeu 
<Tycho> OMFG 
<Tycho> la jolie faille :p 
<Tycho> je reprend la vidéo après avoir mangé et soudainement, en regardant sa boucle, ça me saute aux yeux 
<Tycho> while OS.get_unix_time() - int(token.right(64)) <= 30 
<Tycho> vous l'avez ? :) 
<Tycho> token.right(64) ← il utilise une donnée non-authentifiée provenant de l'utilisateur dans un calcul 
<Tycho> un token forgé dans lequel on met tout au max et sa boucle ne s'arretera jamais 
<Tycho> enfin théoriquement si, mais vu la durée le serveur sera fermé/reboot/whatever bien avant que ça ne s'arrete 
<Tycho> lui qui est parano au sujet des DOS causés par des connexions trop longues, il a oublié cet aspect là ^^ 
<Tycho> au passage, je me demande ce qu'il se passe si le token est plus court que prévu et que du coup il n'y a pas la longueur nécessaire pour juste le timestamp 
<YannK> Je crois qu'il fait un tru ensuite contre cet exploit justement, Tycho 
<Tycho> sinon, vu que le token est détruit, je confirme que ça peut totalement être remplacé par un mécanisme de HMAC qui est moins sujet à ce genre de problèmes, faut juste prévoir une rotation des clés une fois de temps en temps (par exemple, sur EvE online il y a 1 reboot chaque jour, c'est le moment idéal pour changer la clé) 
<YannK> Comme il tente de faire des vidéos pas trop longue, il implémente un concept à la fois, donc des fois il laisse les choses un peu "en l'état", mais il l'expliquait je ne sais plus quand 
<Tycho> YannK: exact, il en parle 
<Tycho> j'avais juste pas atteint l'endroit 
<Tycho> c'est dans la même vidéo, mais un peu plus loin 
<YannK> ouf, ça va alors :) 
<YannK> Comme ile me paraissait sérieux, j'ai eu peur qu'il ait laissé un éléphant dans la pièce ^^ 
<YannK> (ce qui aurait hypothéqué le sérieux de l'ensemble je trouve) 
<Tycho> ya encore la génération du token qui est pourrie 
<Tycho> et j'ai pas encore vu sa correction sur le stockage du mot de passe 
<YannK> Disons que ce qui m'intéresse aussi, c'est la logique générale, si elle te semble sérieuse et cohérente. Les méthodes utilisées pour implémnter la logique m'inquiètent moins car ça peut toujours s'améliorer, comme tu le propose juste en regardant rapidement, déjà :) 
<Tycho> je suis quand même déçu qu'il fasse le test en conservant sa fonction vulnérable à une modification du token 
<Tycho> allez hop, go « DTLS Encryption with SSL Certificates | Godot Dedicated Server #7 » 
<Tycho> oula, j'aime pas le début 
<Tycho> OMFG 
<Tycho> un certif auto-signé 
<Tycho> désolé mais c'est merdique 
<Tycho> NE PAS LIER LA GÉNÉRATION DU CERTIFICAT AU SERVEUR 
<Tycho> on fait ça à coté 
<Tycho> punaise c'est de la torture cette vidéo de création de certif auto-signé 
<Tycho> puis RSA bien entendu, c'est pas mauvais mais c'est pas le plus optimal 
<Tycho> et puis RSA 4096, genre le mec crois que parce que 4096 est supérieur à 2048 c'est forcément mieux (pas trop, ça prend juste plus de ressources) 
<Tycho> ha, il cause enfin de la différence entre un vrai certif et une bouze auto-signée 
<Link Mauve> (Beaucoup plus de ressources.)
<Tycho> le mec qui dit qu'un certif bien signé ça coûte du fric... 
<Tycho> dans une vidéo de 2020, donc quand let's encrypt existe déjà 
<Tycho> et fournit des certif gratos et qu'en plus c'est automatisable 
<Tycho> je me pose des questions sur l'utilisation de DTLS au lieux de TLS 
<Tycho> vu qu'il ne chiffre que les communications qui ne sont pas critiques (donc en UDP ou similaire), il n'en met que sur les connexions qui peuvent se permettre d'etre en TCP et donc TLS 
<Tycho> peut-etre que c'est une limitation de godot 
<Zatalyz> Tycho, tu es OK pour que je mette tout ça sur le forum par la suite ? ça facilitera pour retrouver les infos :) 
<Tycho> Zatalyz: yep ! 
<Tycho> bon, ya pas de véritable config de DTLS, du coup faut faire confiance à godot 
<Tycho> allez, je passe rapidement sur « Create New Account Function | Godot Dedicated Server #8 » 
<Tycho> a priori ya pas grand chose d'intéressant mais au cas où je regarde à certains moments 
<YannK> C'était surtout l'architecture de connexion sur laquelle j'avais envie d'avoir tes retours, mais si tu es curieux du reste, fais toi plaisir ^^ 
<YannK> Et du coup tu penses qu'on devrait mettre en place avec un certificat Let'sEncrypt dès le départ ? 
<Tycho> allez hop, go sur « Salting and Hashing Passwords | Godot Dedicated Server #9 » 
<‎Link Mauve> YannK, oui, ça ne coûte rien de plus que de l'utiliser pour un site ou quoi. 
<Deed>: humm, je vais peut-être dire une bêtise mais je ferai une connexion en "ssh" avec une clé pour la connexion client - serveur 
<Tycho> YannK: perso j'utiliserai vraiment un token client signé avec un HMAC plutot que de transférer le token au serveur de jeu, mais sa solution reste correcte, modulo la génération de la partie aléatoire 
<Tycho> bon, génération du sel pour le hachage de mot de passe : même erreur 
<Tycho> sérieux, c'est quoi la facination morbude des devs pour les fonctions de hachage ? 
<Tycho> OH SHIT 
<Tycho> sa fonction de hachage maison est, sans surprise, totalement pourrie 
<Tycho> après, comme il l'a expliqué avant, les vraies fonctions de hachage ne sont pas implémentées de base 
<Tycho> le mec ose comparer sa méthode à la con à bcrypt, ça me tue 
<Tycho> rien que sa manière d'intégrer le sel est mauvaise 
YannK imagine Tycho en train de faire des bonds sur sa chaise :D 
<Tycho> et du coup ya une autre failel de sécurité qu'il n'a pas vu venir : un utilisateur qui balance un mot de passe volontairement erronné mais absolument énorme (plusieurs milliers de caractères) 
<Tycho> sans limite haute, sa fonction de hachage va prendre un temps monstrueux 
<Tycho> sérieusement, réimplémenter PBKDF2 c'est pas bien compliqué vu qu'il a déjà les fonctions de hash qui vont bien (et sans doute un HMAC) 
<Tycho> en plus (comme PBKDF2), ya juste une protection sur le temps, yen a pas sur l'utilisation de la mémoire 
<Tycho> YannK: si tu as la doc du langage python-like qu'il utilise ça m'intéresse 
<YannK> https://docs.godotengine.org ^^ 
<Tycho> merci 
<Tycho> grrrrrr, il compare les hash direct avec ==, c'est pas bien >.< 
<Tycho> bon, il y a les HMAC de base, c'est cool 
<Tycho> sérieux, il aurait pu au moins utiliser ça 
<Tycho> tiens, ya un constant_time_compare donc, dès qu'on touche à de la crypto, faut l'utiliser au lieux de == 
<Tycho> au passage, la partie crypto dispose aussi d'un generate_random_bytes, ce qui semble bien mieux que ses truc d'int random 
<Tycho> bon, du coup je vais m'arreter là je pense 
<Tycho> YannK: du coup, tu penses utiliser son système en corrigeant les soucis ou bien passer sur ma méthode à base de HMAC ? 
<YannK> Je te fais confiance pour les meilleurs choix à faire en terme de sécurité :)
On en est très loin de faire le système, mais de savoir qu'on peut faire un truc très propre en restant dans Godot pour tous les éléments me plait bien. Si tu n'y vois rien de réellement problématique dans l'infra proposée et les seules problématiques comme étant améliorables à un niveau acceptable, ça me va parfaitement :) 
<YannK> Je compilerai tes remarques sur HMAC et Let's Encrypt en particulier pour lui faire un retour :) 
<Zatalyz> L'idée est plus de voir quelle architecture sera correcte pour tout ça 
<YannK> C'est ça, si on peut avoir un seul environnemùent de développement avec des fonctions intégrées qui se complètent, j'aime bien :) 
<Zatalyz> là, il semble y avoir des bases desquelles partir, modulo plus d'attention à certains aspects de sécurité (genre le choix des librairies, si j'ai compris, mais pas que) 
<YannK> Surtout que Godot a bossé sur cette partie pour la 4.0 
<Zatalyz> plus le temps passe et moins vous gardez de trucs du Nel par contre. Bon, ok, sur la partie sécu c'est aussi bien, mais... 
<Deed‎> j'allais le dire Godot 4 a bien bosser ce côté 
<Tycho> en totu cas godot n'a pas l'air d'avoir intégré de fonction de hachage de mots de passe :/ 
Zatalyz se demande si un jour elle verras le MMORPG :P 
<YannK> C'est à dire qu'on a un dev qui bosse sur Godot, là contre 0 qui étudient NeL, donc je préfère aller par là ;) 
<YannK> (l'article sur le Multiplayer dans Godot 4 : https://godotengine.org/article/multiplayer-changes-godot-4-0-report-3
<Deed‎> Zatalyz: on s'appuie sur NeL pour l'exemple quand même 
<YannK> Tout à fait Deed, je suis d'ailleurs en train de réfléchir à la façon dont on pourrait se baser sur les datasheets en XML pour penser une achitecture des données dans Godot :) 
<Zatalyz> oui   
<YannK> Tycho, dans l'article, il y a un exemple de code avec une méthode appelée dtls_server_setup ça te plaît ? ^^ 
<Tycho> YannK: quel article ? 
<YannK> Celui que je viens de partager :) 
<Tycho> ha, vu 
<Tycho> je regarde 
<Tycho> nope, ça load juste la clé privée et le certif 
<Tycho> confirmé : https://docs.godotengine.org/en/latest/classes/class_enetconnection.html#class-enetconnection-method-dtls-server-setup 
<Zatalyz> Le souci c'est le manque de monde. Chaque chose qu'on recode autrement demande du travail (sans parler de tout le reste : penser au gameplay, au gamedesign, au monde, etc). Donc attention, la priorité doit vraiment être d'avoir un bout de démo qui fasse envie. Il faut laisser de côté toutes les fonctionnalités secondaires pour éviter de perdre du temps dessus. Et le réseau, c'est un gros bout, donc je préfère vraiment qu'on s'y attaque quand il y aura du monde (ou alors si quelqu'un n'est motivé que par ça), mais qu'avant on est un bout de carte joli où se balader (même si on ne fait pas grand chose de plus) 
<YannK> Ah oui. Ça n'a rien à voir avec le premier client sur lequel on bosse, Zatalyz :) 
<Zatalyz> oui oui, je sais, mais je préfère bien enfoncer le clou :P 
<YannK> C'est juste pour savoir si on sera coincé par Godot à un moment ou pas. Et là il semblerait qu'on puisser petit à petit développer tout ce dont on aura besoin dedans, sans devoir chercher de quoi le compléter 
<Zatalyz> Oui, moins on a besoin de recoder des bloc, mieux c'est aussi; 
<Zatalyz> là, de ce que dit Tycho (tu me corrige si j'ai mal compris), il y aurait des blocs à coder pour utiliser des librairies de crypto correctes  ; mais, sachant ça, on peut y remonter à godot, les orienter vers les bonnes solutions, et espérer que d'ici à ce qu'on bosse sur le réseau, ça soit implémenté 
<YannK> Il y a plein de parties dans le NeL qui sont des outils que Godot intègre nativement, donc si ils conviennent, autant prendre els fonctions les plus haut-level du NeL et els réimplémenter dans Godot proprement plutôt que de chercher à bidouiller en connectant ce qu'on peut à un NeL boiteux 
<Zatalyz> oui 
<Tycho> Zatalyz: pour le token d'auth basé sur un HMAC c'est simple à faire car godot intègre ce qu'il faut, je peux meme contribuer 

Ça continue de discuter, l'idéal sera d'éditer et caler la suite de la discussion ici une fois que ça sera fini :)
Dernier message par Zatalyz - 19 Janvier 2021 à 13:50:01
Cliquez pour afficher le message
J'ai réparé un bug d'envoi de mail, ce qui a révélé des bugs dans le Kloud.

C'est un sacré travail d'y réparer, et dans l'absolu avec Deed on aimerait migrer ça sur le nouveau service Numenaute, donc ça m'embête de passer 3 jours à réparer le Kloud, puis une semaine à paramétrer la Soute et 2 jours encore à transférer le Kloud dans la Soute. Alors je vais réduire un peu en évitant la première étape.

Le plan d'action que je propose :
1) On laisse le cron du kloud de khaganat éteint, et ses erreurs etc. Cela veut dire que le Kloud n'est pas entièrement fonctionnel pour le moment ! Mais vu l'activité je ne pense pas que ça sera gênant.
2) Sur la Soute :
  - On traque les erreurs restantes. Je ne veux ni error, ni warning.
  - On paramètre pour avoir plusieurs noms de domaines sur la même instance ET un thème par nom de domaine (cf https://help.nextcloud.com/t/howto-individual-themes-per-domain/27585 ). C'est faisable, reste à le faire...
  - On regarde si on ne peux pas transférer les users, voir les partages (j'ai un doute sur ça...)
3) On transfère les données du Kloud vers la Soute ; j'ai les commandes qui vont bien pour ça, ça ne devrait pas être long.

Dernier message par SIELA1915 - 07 Décembre 2020 à 10:53:31
Cliquez pour afficher le message
D'ailleurs la coordonnée Z de "surface" des ponts est sur le pont est pas dans la zone en dessous. En spawnant des objets (par exemple un feu de camp) sous un pont, le moteur de jeu va chercher la surface et le feu va apparaitre sur le pont et pas en dessous. Pareil pour le personnage, si on se reconnecte (ou se téléporte), le Z est recalculé pour la position, donc si on s'est déconnecté sous un pont, on réapparaitra sur le pont. Ou si une zone de téléportation intersecte avec une falaise par exemple, on se retrouva des fois en haut de la falaise au lieu d'à coté du téléporteur.
Dernier message par YannK - 04 Décembre 2020 à 21:08:02
Cliquez pour afficher le message
Je pense que tu as rassemblé tout ce qu'on avait pu trouver. Sans accès aux sources des cartes où les hacks ont été mis en place, on n'en saura pas plus, malheureusement.

Je crois que le baking des maps par le pipeline fait que pour chaque position XY, le serveur calcule les points XY auxquels on peut accéder, avec un Z de positionnement visuel. Mais si le baking calcule la pente pour bloquer un passage (si elle est trop forte), cela ne veut pas dire qu'il tient compte du Z pour recréer l'espace en 3D pour le jeu en production. Là les maps se contentent de dire, pour les collisions si le XY vers lequel on veut aller est accessible depuis le XY où on est. Et ensuite le placement est Z est donné pour un placement visuel. Mais en aucun cas on n'est réellement dans du XYZ, on est juste sur du XY, qui est posé sur un modèle en 3D qui comporte du Z visuel, au moins au niveau des collisions.

Je ne sais pas si je suis clair, je pourrai en reparler sur le chat si besoin, mais en plus c'est un peu flou dans ma tête, ça commence à dater.
Dernier message par Zatalyz - 04 Décembre 2020 à 18:44:14
Cliquez pour afficher le message
L'axe Z, qui sert en principe à placer la hauteur des objets, a un fonctionnement assez particulier sur ce moteur. Si j'ai à peu près suivi (et je rappelle que je ne suis pas dev, donc il va falloir vérifier), le serveur envoie des coordonnées X,Y, Z : les deux premières ne sont pas très complexes, ça place les objets sur la carte. Le Z, par contre... Attention !

Aleajactaest travaille sur la récupération de ces coordonnées pour les échanges clients/serveurs et sans grande surprise, cet axe Z se conduit d'une façon peu intuitive. Je recopie ses messages.

Citation de: Aleajactaest
Voici les deux codes incriminés. Le code côté Envoi de la position (coté client) - (j'ai viré du code pour simplifier)

// khanat-opennel-code/code/ryzom/common/src/game_share/action_position.cpp:96
void CActionPosition::pack (NLMISC::CBitMemStream &message)
{
        // Get the right position, depending on the "relative" bit, and
        // scale precision from 1 mm to 16 mm and take only 16 lower bits (=> 1048 m range)
        uint32 pxy16;
        uint16 posx16, posy16, posz16;
        posx16 = (uint16)(Position[0] >> 4);
        posy16 = (uint16)(Position[1] >> 4);
        pxy16 = ((uint32)(posx16) << 16) | (uint32)posy16;
        posz16 = ((uint16)(Position[2] >> 4) + 2) & ((uint16)0xFFFC);
        if ( IsRelative )       posz16 |= (uint16)0x1;
        if ( Interior )         posz16 |= (uint16)0x2;

        message.serialAndLog1( pxy16 );
        message.serialAndLog1( posz16 );

Le code coté VisualProperties - (j'ai viré du code pour simplifié)

// khanat-opennel-code/code/ryzom/client/src/property_decoder.cpp:73
void    CPropertyDecoder::receive(TPacketNumber /* packetNumber */, CAction *action)
{
        if (action->Code == ACTION_POSITION_CODE)
        {
                CActionPosition                 *act = (CActionPosition *)(action);
                if ( act->IsRelative )
                {
                        act->Position[0] = (sint32)act->Position16[0];
                        act->Position[1] = (sint32)act->Position16[1];
                        act->Position[2] = (sint32)act->Position16[2];
                        _Entities[act->Slot].PosIsRelative = true;
                        _Entities[act->Slot].PosIsInterior = false;
                }
               else
                {
                        // Absolute position
                        decodeAbsPos2D( act->Position[0], act->Position[1], act->Position16[0], act->Position16[1] );
                        act->Position[2] = ((sint32)((sint16)act->Position16[2])) << 4;
                        if (act->Interior)
                                act->Position[2] += 2;
                        _Entities[act->Slot].PosIsRelative = false;
                        _Entities[act->Slot].PosIsInterior = act->Interior;
                }

et le résultat dans les captures

2020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/X 8868703
2020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Y -10595373
2020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Z 5724
2020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Heading -0.5890485644340515

2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/px 30005
2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/py 58685
2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/pz 66
2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/IsRelative False
2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/Interior True
2020/05/14 21:58:43 packet_1779 Server1 Client2 VisualProperty/Slot_184/Sint64/PROPERTY_ORIENTATION 3200265882

J'ai mis les données en bit, plus facile pour les comparaisons

2020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/X 00000000100001110101001101011111
2020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Y 11111111010111100101001111010011
2020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Z 00000000000000000001011001011100
2020/05/14 21:58:38 packet_1727 Client3 Server1 MsgXML/POSITION/Heading 10111110011101000101101110001100

2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/px 0111010100110101
2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/py 1110010100111101
2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/pz 0000000001000010
2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/IsRelative False
2020/05/14 21:58:39 packet_1739 Server1 Client2 VisualProperty/Slot_184/POSITION_CODE/Interior True
2020/05/14 21:58:43 packet_1779 Server1 Client2 VisualProperty/Slot_184/Sint64/PROPERTY_ORIENTATION 10111110110000000010111010011010

si on regarde plus finement on obtient :

X       : 00000000100001110101001101011111 => xxxxxxxxxxxx0111010100110101xxxx
Y       : 11111111010111100101001111010011 => xxxxxxxxxxxx1110010100111101xxxx
Z       : 00000000000000000001011001011100 ?? 0000000001000010
Heading : 10111110011101000101101110001100 ==10111110110000000010111010011010

bref, on retrouve une relation entre X, Y & Heading, par contre Z (même en ajoutant +2 , cela ne marche pas)

Sachant que Liria avait pas mal épluché le sujet, et me souvenant de longues conversations autour des ponts dans Ryzom, j'ai cherché dans les vieux logs et les archives. Mais je crains que ces conversations aient eu lieu en jeu ou même en direct, je n'ai pas retrouvé les détails en rapport avec ce qui surnageait dans ma mémoire.

Je vais essayer d'expliquer ce dont je me souviens, après je colle encore quelques logs en rapport, qui donnent les pistes... encore une fois, entre ma mémoire et mes connaissances fragmentaires, ce que je dis peut être totalement faux ! mais ça fait des pistes.

<liria> l'absence d'axe Z c'est surtout que tu ne peux superposer eux chemin  l'un au dessus de l'autre
<liria> sinon y 'a toujours une info Z qui est de où est le sol  pour la coordonée X,Y

Lors de la génération des cartes, un certain nombre de choses vont être calculés et être fixées à ce moment. Entre autre "où est le sol" afin que les personnages puissent y marcher. Je pense que le niveau 0 de l'axe Z n'est pas absolu, mais relatif, c'est à dire : c'est au niveau de la surface du sol. Le reste se positionne par rapport à ça. À noter d'ailleurs que les collisions sont une aberration au niveau de l'axe Z, elles sont au niveau de l'infini, ce qui ne simplifie pas le fait de "sauter par dessus une barrière". Donc, en principe dans Ryzom, impossible d'avoir un chemin qui passe au dessus d'un autre, comme une route sur et sous un pont : le seul endroit où le personnage peut marcher est le point "0". Pourtant il y a quelques ponts dans Ryzom. Si on a l'occasion d'analyser ces cartes (et je crois qu'elles ne sont pas dispo dans les assets libérés), on se rend compte qu'un pont de ce genre est en réalité constitué de deux zones, et qu'on passe des sortes de portails entre elles (c'est invisible en tant que joueur, mais y'a des "trucs" sur les cartes). Ça se rapproche de ce qu'on peut croiser dans des moteurs de jeux en géométrie non euclidienne, et c'est absolument pas intuitif à comprendre. C'était cependant pas si rare à l'époque (les années 2000), visiblement le moteur de Landes Éternelles a un truc similaire.

Il est possible que la variable "Interior" soit justement utilisé pour ces hacks, c'est même assez probable. Bref, en gros, lorsqu'on est "sur" le pont, on est dans une zone, "sous" le pont dans une autre, et elles ne se chevauchent pas même si on peut visuellement voir le perso qui se ballade au dessus/dessous.

Logs qui datent de y'a longtemps ! (2013)
<liria> Lyne en générant la carte d'une région tu spécifies aussi les zones inaccessibles non traversable
<Lyne> Donc toutes les limites de pontons sont intraversables, c'est ça ?
<liria> par exemple la rembarde  la falaise ou le bord du ponton...
<Lyne> D'accord
<liria> hum
<liria> d'un autre coté
<liria> on peut virer cette limite
<liria> sauf
<liria> que
<Lyne> Et je suppose qu'on ne peut pas les rendre traversable dans une seule direction ? *soupire*
<liria> vis à vis du mécanism du jeu
<liria> tu pourra aussi sortir de l'eau là
<liria> ce qui est moins logique
<Lyne> Sur un ponton, encore, s'il n'est pas trop haut, on peut se suspendre et faire un rétablissement. Sur une falaise....
<vaiatua> huhu
<liria> par défaut lors de la génération de la carte, il calcule le dénivellé entre deux points cote à cote et si la pente est torp forte
<liria> tu ne passe pas
<vaiatua> escalade rapide ^^
<Lyne> "par défaut", "pente trop forte"... On peut l'envisager avec une pente forte vers le bas ?
<liria> non lyne
<Lyne> Dommage....
<liria> le mécanisme te dessine les surface du sol ou tu peux alle
<liria> aller*
<liria> pas un sens de passage
<vaiatua> pour l'animation escalier : si elle était implantée : elle se déclencherait seule ? comment ça se passe ?
<liria> calculer la pente c'est juste pour aider à déterminer si ce point est dans la surface atteignable
<liria> mais au final il ne garde  que cette notion de surface atteignable

Osquallo a aussi travaillé sur le sujet, s'il passe, il sera le plus à même d'expliquer car il combine les connaissances du moteur de jeu et des mécanismes 3D.

L'axe Z est vraiment très particulier sur Nel. Baroque, même. Ça fait partie des trucs qui devaient avoir une bonne raison à l'époque, mais qui a créé des freins ensuite. Un des morceaux qui demanderait un dev au cœur bien accroché pour dépoussiérer la chose... et qu'on aie un axe Z qui fonctionne comme dans les jeux modernes. Cependant, ce n'est absolument pas trivial. Ce qui est souvent traduit par "une absence d'axe Z" dans les conversations ryzomiennes est une des choses qui marque le plus les joueurs de Ryzom, et comme certains d'entre eux sont dev, je suis certaine que tous ceux-là ont du regarder ça, puis repartir dans la foulée, effrayé. Il faut garder en tête que cela veut dire bidouiller des trucs qui touchent à la 3D, sujet épineux. Dans notre cas, vu qu'on part dans l'idée de virer l'actuel client 3D, il est possible que toucher à ce code soit un peu moins "gros" parce qu'on n'a pas besoin de toucher à la partie Nel... à voir.

Deed ajoute que ring/ark permet de superposer les choses, mais le fonctionnement de ces éléments est un peu différent, et on ne va pas trop s'embêter avec. Et de mémoire, on peut superposer les objets statiques (instanciés) qui ignorent les collisions, mais pas recréer des ponts/étages, où les objets mouvants (personnages, mobs) pourraient se déplacer.
Dernier message par alcyone - 05 Octobre 2020 à 21:40:56
Cliquez pour afficher le message
Pour ma part, je n'ai pas de préférence particulière.

Je prête juste particulièrement attention en vrac :

  • au côté responsive (pas vraiment testable sans installer) qui est la principale attente d'un changement de thème il me semble
  • à la licence bien sûr
  • aux appels externes style Google Font et autres joyeusetés.
Licences Mentions légales Accueil du site Contact Inclusion