Forum du serveur Computercraft FR
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment :
Tablette 11″ Xiaomi- Mi Pad 6 global version ...
Voir le deal
224.97 €

[CC][API] Cryptographie Délocalisée

2 participants

Aller en bas

[CC][API] Cryptographie Délocalisée Empty [CC][API] Cryptographie Délocalisée

Message par Thomasims Mer 17 Aoû - 18:01

Bonjour, je vais vous présenter ce que je vais appeler mon API de Cryptographie délocalisée (notez le nom très original) :

Le principe est simple: minimiser les opérations du côté LUA pour:

  • Améliorer la vitesse des opérations. 
  • Réduire l'impact sur le serveur MC.
  • Utiliser les fonctions de Crypto optimisées d'un environnement moins restreint que celui de CC.

Pour atteindre ce but, j'ai choisi de coder une simple page PHP qui répond à des requêtes POST.
L'API fait simplement des requêtes à la page et le serveur web prend en charge tous les calculs 'lourds'.
Le code LUA prend en charge lui toutes les spécificités de l'appel à la page pour diminuer au maximum la complexité de l'API.

Sans plus attendre, voici le code CC:
Spoiler:
Et la doc:
doc:
Comme vous pouvez le voir, la page PHP est hébergée sur mon VPS, ce qui peut poser problème (Je n'incite jamais les gens à me faire confiance dans ce genre de cas  Rolling Eyes )
Pour remédier à ça, je vous incite vivement à héberger vous même la page PHP (ça m'arrange, ça diminue le load sur mon VPS  Very Happy )
Attention, c'est pas joli:


Dernière édition par Thomasims le Mer 17 Aoû - 19:21, édité 1 fois
Thomasims
Thomasims

Messages : 3
Date d'inscription : 11/08/2016
Age : 26
Localisation : Belgique

Revenir en haut Aller en bas

[CC][API] Cryptographie Délocalisée Empty Re: [CC][API] Cryptographie Délocalisée

Message par skypop Mer 17 Aoû - 19:15

Tu peux faire un meilleur usage de LUA dans le contrôle et la gestion des erreurs.
Par exemple, pour une série comme ça :
Code:
 if not data then error("No data given") end
 if not original then error("No test given") end
 if not key then error("No key given") end
 if not type(key)=="string" then error("Key must be a string") end
 if not type(signed)=="string" then error("Signature must be a string") end

Tu devrais pouvoir utiliser la fonction assert()
Code:
assert(data, "No data given")
assert(original, "No test given")
assert(key, "No key given")
assert(type(key)=="string", "Key must be a string")
assert(type(signed)=="string", "Signature must be a string")
Si le premier paramètre est false ou nil, une erreur est émise avec le message indiqué en second paramètre. Enfin le message est optionnel.

ref: https://www.lua.org/pil/8.3.html

Enfin, la fonction error() peut prendre un second paramètre qui par défaut est à 1 et correspond au level : à quelle ligne de quel programme l'erreur doit être signalée.
Tel quel, si un utilisateur de ton api commet une erreur, en retour il lui sera signalé que l'erreur proviens de l'api, et non du programme où l'utilisateur a commis l'erreur.
Pour que le signalement de l'erreur soit plus cohérent, il suffirait d'indiquer le level 2 :
Exemple :
Code:
function encrypt(data, key)
 if not data then error("No data given",2) end
 if not key then error("No key given",2) end
-- ...
Ainsi, si l'utilisateur oublie un des deux arguments c'est la ligne de son programme qui lui sera signalée, et non celle de l'API.

On peut aussi faire en sorte qu'il ne soit pas fait mention de la ligne ou du fichier, en indiquant le level 0 (zéro)
Jusque là je croyais que c'était -1, qui fonctionne aussi enfin maintenant je le sais Very Happy

réf: https://www.lua.org/pil/8.5.html

Enfin je ne crois pas que assert() gère le level. Mais l'une sinon l'autre de ces deux astuces devrait bien te servir Wink
skypop
skypop

Messages : 95
Date d'inscription : 25/07/2016

Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum