diff --git a/modules/yubikey-first-login.nix b/modules/yubikey-first-login.nix new file mode 100644 index 0000000..fe96358 --- /dev/null +++ b/modules/yubikey-first-login.nix @@ -0,0 +1,93 @@ +{ pkgs, ... }: + +let + yubikeyFirstLogin = pkgs.writeShellScript "yubikey-first-login" '' + #!/usr/bin/env bash + + set -u + + # Ce mécanisme concerne uniquement Alice. + current_user="$(${pkgs.coreutils}/bin/id -un)" + + if [ "$current_user" != "alice" ]; then + exit 0 + fi + + # Marqueur indiquant que le changement initial du PIN + # a déjà été effectué avec succès. + state_dir="$HOME/.local/state/nixos-workstations" + marker="$state_dir/yubikey-pin-initialized" + + # Si Alice a déjà effectué l'initialisation, + # il n'y a plus rien à faire. + if [ -e "$marker" ]; then + exit 0 + fi + + echo + echo "======================================================" + echo " INITIALISATION DE VOTRE YUBIKEY" + echo "======================================================" + echo + echo "Vous devez modifier le PIN temporaire de votre YubiKey." + echo + echo "Munissez-vous du PIN temporaire qui vous a été communiqué." + echo + echo "Vous allez devoir saisir :" + echo + echo " 1. le PIN actuel temporaire ;" + echo " 2. votre nouveau PIN personnel ;" + echo " 3. une confirmation de votre nouveau PIN." + echo + echo "Le nouveau PIN ne sera pas enregistré sur le poste." + echo + + if ${pkgs.yubikey-manager}/bin/ykman fido access change-pin; then + + ${pkgs.coreutils}/bin/mkdir -p "$state_dir" + ${pkgs.coreutils}/bin/touch "$marker" + + echo + echo "======================================================" + echo "Le PIN de votre YubiKey a été modifié avec succès." + echo "======================================================" + echo + echo "Cette procédure ne sera plus affichée." + echo + + sleep 5 + + exit 0 + + else + + echo + echo "======================================================" + echo "Le changement du PIN n'a pas été effectué." + echo "======================================================" + echo + echo "Cette procédure sera reproposée lors de votre" + echo "prochaine ouverture de session." + echo + echo "Appuyez sur Entrée pour fermer cette fenêtre." + + read -r + + exit 1 + fi + ''; + +in +{ + # Lancement automatique après ouverture de la session graphique. + environment.etc."xdg/autostart/yubikey-first-login.desktop".text = '' + [Desktop Entry] + Type=Application + Name=Initialisation YubiKey + Comment=Initialisation du PIN personnel de la YubiKey + Exec=${pkgs.kdePackages.konsole}/bin/konsole -e ${yubikeyFirstLogin} + OnlyShowIn=KDE; + NoDisplay=true + StartupNotify=false + ''; +} \ No newline at end of file