diff --git a/gui/Cargo.toml b/gui/Cargo.toml new file mode 100644 index 0000000..7ccc430 --- /dev/null +++ b/gui/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "ubuntu-fido-gui" +version.workspace = true +edition.workspace = true +license.workspace = true + +[[bin]] +name = "ubuntu-fido" +path = "src/main.rs" + +[dependencies] +gtk = { package = "gtk4", version = "0.8" } +adw = { package = "libadwaita", version = "0.6" } +ubuntu-fido-common = { path = "../common" } +anyhow = { workspace = true } diff --git a/gui/data/io.dangerousthings.UbuntuFido.desktop b/gui/data/io.dangerousthings.UbuntuFido.desktop new file mode 100644 index 0000000..2744654 --- /dev/null +++ b/gui/data/io.dangerousthings.UbuntuFido.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=Authentication +GenericName=Security Keys & MFA +Comment=Manage U2F/FIDO2 keys and authentication policy +Exec=ubuntu-fido +Icon=io.dangerousthings.UbuntuFido +Terminal=false +Type=Application +Categories=Settings;Security; +Keywords=mfa;u2f;fido2;passkey;totp;security; +StartupNotify=true diff --git a/gui/data/io.dangerousthings.UbuntuFido.svg b/gui/data/io.dangerousthings.UbuntuFido.svg new file mode 100644 index 0000000..4695521 --- /dev/null +++ b/gui/data/io.dangerousthings.UbuntuFido.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/gui/src/main.rs b/gui/src/main.rs new file mode 100644 index 0000000..2508742 --- /dev/null +++ b/gui/src/main.rs @@ -0,0 +1,28 @@ +use adw::prelude::*; +use gtk::glib; + +const APP_ID: &str = "io.dangerousthings.UbuntuFido"; + +fn main() -> glib::ExitCode { + let app = adw::Application::builder().application_id(APP_ID).build(); + app.connect_activate(|app| { + let win = adw::ApplicationWindow::builder() + .application(app) + .default_width(720) + .default_height(540) + .title("Authentication") + .build(); + let header = adw::HeaderBar::new(); + let toolbar = adw::ToolbarView::new(); + toolbar.add_top_bar(&header); + let status = adw::StatusPage::builder() + .icon_name("dialog-password-symbolic") + .title("Authentication setup") + .description("Phase 0 placeholder. Real UI in Phase 8.") + .build(); + toolbar.set_content(Some(&status)); + win.set_content(Some(&toolbar)); + win.present(); + }); + app.run() +}