Skip to main content

ssh_cli/
mascaramento.rs

1//! Mascaramento de valores sensíveis (senhas, tokens) — agent-safe.
2//!
3//! Regra (GAP-SSH-SEC-002): **sempre** retorna `"***"`, sem expor prefixo/sufixo.
4
5/// Placeholder fixo para qualquer valor sensível.
6pub const MASCARA_FIXA: &str = "***";
7
8/// Mascara um valor sensível sem vazar caracteres úteis.
9///
10/// # Exemplos
11///
12/// ```
13/// use ssh_cli::mascaramento::mascarar;
14///
15/// assert_eq!(mascarar("curto"), "***");
16/// assert_eq!(mascarar("senha-secreta-muito-longa-aqui-123456"), "***");
17/// ```
18#[must_use]
19pub fn mascarar(_valor: &str) -> String {
20    MASCARA_FIXA.to_string()
21}
22
23#[cfg(test)]
24mod testes {
25    use super::*;
26
27    #[test]
28    fn valor_vazio_retorna_triplo_asterisco() {
29        assert_eq!(mascarar(""), "***");
30    }
31
32    #[test]
33    fn valor_curto_retorna_triplo_asterisco() {
34        assert_eq!(mascarar("abc"), "***");
35    }
36
37    #[test]
38    fn valor_longo_nunca_expoe_prefixo_ou_sufixo() {
39        let senha = "senha-secreta-muito-longa-aqui-123456";
40        assert_eq!(mascarar(senha), "***");
41        assert!(!mascarar(senha).contains("senha"));
42        assert!(!mascarar(senha).contains("1234"));
43    }
44
45    #[test]
46    fn valor_com_unicode_nao_crasha() {
47        let emojis = "🔒🔑🛡🔐✨🎉💎⚡🌟🔥🎨🚀🌈🍀🎯🎪🎭🎬🎮🎲";
48        assert_eq!(mascarar(emojis), "***");
49    }
50}