Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- A la demande de Zatalyz, voici un petit résumé de ce que j'ai fait ces deux dernières semaines.
- # Python
- Après avoir bidouillé l'interface parce que j'ai travailler avec des jolies choses, Merci à
- Osquallo en passant, j'ai commencé à m'intéresser au script python de Tycho. J'avais déjà fait
- du Python avant mais c'était la première fois que j'utilisais un module. J'ai donc comme un idiot
- commencé par essayer de lancer chacun des scripts individuellement, avant de comprendre.
- J'ai ensuite écrit un petit script (test.py) qui me permettait de lancer celui de Tycho.
- ```python
- import simplelogin
- simplelogin.main()
- ```
- Qui se lance de la façon suivante
- ```sh
- $ python test.py -l balthazar -p ******* notepad
- ```
- ```
- ^
- Pour appeler pytjon
- ^ le fichier script
- ^ pour dire qu'on passe un login
- ^ le login
- ^ pour dire qu'on passe un mdp
- ^ mdp remplacé par des étoiles pour des raisons évidentes
- ^ L'application à lancer à la fin, (Pour l'instant ca ne
- m'a servit à rien mais le script le demande par défaut
- ```
- Lancer ce script tel quel sous Windows plante. En effet le module s'appuie sur un autre sous module
- nommé crypte qui n'existe que sur les plateforme de type Unix. En le remplacant par un autre module
- nommé passlib j'ai réussi à faire marcher le script. Comme leur fonctionnement est légèrement
- différent j'ai du ajuster une ligne de code en plus.
- J'ai créé une branche en local mais je ne peux pas push parce que c'est le repository de Tycho.
- En ajoutant quelques ligne de débogage sous la forme de print, on récupère les retours du serveur.
- Requête 1
- ```
- payload: {"cmd": "ask", "login": "balthazar"}
- link: https://lirria.khaganat.net/login/r2_login.php
- proxies: {}
- ctn: $6$DQcfqPgbZVm83Myk
- ```
- Requête 2
- ```
- payload: {"cmd": "login", "login": "balthazar", "password": "$6$DQcfqPgbZVm83Myk$xVCsqNLJhlOGaTWT8dkFc51itl3bUuLI3RD300mJsS7pyTtKow/Hzm9ESoIajzCXgo7z3Kt9KHfSfd1NMluS/0", "clientApplication": "Lirria", "cp": "2", "lg": "en"}
- link: https://lirria.khaganat.net/login/r2_login.php
- proxies: {}
- ctn: 2314A8C0|8AEB6052|000000F4#lirria.khaganat.net:47851#http://localhost:30000/ring/web_start.php#http://http://lirria.khaganat.net:40916/ring/
- 1#http://localhost:23001#http://lirria.khaganat.net/patch
- ```
- Le payload représente les données envoyés, sur le seveur. Le lien (link) est le lien du serveur, les proxys
- sont vides, parce que je n'en utilisait pas. Le ctn est la réponse texte du serveur. Le premier est le hash
- du username, et le second, est ce que je pense être les liens vers les différents serveurs/ sockets. Ce sera
- à verifier plus tard. Et surtout à Documenter :P
- # 2 Godot
- Comme je connaissais pas du tout Godot j'ai décidé de pas lire la documentation et d'y aller à
- l'arrache, logique, non ?
- J'ai donc cloné la branche d'osquallo et commencé à bidouiller encore une fois. Visiblement
- Godot fonctionne par un système d'event. Pour faire simple, plutôt que d'attendre qu'une fonction
- finisse de s'éxécuter par exemple une requête web, celle-ci s'exécute en arrière plan, et appelle
- une autre méthode quand elle à fini.
- J'ai modifié le script comme suit:
- ```python
- func _on_play_button_pressed():
- #emit_signal( "login_button_pressed" )
- do_request(get_node("h_box_container/v_box_container/margin_container/login_box/email_box/email_edit").get_text())
- func do_request(username):
- var headers = ["Content-Type: application/json"]
- $HTTPRequest.request("https://lirria.khaganat.net/login/r2_login.php?cmd=ask&login=" + username, headers, true, HTTPClient.METHOD_GET, "")
- func _on_HTTPRequest_request_completed(result, response_code, headers, body):
- var s = body.get_string_from_utf8().split(":")
- var ctn = s[1]
- print(ctn)
- ```
- J'ai commenté la ligne qui fait changer de page (le emit signal, appelle justement un des event)
- Et ensuite je lui ai demandé de faire une requête sur Lirria (la fonction do_request), et d'appeller _on_HTTPRequest_request_completed lorsqu'il a fini.
- La fonction do_request prend en paramètre un username. Pour le récupérer il faut aller chercher le champ texte correspondant. Osquallo ayant fait une arborescence, le lien vers ce champ texte
- ressemble à un chemin de fichier. On appelle la fonction get_text() sur ce champ qui nous retourne le nom d'utilisateur entré par le joueur. Il faudra vérifier si celui-ci n'est pas nul
- avant de lance l'appel.
- L'appel est une requête de methode GET avec deux paramètres, cmd & login. Cette requête renvoie un hash
- qui sert ensuite à salter le hash du mot de passe. Pour l'instant cela se passe en SHA-512,
- a l'orgine c'était en DES un autre algorithme beaucoup moins sûr. Mais d'une manière générale
- ce n'est pas une bonne solution non plus de passer par le SHA-512 et cela devrait être remplacé
- à terme. Pour l'instant Godot ne le gère pas, donc il faut attendre la prochaine version. Ou passer par GDNative et rendre les choses plus compliquées pour rendre le jeu crossplatform.
- Une fois la requête effectué le serveur renvoit quelque chose du genre 0:Erreur, ou 1:Hash,
- on remarquera que j'ai considéré que ce serait toujours positif, à terme il faudra aussi
- protéger ce champ.
- On coupe le string en utilisant les : et on récupère la deuxième partie, qui est sensée contenir
- le hash. Et ensuite on l'affiche. Il faudra après s'en servir pour chiffre le mdp, et relancer
- une autre requête comme celle du script python.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement