malwaredb 0.3.2

Service for storing malicious, benign, or unknown files and related metadata and relationships.
// SPDX-License-Identifier: Apache-2.0

use malwaredb_server::State;

use std::process::ExitCode;

use clap::{Args, Subcommand};

/// Show (or toggle) the state of Malware DB keeping unknown files
#[derive(Clone, Debug, Args, PartialEq)]
pub struct UnknownFiles {
    /// Optionally enable or disable Virus Total submission
    #[clap(subcommand)]
    option: Option<Options>,
}

#[derive(Clone, Debug, Subcommand, PartialEq, Eq)]
enum Options {
    /// Specifies that unknown files will be kept.
    Enable,

    /// Unknown files will not be kept
    Disable,
}

impl UnknownFiles {
    pub async fn execute(&self, state: State) -> anyhow::Result<ExitCode> {
        match self.option {
            None => {
                let virustotal_state = if state.db_config.keep_unknown_files {
                    "enabled"
                } else {
                    "disabled"
                };
                println!("Keeping unknown files {virustotal_state}");
            }
            Some(Options::Enable) => {
                state.db_type.enable_keep_unknown_files().await?;
                println!("Keeping unknown files flag set.");
            }
            Some(Options::Disable) => {
                state.db_type.disable_keep_unknown_files().await?;
                println!("Keeping unknown files flag unset.");
            }
        }
        Ok(ExitCode::SUCCESS)
    }
}