Menu
Coddy logo textTech

Récapitulatif - Coffre-fort sécurisé

Fait partie de la section Programmation orientée objet du Journey Lua de Coddy. Leçon 48 sur 70.

challenge icon

Défi

Facile

Construisons une classe Vault qui utilise la confidentialité basée sur une closure afin de créer un système de stockage véritablement sécurisé ! Le coffre contiendra des données secrètes auxquelles on ne pourra accéder qu’en fournissant le mot de passe correct.

Vous organiserez votre code sur deux fichiers :

  • Vault.lua : créez une classe où les contents et le password sont tous deux stockés dans des variables local à l’intérieur du constructeur : ils sont complètement masqués de tout accès extérieur. Le constructeur :new(contents, password) doit stocker ces valeurs dans des variables local, puis définir une méthode directement sur l’instance de l’objet :
    • :open(attemptedPassword) : vérifie si le mot de passe tenté correspond au password enregistré. S’il est correct, renvoie les contents secrets. S’il est incorrect, renvoie "Access Denied".
  • main.lua : utilisez Require pour charger votre module Vault et lisez trois entrées : les contents secrets à stocker, le password à définir et une tentative de mot de passe. Créez un coffre avec les contents et le password, puis essayez de l’ouvrir avec le attemptedPassword et affichez le result. Montrez également que les contents sont véritablement privés en tentant d’accéder directement à vault.contents et en affichant ce que vous obtenez.

Vous recevrez trois entrées :

  1. Les contents secrets à stocker dans le coffre
  2. Le password destiné à protéger le coffre
  3. Une tentative de password pour essayer d’ouvrir le coffre

Votre sortie doit comporter deux lignes :

Result: {resultFromOpen}
Direct access: {whatYouGetFromVaultContents}

Par exemple, si les entrées sont Gold Coins, secret123 et secret123, la sortie doit être :

Result: Gold Coins
Direct access: nil

Si les entrées sont Diamond, mypass et wrongpass, la sortie doit être :

Result: Access Denied
Direct access: nil

L’idée essentielle est que contents et password existent uniquement en tant que variables local à l’intérieur du constructeur. La méthode :open() peut y accéder grâce à une closure, mais rien d’autre ne le peut, pas même vault.contents, vault._contents ou vault.password. C’est un véritable encapsulage !

Essayez vous-même

-- Requiert le module Vault
local Vault = require('Vault')

-- Lire les entrées
local contents = io.read()
local password = io.read()
local attemptedPassword = io.read()

-- TODO: Créer un vault avec les contents et le password

-- TODO: Essayer d'ouvrir le vault avec le attemptedPassword

-- TODO: Afficher le résultat au format : "Result: {resultFromOpen}"

-- TODO: Essayer d'accéder à vault.contents directement et afficher ce que vous obtenez
-- Print in the format: "Direct access: {whatYouGetFromVaultContents}"

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur Lua en ligne