From 59ed4a5db16c2f81750ab8911b86ec0c60477c22 Mon Sep 17 00:00:00 2001 From: shimun Date: Sat, 5 Sep 2020 17:56:08 +0200 Subject: [PATCH] generate completions during build --- .gitignore | 4 ++++ Cargo.toml | 10 ++++++++++ PKGBUILD | 3 +-- build.rs | 24 ++++++++++++++++++++++++ src/{cli/mod.rs => cli.rs} | 4 ---- src/{cli => cli_args}/config.rs | 0 src/{cli/cli_args.rs => cli_args/mod.rs} | 10 ++++++---- src/main.rs | 2 +- 8 files changed, 46 insertions(+), 11 deletions(-) create mode 100644 build.rs rename src/{cli/mod.rs => cli.rs} (99%) rename src/{cli => cli_args}/config.rs (100%) rename src/{cli/cli_args.rs => cli_args/mod.rs} (99%) diff --git a/.gitignore b/.gitignore index 7248da6..057a1eb 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,7 @@ **/*.rs.bk .idea/ *.iml +fido2luks.bash +fido2luks.elv +fido2luks.fish +fido2luks.zsh \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index 7882575..f8f53e2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,6 +25,15 @@ serde_json = "1.0.51" serde_derive = "1.0.106" serde = "1.0.106" +[build-dependencies] +ctap_hmac = { version="0.4.2", features = ["request_multiple"] } +hex = "0.3.2" +ring = "0.13.5" +failure = "0.1.5" +rpassword = "4.0.1" +libcryptsetup-rs = "0.4.1" +structopt = "0.3.2" + [profile.release] lto = true opt-level = 'z' @@ -38,6 +47,7 @@ build-depends = "libclang-dev, libcryptsetup-dev" extended-description = "Decrypt your LUKS partition using a FIDO2 compatible authenticator" assets = [ ["target/release/fido2luks", "usr/bin/", "755"], + ["fido2luks.bash", "usr/share/bash-completion/completions/fido2luks", "644"], ["initramfs-tools/keyscript.sh", "/lib/cryptsetup/scripts/fido2luks", "755" ], ["initramfs-tools/hook/fido2luks.sh", "etc/initramfs-tools/hooks/", "755" ], ["initramfs-tools/fido2luks.conf", "etc/", "644"], diff --git a/PKGBUILD b/PKGBUILD index ac50d70..0a80f98 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -17,10 +17,9 @@ pkgver() { build() { cargo build --release --locked --all-features --target-dir=target - ./target/release/fido2luks completions bash target } package() { install -Dm 755 target/release/${pkgname} -t "${pkgdir}/usr/bin" - install -Dm 644 target/fido2luks.bash "${pkgdir}/usr/share/bash-completion/completions/fido2luks" + install -Dm 644 fido2luks.bash "${pkgdir}/usr/share/bash-completion/completions/fido2luks" } diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..c520b10 --- /dev/null +++ b/build.rs @@ -0,0 +1,24 @@ +#![allow(warnings)] +#[macro_use] +extern crate failure; +extern crate ctap_hmac as ctap; + +#[path = "src/cli_args/mod.rs"] +mod cli_args; +#[path = "src/error.rs"] +mod error; +#[path = "src/util.rs"] +mod util; + +use cli_args::Args; +use std::env; +use std::str::FromStr; +use structopt::clap::Shell; +use structopt::StructOpt; + +fn main() { + // generate completion scripts, zsh does panic for some reason + for shell in Shell::variants().iter().filter(|shell| **shell != "zsh") { + Args::clap().gen_completions(env!("CARGO_PKG_NAME"), Shell::from_str(shell).unwrap(), "."); + } +} diff --git a/src/cli/mod.rs b/src/cli.rs similarity index 99% rename from src/cli/mod.rs rename to src/cli.rs index 2993398..e1e06d2 100644 --- a/src/cli/mod.rs +++ b/src/cli.rs @@ -3,7 +3,6 @@ use crate::luks::{Fido2LuksToken, LuksDevice}; use crate::util::sha256; use crate::*; use cli_args::*; -use config::*; use structopt::clap::Shell; use structopt::StructOpt; @@ -22,9 +21,6 @@ use std::time::SystemTime; pub use cli_args::Args; -mod cli_args; -mod config; - fn read_pin(ap: &AuthenticatorParameters) -> Fido2LuksResult { if let Some(src) = ap.pin_source.as_ref() { let mut pin = String::new(); diff --git a/src/cli/config.rs b/src/cli_args/config.rs similarity index 100% rename from src/cli/config.rs rename to src/cli_args/config.rs diff --git a/src/cli/cli_args.rs b/src/cli_args/mod.rs similarity index 99% rename from src/cli/cli_args.rs rename to src/cli_args/mod.rs index f317fb6..b02799f 100644 --- a/src/cli/cli_args.rs +++ b/src/cli_args/mod.rs @@ -1,10 +1,12 @@ -use crate::cli::config::*; -use crate::*; +use std::fmt::{Display, Error, Formatter}; +use std::path::PathBuf; +use std::str::FromStr; use structopt::clap::AppSettings; use structopt::StructOpt; -use std::fmt::{Display, Error, Formatter}; -use std::str::FromStr; +mod config; + +pub use config::*; #[derive(Debug, Eq, PartialEq, Clone)] pub struct HexEncoded(pub Vec); diff --git a/src/main.rs b/src/main.rs index 3dcac67..cc5f42e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,10 +7,10 @@ use crate::cli::*; use crate::device::*; use crate::error::*; use std::io; -use std::path::PathBuf; use std::process::exit; mod cli; +pub mod cli_args; mod device; mod error; mod luks;