Novo Ambiente | Atualização 3
This commit is contained in:
parent
d2c8745c45
commit
02ddd529be
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
|
|
@ -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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -78,10 +78,9 @@ def login():
|
|||
if not is_valid_email(username_full):
|
||||
return jsonify({'msg': 'Formato de e-mail inválido'}), 400
|
||||
|
||||
# Separar nome de usuário e domínio
|
||||
# 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
|
||||
|
||||
|
|
@ -90,13 +89,11 @@ def login():
|
|||
with mysql.connection.cursor() as cur:
|
||||
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:
|
||||
|
|
@ -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)
|
||||
|
|
@ -120,20 +117,19 @@ def login():
|
|||
server,
|
||||
user=username_full,
|
||||
password=password,
|
||||
authentication=ldap3.SIMPLE
|
||||
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}")
|
||||
|
|
@ -149,8 +145,5 @@ def login():
|
|||
logging.error(f"Erro inesperado: {str(e)}")
|
||||
return jsonify({'msg': 'Erro inesperado durante a autenticação.'}), 500
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue