From e203bee7ecdfbc23a363aa69d7a4da3392934027 Mon Sep 17 00:00:00 2001 From: Antoine POPINEAU Date: Fri, 17 May 2024 12:33:49 +0200 Subject: [PATCH] Short-circuit authentication if no command was configured (#140). --- contrib/locales/en-US/tuigreet.ftl | 1 + contrib/locales/fr-FR/tuigreet.ftl | 1 + src/ipc.rs | 50 +++++++++++++++++++----------- 3 files changed, 34 insertions(+), 18 deletions(-) diff --git a/contrib/locales/en-US/tuigreet.ftl b/contrib/locales/en-US/tuigreet.ftl index 26187d6..c6e48fd 100644 --- a/contrib/locales/en-US/tuigreet.ftl +++ b/contrib/locales/en-US/tuigreet.ftl @@ -21,6 +21,7 @@ new_command = New command: shutdown = Shut down reboot = Reboot +command_missing = No command configured command_exited = Command exited with command_failed = Command failed diff --git a/contrib/locales/fr-FR/tuigreet.ftl b/contrib/locales/fr-FR/tuigreet.ftl index c3205d3..fe364e9 100644 --- a/contrib/locales/fr-FR/tuigreet.ftl +++ b/contrib/locales/fr-FR/tuigreet.ftl @@ -21,6 +21,7 @@ command = Nouvelle commande : shutdown = Éteindre reboot = Redémarrer +command_missing = Aucune commande configurée command_exited = La commande a retourné command_failed = Échec de la commande diff --git a/src/ipc.rs b/src/ipc.rs index d658b02..ce1ec63 100644 --- a/src/ipc.rs +++ b/src/ipc.rs @@ -148,29 +148,43 @@ impl Ipc { } else { tracing::info!("authentication successful, starting session"); - let command = greeter.session_source.command(greeter).map(str::to_string); + match greeter.session_source.command(greeter).map(str::to_string) { + None => { + Ipc::cancel(greeter).await; - if let Some(command) = command { - greeter.done = true; - greeter.mode = Mode::Processing; + greeter.message = Some(fl!("command_missing")); + greeter.reset(false).await; + } - let session = Session::get_selected(greeter); - let (command, env) = wrap_session_command(greeter, session, &command); + Some(command) if command.is_empty() => { + Ipc::cancel(greeter).await; - #[cfg(not(debug_assertions))] - self.send(Request::StartSession { cmd: vec![command.to_string()], env }).await; + greeter.message = Some(fl!("command_missing")); + greeter.reset(false).await; + } - #[cfg(debug_assertions)] - { - let _ = command; - let _ = env; + Some(command) => { + greeter.done = true; + greeter.mode = Mode::Processing; - self - .send(Request::StartSession { - cmd: vec!["true".to_string()], - env: vec![], - }) - .await; + let session = Session::get_selected(greeter); + let (command, env) = wrap_session_command(greeter, session, &command); + + #[cfg(not(debug_assertions))] + self.send(Request::StartSession { cmd: vec![command.to_string()], env }).await; + + #[cfg(debug_assertions)] + { + let _ = command; + let _ = env; + + self + .send(Request::StartSession { + cmd: vec!["true".to_string()], + env: vec![], + }) + .await; + } } } }