diff --git a/.env.example b/.env.example index cee8df6..9822774 100644 --- a/.env.example +++ b/.env.example @@ -1 +1,2 @@ -PORT=4040 \ No newline at end of file +PORT=4040 +API_KEY=429683C4C977415CAAFCCE10F7D57E11 \ No newline at end of file diff --git a/README.md b/README.md index de9a2df..7028ff8 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,7 @@ Crie um arquivo `.env` no diretório raiz do projeto com a seguinte configuraç ```env PORT=4040 +API_KEY=sua_chave_api_secreta_aqui ``` Isso define a porta onde o serviço será executado. @@ -96,24 +97,31 @@ Você pode enviar requisições `POST` para o endpoint `/process-audio` com um a - **Base64** (para enviar o áudio codificado em base64) - **URL** (para enviar o link do arquivo de áudio) +### Autenticação + +Todas as requisições devem incluir o cabeçalho `apikey` com o valor da `API_KEY` configurada no arquivo `.env`. + ### Exemplo de Requisição via cURL #### Envio como Form-data ```bash -curl -X POST -F "file=@caminho/do/audio.mp3" http://localhost:4040/process-audio +curl -X POST -F "file=@caminho/do/audio.mp3" http://localhost:4040/process-audio \ + -H "apikey: sua_chave_api_secreta_aqui" ``` #### Envio como Base64 ```bash -curl -X POST -d "base64=$(base64 caminho/do/audio.mp3)" http://localhost:4040/process-audio +curl -X POST -d "base64=$(base64 caminho/do/audio.mp3)" http://localhost:4040/process-audio \ + -H "apikey: sua_chave_api_secreta_aqui" ``` #### Envio como URL ```bash -curl -X POST -d "url=https://exemplo.com/caminho/para/audio.mp3" http://localhost:4040/process-audio +curl -X POST -d "url=https://exemplo.com/caminho/para/audio.mp3" http://localhost:4040/process-audio \ + -H "apikey: sua_chave_api_secreta_aqui" ``` ### Resposta diff --git a/docker-compose.yaml b/docker-compose.yaml index e7bf873..70bcdb2 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -9,6 +9,7 @@ services: - evolution-net environment: - PORT=4040 + - API_KEY=429683C4C977415CAAFCCE10F7D57E11 expose: - 4040 diff --git a/main.go b/main.go index 5c6a27b..0162aa7 100644 --- a/main.go +++ b/main.go @@ -18,6 +18,28 @@ import ( "github.com/joho/godotenv" ) +func validateAPIKey(c *gin.Context) bool { + apiKey := os.Getenv("API_KEY") + if apiKey == "" { + fmt.Println("API_KEY não configurada no arquivo .env") + c.JSON(http.StatusInternalServerError, gin.H{"error": "Erro interno no servidor"}) + return false + } + + requestApiKey := c.GetHeader("apikey") + if requestApiKey == "" { + c.JSON(http.StatusUnauthorized, gin.H{"error": "API_KEY não fornecida"}) + return false + } + + if requestApiKey != apiKey { + c.JSON(http.StatusUnauthorized, gin.H{"error": "API_KEY inválida"}) + return false + } + + return true +} + func convertAudioToOpusWithDuration(inputData []byte) ([]byte, int, error) { cmd := exec.Command("ffmpeg", "-i", "pipe:0", "-ac", "1", "-ar", "16000", "-c:a", "libopus", "-f", "ogg", "pipe:1") @@ -58,6 +80,10 @@ func convertAudioToOpusWithDuration(inputData []byte) ([]byte, int, error) { } func processAudio(c *gin.Context) { + if !validateAPIKey(c) { + return + } + var inputData []byte var err error