Novo Ambiente | Atualização 3

This commit is contained in:
Vitoria Azevedo 2025-01-24 17:30:00 -03:00
parent d2c8745c45
commit 02ddd529be
14 changed files with 50 additions and 40 deletions

View File

@ -8,7 +8,7 @@ from .routes.auth import auth
from .routes.perfil import perfil
from .routes.montagem import montagem
from .routes.zabbix import zabbix
from .routes.zammad import zammad
from .routes.integrator import zammad
# Inicializa o MySQL
mysql = MySQL()

View File

@ -25,7 +25,7 @@ class Config:
LDAP_PASSWORD = os.getenv('LDAP_PASSWORD', '123Mudar') # Senha do usuário LDAP
#Api Zammad
zammad_api_url = 'http://10.10.253.59/api/v1'
zammad_api_url = 'http://zammad.itguys.com.br/api/v1'
zammad_token = 'L081vJ19kood2uDlTSSt59LWBaewT9-a-MH_VKno8RY'

Binary file not shown.

View File

@ -81,7 +81,6 @@ def login():
# Separar nome de usuário e domínio
try:
username, domain = username_full.split('@')
print(f" Domínio extraído: {domain}") # <-- Adiciona este print
except ValueError:
return jsonify({'msg': 'Formato de usuário inválido. Use "usuario@dominio.com".'}), 400
@ -91,13 +90,11 @@ def login():
cur.execute("SELECT idempresa, ip_dominio FROM empresa WHERE dominio = %s", (domain,))
empresa_result = cur.fetchone()
if not empresa_result:
return jsonify({'msg': 'Domínio não encontrado no banco de dados'}), 404
id_empresa, ip_dominio = empresa_result
# Verificar se o usuário está associado à empresa no MySQL
with mysql.connection.cursor() as cur:
cur.execute("SELECT empresa_id, dominio FROM view_usuario_empresa WHERE usuario = %s AND dominio = %s", (username, domain))
@ -111,8 +108,8 @@ def login():
return jsonify({'msg': 'Erro no banco de dados'}), 500
# Conexão LDAP com autenticação
ldap_server = f'ldap://{"itguys.com.br:389"}' # Altere para 'ldaps://{ip_dominio}:636' se LDAPS for usado
ldap_user = f'{domain}\\{username}' # Formato DOMAIN\username
ldap_server = f'ldap://{"itguys.com.br:389"}'
ldap_user = f'{domain}\\{username}'
try:
server = ldap3.Server(ldap_server, get_info=ldap3.ALL)
@ -123,17 +120,16 @@ def login():
authentication=ldap3.SIMPLE
)
if conn.bind():
token = jwt.encode({
'user': username_full,
'domain': domain, # Incluindo o domínio no payload
'exp': datetime.utcnow() + timedelta(hours=1)
}, current_app.config['SECRET_KEY'], algorithm="HS256")
conn.unbind()
logging.info(f"Login bem-sucedido para usuário: {username_full}")
return jsonify({'msg': 'Login bem-sucedido', 'token': token}), 200
return jsonify({'msg': 'Login bem-sucedido', 'token': token, 'domain': domain}), 200
else:
conn.unbind()
logging.warning(f"Falha na autenticação LDAP para o usuário: {username_full}")
@ -151,6 +147,3 @@ def login():

19
app/routes/integrator.py Normal file
View File

@ -0,0 +1,19 @@
from flask import Blueprint, jsonify, request
from .zammad import listar_tickets # Importa a função do zammad.py
from .auth import token_required # Importa o decorador de autenticação
zammad = Blueprint('zammad',__name__)
@zammad.route('/tickets', methods=['GET'])
@token_required
def tickets(data):
# O decorador token_required já valida o token e retorna os dados do payload
domain = data.get('domain') # Extraído do token
if not domain:
return jsonify({"error": "Domínio não encontrado no token"}), 400
tickets, status_code = listar_tickets(domain)
return jsonify(tickets), status_code

View File

@ -1,41 +1,39 @@
from flask import Blueprint, jsonify, request
import requests
# Blueprint para rotas relacionadas ao Zammad
zammad = Blueprint('zammad', __name__)
base_url = "http://zammad.itguys.com.br/api/v1"
zammad_token = "kT0IXO8aVhPoTLcMRNL290rqd9jbRhhM0zf8MgBo3n00NLChToSU6rOGnMgWA0M2"
# Configurações da API do Zammad
base_url = "http://10.10.253.59/api/v1" # URL base da API Zammad
zammad_token = "kT0IXO8aVhPoTLcMRNL290rqd9jbRhhM0zf8MgBo3n00NLChToSU6rOGnMgWA0M2" # Token da API Zammad
# Rota para listar tickets
@zammad.route('/tickets', methods=['GET'])
def listar_tickets():
def listar_tickets(domain):
try:
# Cabeçalho de autenticação para a API Zammad
headers = {
"Authorization": f"Token token={zammad_token}",
"Content-Type": "application/json"
}
url = f"{base_url}/tickets?domain={domain}"
response = requests.get(url, headers=headers, timeout=10)
# Faz a requisição para a API Zammad
url = f"{base_url}/tickets"
response = requests.get(url, headers=headers, timeout=10) # Timeout adicionado para evitar requisições travadas
# Processa a resposta
if response.status_code == 200:
tickets = response.json()
return jsonify(tickets), 200
tickets_filtrados = [
{
"title": ticket.get("title"),
"type": ticket.get("type"),
"created_at": ticket.get("created_at"),
"close_at": ticket.get("close_at"),
"state_id": ticket.get("state_id"),
"pending_time": ticket.get("pending_time"),
"number": ticket.get("number"),
"organization_id": ticket.get("organization_id"),
"customer_id": ticket.get("customer_id"),
}
for ticket in tickets
]
return tickets_filtrados, 200
else:
return jsonify({
"error": f"Erro ao buscar tickets: {response.status_code}",
"details": response.text
}), response.status_code
return {"error": f"Erro ao buscar tickets: {response.status_code}", "details": response.text}, response.status_code
except requests.exceptions.RequestException as e:
# Captura problemas de conexão ou requisição
return jsonify({"error": "Erro na requisição à API", "details": str(e)}), 500
return {"error": "Erro na requisição à API", "details": str(e)}, 500
except Exception as e:
# Captura quaisquer outros erros inesperados
return jsonify({"error": "Erro interno ao processar a solicitação", "details": str(e)}), 500
return {"error": "Erro interno ao processar a solicitação", "details": str(e)}, 500