Connexion par WebSocket afin de communiquer via une page web
Noms de variable | Obtenu par | Description |
---|---|---|
mdpHash |
hash(mdp) |
Mot de passe hashé pour plus de sécurité |
clientChallenge |
random() |
Challenge aléatoire du client pour stocker un cookie-key unique |
serverChallenge |
random() |
Challenge aléatoire du serveur pour transférer la clé |
cookieKey |
hash(mdp + clientChallenge) |
Mdp stocké par le navigateur |
key |
hash(cookieKey + serveurChallenge |
Clé transférée au serveur |
sessionId |
~random par le serveur |
Enregistré par le client et le serveur |
adresse |
Adresse du client | |
Note : serverChallenge n'est pas enregistré car il est unique pour chaque connexion. De plus, un sel aléatoire est utilisé pour une key . |
||
clientChallenge est un sel (salt) aléatoire pour stocker un cookie-key unique. Le sel est communiqué au serveur pour obtenir le même cookieKey. |
- Le client créé un
clientChallenge
(salt) et uncookieKey
(hash(mdpHash, clientChallenge)
) puis les enregistre dans le navigateur - Le serveur envoie un
serverChallenge
- Le client envoie
key
(hash(cookieKey + serveurChallenge)
, salt aléatoire) etclientChallenge
- Le serveur vérifie la clé
- Le serveur enregistre le client (adresse) et envoi un
sessionId
- Le client enregistre
sessionId
dans le navigateur
- Le serveur envoie un
serverChallenge
- Le client envoie un nouveau
key
(hash(cookieKey + serveurChallenge)
),clientChallenge
etsessionId
- Le serveur vérifie l'id de session, l'adresse et le hash
{
"type": "auth",
"content": "challenge",
"challenge": "..."
}
Événements de connexion (une fois authentifié)
{
"type": "management",
"msg": "connected", // or disconnected
}
À envoyer dès que le WebSocket est considéré comme connecté.
{
"type": "auth",
"date": "CURRENT DATE TIME IN MS",
"key": "..."
}
{
"type": "ledcube",
"date": "CURRENT DATE TIME IN MS",
"action": "set-animation-frames-count",
"count": 1, // nombre de frames (optionnel, 1 par défaut)
"fps": 20, // nombre de frames par seconde (optionnel, 100 par défaut)
}
count : nombre de frames dans l'animation
{
"type": "ledcube",
"date": "CURRENT DATE TIME IN MS",
"action": "set-layer",
"layer": 0, // couche par rapport à la direction (0 par défaut)
"layer-dir": "X", // ou Y, ou Z (Z par défaut)
"colors": [
// tableau de 8*8 rempli de nombres en int32 (en rgb, 8 bits par couleur)
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0 ],
],
}
{
"type": "ledcube",
"date": "CURRENT DATE TIME IN MS",
"action": "animation.play",
"fileName": "...", // nom de l'animation
}
{
"type": "ledcube",
"date": "CURRENT DATE TIME IN MS",
"action": "setLed",
"x": 0, // position en X (0 par défaut)
"y": 0, // position en Y (0 par défaut)
"z": 0, // position en Z (0 par défaut)
"color": 0, // int32 pour une couleur en rgb (8 bits par couleur)
}
Un int32 pour une couleur en rgb (8 bits par couleur)
Rouge : 0xFF0000 = 16711680 = (255, 0, 0) Vert : 0x00FF00 = 65280 = (0, 255, 0) Bleu : 0x0000FF = 255 = (0, 0, 255)