Skip to content

Commit

Permalink
feat: added middleware verification and fix column name
Browse files Browse the repository at this point in the history
  • Loading branch information
caioagiani committed Oct 14, 2020
1 parent 30fc8a1 commit 757e3c4
Show file tree
Hide file tree
Showing 8 changed files with 89 additions and 51 deletions.
19 changes: 9 additions & 10 deletions README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -133,25 +133,24 @@ Observação importante: rota `/user/:user_id` é necessário passsar no **heade

## Test

```java
caioh@developer MINGW64 ~/OneDrive/Documentos/Node/api-sky
$ yarn test
yarn run v1.22.0
```javascript
caio-agiani in api-restful on  master [!] took 2s ❯ yarn test
yarn run v1.22.5
$ jest --setupFiles dotenv/config --detectOpenHandles --forceExit
PASS tests/api.test.js (6.721 s)
PASS tests/api.test.js
Authentication
should create session authentication (5382 ms)
should create session authentication (1233 ms)
Login
should create user session (24 ms)
should create user session (131 ms)
User
should list user by id (7 ms)
should list user by id (9 ms)

Test Suites: 1 passed, 1 total
Tests: 3 passed, 3 total
Snapshots: 0 total
Time: 6.776 s, estimated 17 s
Time: 2.136 s
Ran all test suites.
Done in 7.37s.
Done in 2.58s.
```

## Contato
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@
"cors": "^2.8.5",
"express": "^4.17.1",
"jsonwebtoken": "^8.5.1",
"mongoose": "^5.9.15"
"mongoose": "^5.9.15",
"yup": "^0.29.3"
},
"devDependencies": {
"dotenv": "^8.2.0",
Expand Down
21 changes: 9 additions & 12 deletions src/app/controllers/UserController.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const bcryptjs = require('bcryptjs');
const { createToken } = require('./TokenController');
const { createToken } = require('../middlewares/Token');

const User = require('../models/User');

Expand All @@ -14,8 +14,7 @@ module.exports = {

const user = await User.findById({ _id: user_id });

user.password = undefined;
user.__v = undefined;
user.senha = undefined;

return res.status(200).json(user);
},
Expand All @@ -31,24 +30,23 @@ module.exports = {

const user = await User.create(req.body);

user.password = undefined;
user.__v = undefined;
user.senha = undefined;

return res.status(200).json(user);
},

async show(req, res) {
const { email, password } = req.body;
const { email, senha } = req.body;

const user = await User.findOne({ email }, '+password');
const user = await User.findOne({ email }, '+senha');

if (!user) {
return res
.status(400)
.json({ mensagem: 'Usuário e/ou senha inválidos.' });
}

const checkPass = await bcryptjs.compare(password, user.password);
const checkPass = bcryptjs.compareSync(senha, user.senha);

if (!checkPass) {
return res
Expand All @@ -58,17 +56,16 @@ module.exports = {

const token = createToken({
id: user.id,
name: user.name,
nome: user.nome,
email
});

await User.findOneAndUpdate(
{ _id: user._id },
{ token, lastLoginAt: Date.now() }
{ token, data_ultima_atualizacao: Date.now() }
);

user.password = undefined;
user.__v = undefined;
user.senha = undefined;
user.token = token;

return res.status(200).json(user);
Expand Down
39 changes: 39 additions & 0 deletions src/app/middlewares/Check.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
const Yup = require('yup');

module.exports = {
async SingIn(req, res, next) {
try {
const schema = Yup.object().shape({
email: Yup.string().email().required(),
senha: Yup.string().required()
});

await schema.validate(req.body, { abortEarly: false });

return next();
} catch (error) {
return res.json({ error });
}
},
async SingUp(req, res, next) {
try {
const schema = Yup.object().shape({
nome: Yup.string().required(),
email: Yup.string().email().required(),
senha: Yup.string().required(),
telefones: Yup.array(
Yup.object().shape({
numero: Yup.string().required(),
ddd: Yup.string().required()
})
)
});

await schema.validate(req.body, { abortEarly: false });

return next();
} catch (error) {
return res.json({ error });
}
}
};
File renamed without changes.
18 changes: 9 additions & 9 deletions src/app/models/User.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
const { Schema, model } = require('mongoose');
const bcryptjs = require('bcryptjs');
const { hashSync } = require('bcryptjs');

const UserSchema = new Schema(
{
name: {
nome: {
type: String,
required: true
},
Expand All @@ -19,12 +19,12 @@ const UserSchema = new Schema(
ddd: String
}
],
password: {
senha: {
type: String,
required: true,
select: false
},
lastLoginAt: {
data_ultima_atualizacao: {
type: Date,
default: Date.now()
},
Expand All @@ -34,18 +34,18 @@ const UserSchema = new Schema(
}
},
{
timestamps: true
timestamps: { createdAt: 'data_criacao', updatedAt: 'data_atualizacao' }
}
);

UserSchema.pre('save', async function () {
this.password = await bcryptjs.hash(this.password, 1);
UserSchema.pre('save', function () {
this.senha = hashSync(this.senha, 1);
});

UserSchema.pre('updateOne', async function () {
const pass = this.getUpdate().password;
const pass = this.getUpdate().senha;

if (pass) this.getUpdate().password = bcryptjs.hashSync(pass, 10);
if (pass) this.getUpdate().senha = hashSync(pass, 10);
});

module.exports = model('User', UserSchema);
6 changes: 4 additions & 2 deletions src/routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@ const {
AuthMiddleware
} = require('./app/controllers');

const { SingIn, SingUp } = require('./app/middlewares/Check');

routes
.post('/login', UserController.show)
.post('/user/create', UserController.store)
.post('/login', SingIn, UserController.show)
.post('/user/create', SingUp, UserController.store)
.get('/user/:user_id', AuthMiddleware, UserController.index);

module.exports = routes;
34 changes: 17 additions & 17 deletions tests/api.test.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,14 @@
const request = require('supertest');
const app = require('../src/app');

describe('Authentication', () => {
it('should create session authentication', async (done) => {
const response = await request(app).post('/login').send({
email: '[email protected]',
password: '123'
});

expect(response.status).toBe(200);
done();
});
});

describe('Login', () => {
describe('Create', () => {
it('should create user session', async (done) => {
const response = await request(app)
.post('/user/create')
.send({
name: 'Caio Agiani',
email: 'caio.agiani14@gmail.com',
password: '123',
nome: 'Caio Agiani',
email: `caio.agiani${Math.floor(Math.random() * 9999) + 1}@gmail.com`,
senha: '123123123',
telefones: [
{
numero: '999865802',
Expand All @@ -34,10 +22,22 @@ describe('Login', () => {
});
});

describe('Authentication', () => {
it('should create session authentication', async (done) => {
const response = await request(app).post('/login').send({
email: '[email protected]',
senha: '123'
});

expect(response.status).toBe(200);
done();
});
});

describe('User', () => {
it('should list user by id', async (done) => {
const response = await request(app)
.get('/user/5ec46b12bf6de842bc001b08')
.get('/user/5f877dc25d9f7b5c08f77c16')
.send();

expect(response.status).toBe(401);
Expand Down

0 comments on commit 757e3c4

Please sign in to comment.