-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
115 lines (90 loc) · 2.92 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
const express = require('express');
const bodyParser = require('body-parser');
const jwt = require('jsonwebtoken');
const { v4: uuidv4 } = require('uuid');
const app = express();
const PORT = 3000;
app.use(bodyParser.json());
// Senha utilizada para assinatura digital
const SECRET = 'jotaefe';
// Simulando um armazenamento em memória
const users = [];
// Função para obter a data atual em formato string
const getCurrentDateTime = () => new Date().toISOString();
// Endpoint de cadastro (sign up)
app.post('/signup', (req, res) => {
const { nome, email, senha, telefone } = req.body;
// Verifica se o usuário já existe
const userExists = users.some(user => user.email === email);
if (userExists) {
return res.status(400).json({ error: 'E-mail já existente' });
}
// Token JWT
const chave = jwt.sign({id: uuidv4()}, SECRET, { expiresIn: 1800 });
// Cria um novo usuário
const newUser = {
id: uuidv4(),
nome,
email,
senha,
telefone,
data_criacao: getCurrentDateTime(),
data_atualizacao: getCurrentDateTime(),
ultimo_login: null, // Definido como nulo inicialmente
token: chave
};
users.push(newUser);
return res.status(201).json({
id: newUser.id,
data_criacao: newUser.data_criacao,
data_atualizacao: newUser.data_atualizacao,
ultimo_login: newUser.ultimo_login,
token: newUser.token,
});
});
// Endpoint de autenticação (sign in)
app.post('/signin', (req, res) => {
const { email, senha } = req.body;
// Verifica se o usuário existe
const user = users.find(user => user.email === email);
if (!user || user.senha !== senha) {
return res.status(401).json({ error: 'Usuário e/ou senha inválidos' });
}
// Atualiza a última data de login
user.ultimo_login = getCurrentDateTime();
return res.json({
id: user.id,
data_criacao: user.data_criacao,
data_atualizacao: user.data_atualizacao,
ultimo_login: user.ultimo_login,
token: user.token
});
});
// Endpoint de recuperação de informações do usuário
app.get('/user/:email', (req, res) => {
const { email } = req.params;
const token = req.headers.authorization; // Pega o token do cabeçalho
// Verifica se o usuário existe
const user = users.find(user => user.email === email);
if (!user) {
return res.status(404).json({ error: 'Não autorizado' });
}
// Verifica se o token no cabeçalho é válido
jwt.verify(token, SECRET, (err, decoded) => {
if (err) {
return res.status(401).json({ error: 'Token inválido' });
}
// Verifica se o token do usuário é igual ao token do cabeçalho
if (token !== user.token) {
return res.status(401).json({ error: 'Não autorizado' });
}
return res.json(user);
});
});
// Tratamento de endpoint não encontrado
app.use((req, res) => {
res.status(404).json({ error: 'Endpoint não encontrado.' });
});
app.listen(PORT, () => {
console.log(`Servidor rodando na porta ${PORT}`);
});