Browse Source

Phase III Task 4

master
Yutsuo 7 years ago
parent
commit
6a0dd53574
  1. 14
      README.md
  2. 6
      docker-compose.yml
  3. 55
      node/app.js
  4. 3
      node/package.json

14
README.md

@ -8,4 +8,16 @@ Segunda tarefa:
Crie uma página HTML que solicite usuário/senha, invoque o serviço da primeira tarefa e mostre a mensagem "Autenticado com sucesso" ou "Falha na autenticação".
Essa página deve estar em um segundo container e servida por NGINX. Mande o print da sua tela!
Essa página deve estar em um segundo container e servida por NGINX. Mande o print da sua tela!
Terceira tarefa:
Faça com que a geração de token (/token) para o usuário 'power', com senha 'weak', inclua no token JWT o scope "admin".
Quarta tarefa:
Crie um endpoint REST '/restricted' que receba o token JWT e retorne o JSON "{message:'You have access to restricted contents!'} caso o token tenha scope "admin". Crie uma página HTML também que mostre essa mensagem retornada pelo serviço. Mande prints de telas mostrando acesso ao conteúdo com sucesso e sem sucesso.
Quinta tarefa:
Altere o serviço '/restricted' e adicione ao cabeçalho HTTP de retorno 'HOSTNAME=[container-hostname]' para identificarmos a instância do container que atendeu à requisição. Mande o print da chamada cURL mostrando esse cabeçalho HTTP na resposta.

6
docker-compose.yml

@ -36,6 +36,12 @@ services:
networks:
- network_1
# - network_2
deploy:
resources:
limits:
memory: 50M
reservations:
memory: 20M
mongo:
container_name: mongo
build: ./mongo

55
node/app.js

@ -10,6 +10,10 @@ const fs = require('file-system');
const marked = require('marked');
const jwt = require('jsonwebtoken');
const bodyParser= require('body-parser');
// const morgan = require('morgan');
// use morgan to log requests to the console
// app.use(morgan('dev'));
// database connection (with retries)
const options = {
@ -85,16 +89,22 @@ app.get('/metrics2', function(req, res){
})
// JWT generation
var claims = { scope: 'admin' };
// app.use(express.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.post('/token', function(req, res){
console.log(req.body);
console.log(req.body.username);
console.log(req.body.password);
if (req.body.username=='user1') {
if (req.body.password=='pass1') {
var token = jwt.sign(req.body, 'wowmuchsecretveryhiddenwow');
console.log('username: ' + req.body.username);
console.log('password: ' + req.body.password);
if (req.body.username === 'user1') {
if (req.body.password === 'pass1') {
// var token = jwt.sign(req.body, 'wowmuchsecretveryhiddenwow');
var token = jwt.sign({
username: req.body.username,
password: req.body.password
}, 'wowmuchsecretveryhiddenwow');
console.log(token);
console.log(jwt.decode(token));
// res.json(token);
// res.status(200).json({
// success: 'SUCCESS! You\'re in.',
@ -102,15 +112,44 @@ app.post('/token', function(req, res){
// });
res.redirect('http://localhost/yay.html');
} else {
// res.status(500).send('this is not the password I expected');
// res.status(500).send('wrong password');
res.redirect('http://localhost/nay.html');
}
} else {
// res.status(500).send('this is not the user I want');
res.redirect('http://localhost/nay.html');
if (req.body.username === 'power') {
if (req.body.password === 'weak') {
var token = jwt.sign({
subject: 'power#9123741',
issuer: 'http://youcantrustme.io',
scope: 'admin'
}, 'wowmuchsecretveryhiddenwow');
console.log('JWT Token: ' + token);
console.log(jwt.decode(token));
req.headers['access-token'] = token;
res.redirect('http://localhost/yay.html');
} else {
res.redirect('http://localhost/nay.html');
}
} else {
// res.status(500).send('user not found');
res.redirect('http://localhost/nay.html');
}
console.log('\x1b[36m%s\x1b[0m','HEADER (req.headers): ' + req.headers['access-token']);
}
});
const restrictRoutes = express.Router();
app.use('/restricted', restrictRoutes);
restrictRoutes.use((req, res, next) => {});
// app.post('/token2', function(req, res){
// switch (req.body.username) {
// }
// })
// Default message for testing
app.get('/', (req, res)=>{
res.json([{message:'yes, your nodejs app is really running'}]);

3
node/package.json

@ -20,6 +20,7 @@
"file-system": "^2.2.2",
"marked": "^0.5.2",
"body-parser": "^1.18.3",
"jsonwebtoken": "^8.4.0"
"jsonwebtoken": "^8.4.0",
"morgan": "^1.9.1"
}
}

Loading…
Cancel
Save