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
API_KEY=429683C4C977415CAAFCCE10F7D57E11

View File

@ -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

View File

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

26
main.go
View File

@ -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