This commit is contained in:
Davidson Gomes 2024-10-21 11:52:07 -03:00
parent c6c820ac04
commit 0be57219e6
4 changed files with 40 additions and 4 deletions

View File

@ -1 +1,2 @@
PORT=4040 PORT=4040
API_KEY=429683C4C977415CAAFCCE10F7D57E11

View File

@ -54,6 +54,7 @@ Crie um arquivo `.env` no diretório raiz do projeto com a seguinte configuraç
```env ```env
PORT=4040 PORT=4040
API_KEY=sua_chave_api_secreta_aqui
``` ```
Isso define a porta onde o serviço será executado. 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) - **Base64** (para enviar o áudio codificado em base64)
- **URL** (para enviar o link do arquivo de áudio) - **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 ### Exemplo de Requisição via cURL
#### Envio como Form-data #### Envio como Form-data
```bash ```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 #### Envio como Base64
```bash ```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 #### Envio como URL
```bash ```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 ### Resposta

View File

@ -9,6 +9,7 @@ services:
- evolution-net - evolution-net
environment: environment:
- PORT=4040 - PORT=4040
- API_KEY=429683C4C977415CAAFCCE10F7D57E11
expose: expose:
- 4040 - 4040

26
main.go
View File

@ -18,6 +18,28 @@ import (
"github.com/joho/godotenv" "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) { 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") 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) { func processAudio(c *gin.Context) {
if !validateAPIKey(c) {
return
}
var inputData []byte var inputData []byte
var err error var err error