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::{
    crypto::{EncryptionOption, FileEncryption},
    State,
};

use std::process::ExitCode;

use anyhow::Result;
use clap::Parser;

/// Create a key for file encryption
#[derive(Clone, Debug, Parser, Eq, PartialEq)]
pub struct Create {
    /// Encryption algorithm to use
    #[arg(long = "type")]
    key_type: EncryptionOption,
}

impl Create {
    pub async fn execute(&self, state: State) -> Result<ExitCode> {
        let key = FileEncryption::from(self.key_type);
        let id = state.db_type.add_file_encryption_key(&key).await?;
        println!("Added {} key {id}", self.key_type);
        println!("Please restart Malware DB for the key to be used for subsequent submissions.");
        Ok(ExitCode::SUCCESS)
    }
}

#[derive(Clone, Debug, Parser, Eq, PartialEq)]
pub struct List {}

impl List {
    pub async fn execute(&self, state: State) -> Result<ExitCode> {
        let keys = state.db_type.get_encryption_key_names_ids().await?;

        for (key_id, key_algo) in keys {
            println!("{key_id}: {key_algo}");
        }

        Ok(ExitCode::SUCCESS)
    }
}