From c58f01d51bcdca021c9ab8422b1f98e4ab6e4601 Mon Sep 17 00:00:00 2001 From: Coder Agent Date: Sun, 5 Jul 2026 15:40:01 -0300 Subject: [PATCH] security: remove chaves Supabase hardcoded; use self.diferenca do frontend no recibo --- src-tauri/src/main.rs | 32 ++++++++++++++------------------ src-tauri/src/plugins/printer.rs | 5 +++-- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 5efe41b..9c957bb 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -19,7 +19,7 @@ fn data_dir_path() -> PathBuf { .join("FechamentoCaixa") } -fn load_config() -> (String, String) { +fn load_config() -> Result<(String, String), String> { let cfg_path = data_dir_path().join("config.json"); if let Ok(content) = fs::read_to_string(&cfg_path) { if let Ok(cfg) = serde_json::from_str::(&content) { @@ -32,15 +32,17 @@ fn load_config() -> (String, String) { .unwrap_or("") .to_string(); if !anon.is_empty() && !service.is_empty() { - return (anon, service); + return Ok((anon, service)); } } } - // Fallback 3: chaves embedadas no binário (funciona em qualquer PC sem config) - ( - "sb_publishable_NCUGwstslOvVt5JtGxKB9A_p-BERG57".to_string(), - "sb_secret_T6eHIKJDGaH53HMTG6UUKa_6ou6KfEW".to_string(), - ) + Err(format!( + "SUPABASE_ANON_KEY e SUPABASE_SERVICE_KEY nao encontradas em config.json.\n\ + Crie o arquivo {:?} com o seguinte formato:\n\ + {{\"SUPABASE_ANON_KEY\": \"sua_chave_anon\", \"SUPABASE_SERVICE_KEY\": \"sua_chave_service\"}}\n\ + Gere as chaves em: https://supabase.ofrangao.com.br/project/default/settings/api", + cfg_path + )) } fn main() { @@ -55,17 +57,11 @@ fn main() { fs::create_dir_all(&data_dir).expect("não foi possível criar diretório de dados"); log::info!("Data dir: {:?}", data_dir); - // Carrega chaves do Supabase - let (anon_key, service_key) = load_config(); - if anon_key.is_empty() || service_key.is_empty() { - log::warn!("SUPABASE_ANON_KEY ou SUPABASE_SERVICE_KEY não encontradas!"); - log::warn!("Cole-as em: {:?}", data_dir.join("config.json")); - log::warn!("Formato: {{\"SUPABASE_ANON_KEY\": \"...\", \"SUPABASE_SERVICE_KEY\": \"...\"}}"); - } else { - log::info!("Supabase: keys carregadas (anon={}..., service={}...)", - &anon_key[..8.min(anon_key.len())], - &service_key[..8.min(service_key.len())]); - } + // Carrega chaves do Supabase — obrigatório vir do config.json + let (anon_key, service_key) = load_config().expect("falha ao carregar configuracao do Supabase"); + log::info!("Supabase: keys carregadas (anon={}..., service={}...)", + &anon_key[..8.min(anon_key.len())], + &service_key[..8.min(service_key.len())]); // Inicializa plugins let storage = storage::init(data_dir.clone()) diff --git a/src-tauri/src/plugins/printer.rs b/src-tauri/src/plugins/printer.rs index 0dd0251..0bd63aa 100644 --- a/src-tauri/src/plugins/printer.rs +++ b/src-tauri/src/plugins/printer.rs @@ -322,9 +322,10 @@ impl ReciboData { out.extend(escpos::divider()); // ── DIFERENÇA ── - // Diferença = TOTAL SISTEMA - saldo_esperado - cancelamentos + // Usa o valor calculado pelo frontend (self.diferenca). + // O frontend já subtrai saldo_esperado e cancelamentos de sys_total. out.extend(escpos::line_bold("DIFERENCA")); - let diff = self.sys_total - self.saldo_esperado - self.cancelamentos; + let diff = self.diferenca; let diff_str = if diff >= 0.0 { format!("+{}", self.fmt_money(diff)) } else {