pluginlab 0.6.0

Command-line interface host for Terminal REPL with plugin system (using WebAssembly Component Model)
Documentation
use crate::cli::Cli;

pub enum NetworkPermissions {
    None,
    All,
    Custom(Vec<String>),
}

impl From<&Cli> for NetworkPermissions {
    fn from(cli: &Cli) -> Self {
        if cli.allow_net.is_some() {
            if cli.allow_net.as_ref().unwrap() == "@" {
                return NetworkPermissions::All;
            } else {
                let domains: Vec<String> = cli
                    .allow_net
                    .as_ref()
                    .unwrap()
                    .split(",")
                    .map(|d| d.to_string())
                    .collect();
                return NetworkPermissions::Custom(domains);
            }
        }
        if cli.allow_all {
            return NetworkPermissions::All;
        }
        return NetworkPermissions::None;
    }
}

impl NetworkPermissions {
    pub fn is_allowed(&self, domain: &str) -> bool {
        match self {
            NetworkPermissions::None => false,
            NetworkPermissions::All => true,
            NetworkPermissions::Custom(domains) => domains.contains(&domain.to_string()),
        }
    }
}