Skip to content

CSV export #11

@drykxs

Description

@drykxs

Perfeito! Aqui está a versão estendida do servidor que:

✅ Continua salvando os dados em logs_recebidos.json
✅ Também salva automaticamente em logs_recebidos.csv (estrutura tabular)
✅ CSV atualizado a cada novo log recebido


🧠 server.py (salva JSON + CSV)

from flask import Flask, request
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import hashlib
import json
import csv
import os
from datetime import datetime

app = Flask(__name__)

# Senha compartilhada com o app
SECRET = 'senha-forte-123'
KEY = hashlib.sha256(SECRET.encode('utf-8')).digest()[:16]

# Caminhos de arquivos
JSON_FILE = 'logs_recebidos.json'
CSV_FILE = 'logs_recebidos.csv'

# Inicializa o JSON se não existir
if not os.path.exists(JSON_FILE):
    with open(JSON_FILE, 'w') as f:
        json.dump([], f, indent=2)

# Inicializa o CSV com cabeçalho se não existir
if not os.path.exists(CSV_FILE):
    with open(CSV_FILE, 'w', newline='') as f:
        writer = csv.DictWriter(f, fieldnames=['timestamp', 'log'])
        writer.writeheader()

@app.route('/upload', methods=['POST'])
def upload():
    try:
        data = request.get_data()

        if len(data) < 17:
            return 'Payload inválido', 400

        iv = data[:16]
        encrypted = data[16:]

        cipher = AES.new(KEY, AES.MODE_CBC, iv)
        decrypted = unpad(cipher.decrypt(encrypted), AES.block_size)

        log_text = decrypted.decode('utf-8')
        timestamp = datetime.now().isoformat(timespec='seconds')

        log_entry = {
            'timestamp': timestamp,
            'log': log_text
        }

        # Atualiza JSON
        with open(JSON_FILE, 'r') as f:
            logs = json.load(f)

        logs.append(log_entry)

        with open(JSON_FILE, 'w') as f:
            json.dump(logs, f, indent=2)

        # Atualiza CSV
        with open(CSV_FILE, 'a', newline='') as f:
            writer = csv.DictWriter(f, fieldnames=['timestamp', 'log'])
            writer.writerow(log_entry)

        print(f"[{timestamp}] {log_text}")
        return 'OK', 200

    except Exception as e:
        print(f"[!] Erro: {e}")
        return 'Erro interno', 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

🧪 Teste rápido

  1. Execute o servidor:

    python3 server.py
  2. Verifique os arquivos gerados após upload:

    • logs_recebidos.json — formato estruturado
    • logs_recebidos.csv — para abrir no Excel/LibreOffice/etc.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions