122 lines
4.2 KiB
JavaScript
122 lines
4.2 KiB
JavaScript
import api from './api';
|
|
import { authMock } from './mocks/authMock';
|
|
import { handleRequest } from './serviceUtils';
|
|
import { extractUserFromToken } from '@/utils/jwtUtils';
|
|
|
|
/**
|
|
* Serviço de autenticação para o Integra Finance (PRALOG).
|
|
* Gerencia a comunicação com o endpoint /auth_pralog do backend.
|
|
*/
|
|
export const authService = {
|
|
/**
|
|
* Autentica um usuário no sistema Pralog.
|
|
*
|
|
* @param {string} email - Email do usuário
|
|
* @param {string} password - Senha do usuário
|
|
* @returns {Promise<{token: string, user: Object}>} Token de autenticação e dados do usuário
|
|
*
|
|
* @example
|
|
* const { token, user } = await authService.authenticatePralog('admin@pralog.com', 'admin123');
|
|
*/
|
|
authenticatePralog: (email, password) => handleRequest({
|
|
mockFn: () => authMock.authenticate(email, password),
|
|
apiFn: async () => {
|
|
try {
|
|
const response = await api.post('/auth_pralog', {
|
|
email,
|
|
password
|
|
});
|
|
|
|
// Data Mapping: Backend retorna apenas { token }
|
|
// Precisamos criar o objeto user a partir do email fornecido
|
|
const { token } = response.data;
|
|
|
|
if (!token) {
|
|
throw new Error('Token não retornado pelo servidor');
|
|
}
|
|
|
|
// Extrai informações do token JWT
|
|
const tokenData = extractUserFromToken(token);
|
|
|
|
// Criar objeto user com dados do token e do email fornecido
|
|
const user = {
|
|
id: null, // Backend não retorna ID na autenticação
|
|
name: email.split('@')[0], // Extrai nome do email
|
|
email: tokenData?.email || email,
|
|
database: tokenData?.database || null, // Database do JWT
|
|
role: 'user', // Role padrão
|
|
permissions: [] // Permissões podem ser obtidas em outra rota
|
|
};
|
|
|
|
// Retorna no formato esperado pelo hook
|
|
return { token, user };
|
|
} catch (error) {
|
|
// Tratamento de erros específicos
|
|
if (error.response) {
|
|
// Erro retornado pelo servidor
|
|
const status = error.response.status;
|
|
const message = error.response.data?.message || 'Erro ao autenticar';
|
|
|
|
if (status === 401) {
|
|
throw new Error('Credenciais inválidas. Verifique seu email e senha.');
|
|
} else if (status === 403) {
|
|
throw new Error('Acesso negado. Você não tem permissão para acessar este sistema.');
|
|
} else if (status === 500) {
|
|
throw new Error('Erro no servidor. Tente novamente mais tarde.');
|
|
} else {
|
|
throw new Error(message);
|
|
}
|
|
} else if (error.request) {
|
|
// Requisição foi feita mas não houve resposta
|
|
throw new Error('Não foi possível conectar ao servidor. Verifique sua conexão.');
|
|
} else {
|
|
// Erro na configuração da requisição
|
|
throw new Error('Erro ao processar a requisição: ' + error.message);
|
|
}
|
|
}
|
|
}
|
|
}),
|
|
|
|
/*
|
|
* Autentica um usuário no sistema de Monitoramento de Frota (Pralog Frota).
|
|
*/
|
|
loginMonitoramento: (email, password) => handleRequest({
|
|
mockFn: () => authMock.authenticate(email, password),
|
|
apiFn: async () => {
|
|
const response = await api.post('/auth_pralog', {
|
|
email,
|
|
password
|
|
});
|
|
const { token } = response.data;
|
|
const tokenData = extractUserFromToken(token);
|
|
const user = {
|
|
id: null,
|
|
name: email.split('@')[0],
|
|
email: tokenData?.email || email,
|
|
database: tokenData?.database || null,
|
|
role: 'user',
|
|
permissions: [],
|
|
authorizedEnvironments: { rh: true }
|
|
};
|
|
return { token, user };
|
|
}
|
|
}),
|
|
|
|
/**
|
|
* Valida se um token ainda é válido.
|
|
*
|
|
* @param {string} token - Token a ser validado
|
|
* @returns {Promise<boolean>} True se o token é válido
|
|
*/
|
|
validateToken: (token) => handleRequest({
|
|
mockFn: async () => {
|
|
// Mock sempre retorna válido se houver token
|
|
return { valid: !!token };
|
|
},
|
|
apiFn: async () => {
|
|
const response = await api.post('/auth_pralog/validate', { token });
|
|
return response.data;
|
|
}
|
|
})
|
|
};
|