# GoApi Este projeto é uma API simples para aprendizado em GoLang seguindo a estrutura utilizada por padrão em empresas que utilizam Go. ## 🚀 Como rodar o projeto ### Instale as dependências e atualize o go.mod ```bash go get github.com/joho/godotenv go get github.com/mattn/go-sqlite3 go mod tidy ``` ### Inicie o servidor de desenvolvimento ```bash go run ./cmd/GoApi/main.go ``` A aplicação estará disponível em `http://localhost:8080` (ou similar, conforme o terminal indicar). ## 📝 HMAC Para funcionamento desse middleware, é necessário adicionar as seguintes headers na requisição: - X-Timestamp: unix seconds - X-Signature: assinatura em hex Alem de adicionar um pre-request script no Postman para gerar a assinatura. ```// Lê dados do ambiente const secret = pm.environment.get("hmac_secret"); if (!secret) { throw new Error("Env var 'hmac_secret' não definida no Postman."); } // Método e path exatos const method = pm.request.method; // GET/POST // Garante que usamos somente o path (sem query) const url = new URL(pm.request.url.toString()); const path = url.pathname; // Timestamp em segundos const ts = Math.floor(Date.now() / 1000).toString(); // Corpo bruto (para GET deve ser string vazia) let body = ""; if (method !== "GET" && pm.request.body && pm.request.body.raw) { // Use exatamente o que vai no corpo da requisição body = pm.request.body.raw; } // Monta a mensagem canônica const msg = method + "\n" + path + "\n" + ts + "\n" + body; // Calcula HMAC-SHA256 em hex usando CryptoJS (nativo do Postman) const signature = CryptoJS.HmacSHA256(msg, secret).toString(CryptoJS.enc.Hex); // Define headers pm.request.headers.upsert({ key: "X-Timestamp", value: ts }); pm.request.headers.upsert({ key: "X-Signature", value: signature });```