Menu
Coddy logo textTech

Récapitulatif - Casier sécurisé

Fait partie de la section Object Oriented Programming du Journey Rust de Coddy. Leçon 13 sur 61.

challenge icon

Défi

Facile

Construisons un système de casier sécurisé qui rassemble tout ce que tu as appris sur l'encapsulation ! Ton casier protégera son contenu derrière un code secret : seule une personne qui connaît le code pourra voir ce qui se trouve à l'intérieur.

Tu vas créer deux fichiers pour organiser ton code :

  • locker.rs : Define une structure Locker avec deux champs private : code (u32) et contents (String). La structure doit être public, mais les deux champs doivent rester private pour protéger la sécurité du locker. Implement :
    • Un constructeur new qui Takes un code initial et un contenu
    • Une méthode set_code qui permet de modifier le code du locker
    • Une méthode get_contents qui Takes un code attempted ; s'il matches le code du locker, renvoyer le contenu ; sinon, renvoyer "Access denied"
  • main.rs : Importe ton module locker, crée un locker et démontre ses fonctionnalités de sécurité en tentant d'accéder au contenu avec des codes corrects et incorrects.

La méthode get_contents doit renvoyer un String, soit le contenu réel lorsque le code est correct, soit le message de refus lorsqu'il est incorrect. Il s'agit de ton getter conditionnel qui valide l'accès avant de révéler les données private.

Ta sortie doit respecter exactement le format suivant :

Attempt with {code}: {result}
Code changed
Attempt with {code}: {result}

Par exemple, si tu crées un locker avec le code 1234 et le contenu "Gold coins", que tu essaies le code 0000, que tu modifies le code en 5678, puis que tu essaies 5678, la sortie sera :

Attempt with 0000: Access denied
Code changed
Attempt with 5678: Gold coins

Tu recevras cinq entrées : le code initial, le contenu, le premier code attempted, le nouveau code à définir et le second code attempted.

Essayez vous-même

mod locker;

use locker::Locker;

fn main() {
    // Lire les entrées
    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let initial_code: u32 = input.trim().parse().expect("Invalid number");

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let contents = input.trim().to_string();

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let first_attempt: u32 = input.trim().parse().expect("Invalid number");

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let new_code: u32 = input.trim().parse().expect("Invalid number");

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let second_attempt: u32 = input.trim().parse().expect("Invalid number");

    // TODO: Créer un nouveau Locker avec initial_code et contents

    // TODO: Tenter d'obtenir contents avec le code first_attempt
    // Afficher : "Attempt with {code}: {result}"

    // TODO: Changer le code du locker pour new_code
    // Print: "Code changed"

    // TODO: Tenter d'obtenir contents avec le code second_attempt
    // Afficher : "Attempt with {code}: {result}"
}

Toutes les leçons de Object Oriented Programming

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