Advertisement
Guest User

Untitled

a guest
Oct 2nd, 2018
563
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.66 KB | None | 0 0
  1. A la demande de Zatalyz, voici un petit résumé de ce que j'ai fait ces deux dernières semaines.
  2.  
  3. # Python
  4.  
  5. Après avoir bidouillé l'interface parce que j'ai travailler avec des jolies choses, Merci à
  6. Osquallo en passant, j'ai commencé à m'intéresser au script python de Tycho. J'avais déjà fait
  7. du Python avant mais c'était la première fois que j'utilisais un module. J'ai donc comme un idiot
  8. commencé par essayer de lancer chacun des scripts individuellement, avant de comprendre.
  9.  
  10. J'ai ensuite écrit un petit script (test.py) qui me permettait de lancer celui de Tycho.
  11.  
  12. ```python
  13. import simplelogin
  14. simplelogin.main()
  15. ```
  16.  
  17. Qui se lance de la façon suivante
  18. ```sh
  19. $ python test.py -l balthazar -p ******* notepad
  20. ```
  21. ```
  22. ^
  23. Pour appeler pytjon
  24. ^ le fichier script
  25. ^ pour dire qu'on passe un login
  26. ^ le login
  27. ^ pour dire qu'on passe un mdp
  28. ^ mdp remplacé par des étoiles pour des raisons évidentes
  29. ^ L'application à lancer à la fin, (Pour l'instant ca ne
  30. m'a servit à rien mais le script le demande par défaut
  31.  
  32. ```
  33. Lancer ce script tel quel sous Windows plante. En effet le module s'appuie sur un autre sous module
  34. nommé crypte qui n'existe que sur les plateforme de type Unix. En le remplacant par un autre module
  35. nommé passlib j'ai réussi à faire marcher le script. Comme leur fonctionnement est légèrement
  36. différent j'ai du ajuster une ligne de code en plus.
  37. J'ai créé une branche en local mais je ne peux pas push parce que c'est le repository de Tycho.
  38.  
  39. En ajoutant quelques ligne de débogage sous la forme de print, on récupère les retours du serveur.
  40.  
  41. Requête 1
  42.  
  43. ```
  44. payload: {"cmd": "ask", "login": "balthazar"}
  45.  
  46. link: https://lirria.khaganat.net/login/r2_login.php
  47.  
  48. proxies: {}
  49.  
  50. ctn: $6$DQcfqPgbZVm83Myk
  51. ```
  52.  
  53. Requête 2
  54.  
  55. ```
  56. payload: {"cmd": "login", "login": "balthazar", "password": "$6$DQcfqPgbZVm83Myk$xVCsqNLJhlOGaTWT8dkFc51itl3bUuLI3RD300mJsS7pyTtKow/Hzm9ESoIajzCXgo7z3Kt9KHfSfd1NMluS/0", "clientApplication": "Lirria", "cp": "2", "lg": "en"}
  57.  
  58. link: https://lirria.khaganat.net/login/r2_login.php
  59.  
  60. proxies: {}
  61.  
  62. ctn: 2314A8C0|8AEB6052|000000F4#lirria.khaganat.net:47851#http://localhost:30000/ring/web_start.php#http://http://lirria.khaganat.net:40916/ring/
  63. 1#http://localhost:23001#http://lirria.khaganat.net/patch
  64. ```
  65.  
  66. Le payload représente les données envoyés, sur le seveur. Le lien (link) est le lien du serveur, les proxys
  67. sont vides, parce que je n'en utilisait pas. Le ctn est la réponse texte du serveur. Le premier est le hash
  68. du username, et le second, est ce que je pense être les liens vers les différents serveurs/ sockets. Ce sera
  69. à verifier plus tard. Et surtout à Documenter :P
  70.  
  71. # 2 Godot
  72.  
  73. Comme je connaissais pas du tout Godot j'ai décidé de pas lire la documentation et d'y aller à
  74. l'arrache, logique, non ?
  75.  
  76. J'ai donc cloné la branche d'osquallo et commencé à bidouiller encore une fois. Visiblement
  77. Godot fonctionne par un système d'event. Pour faire simple, plutôt que d'attendre qu'une fonction
  78. finisse de s'éxécuter par exemple une requête web, celle-ci s'exécute en arrière plan, et appelle
  79. une autre méthode quand elle à fini.
  80.  
  81. J'ai modifié le script comme suit:
  82. ```python
  83. func _on_play_button_pressed():
  84. #emit_signal( "login_button_pressed" )
  85. do_request(get_node("h_box_container/v_box_container/margin_container/login_box/email_box/email_edit").get_text())
  86.  
  87. func do_request(username):
  88. var headers = ["Content-Type: application/json"]
  89. $HTTPRequest.request("https://lirria.khaganat.net/login/r2_login.php?cmd=ask&login=" + username, headers, true, HTTPClient.METHOD_GET, "")
  90.  
  91.  
  92. func _on_HTTPRequest_request_completed(result, response_code, headers, body):
  93. var s = body.get_string_from_utf8().split(":")
  94. var ctn = s[1]
  95. print(ctn)
  96. ```
  97.  
  98. J'ai commenté la ligne qui fait changer de page (le emit signal, appelle justement un des event)
  99. 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.
  100.  
  101. 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
  102. 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
  103. avant de lance l'appel.
  104.  
  105. L'appel est une requête de methode GET avec deux paramètres, cmd & login. Cette requête renvoie un hash
  106. qui sert ensuite à salter le hash du mot de passe. Pour l'instant cela se passe en SHA-512,
  107. a l'orgine c'était en DES un autre algorithme beaucoup moins sûr. Mais d'une manière générale
  108. ce n'est pas une bonne solution non plus de passer par le SHA-512 et cela devrait être remplacé
  109. à 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.
  110.  
  111. Une fois la requête effectué le serveur renvoit quelque chose du genre 0:Erreur, ou 1:Hash,
  112. on remarquera que j'ai considéré que ce serait toujours positif, à terme il faudra aussi
  113. protéger ce champ.
  114. On coupe le string en utilisant les : et on récupère la deuxième partie, qui est sensée contenir
  115. le hash. Et ensuite on l'affiche. Il faudra après s'en servir pour chiffre le mdp, et relancer
  116. une autre requête comme celle du script python.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement