Skip to content

Commit

Permalink
adding token auth
Browse files Browse the repository at this point in the history
  • Loading branch information
FrancisZamora committed Aug 2, 2018
1 parent 96f730e commit 5eb780f
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 30 deletions.
3 changes: 3 additions & 0 deletions manifest.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ const manifest = {
{
plugin: 'hapi-auth-cookie'
},
{
plugin: 'hapi-auth-jwt2'
},
{
plugin: 'hapi-auth-basic'
},
Expand Down
10 changes: 5 additions & 5 deletions server/anchor/anchor-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const register = function (server,serverOptions) {
path:'/api/{collectionName}',
options: {
auth: {
strategies: ['session','simple'],
strategies: ['simple','session','token'],
mode: 'try'
},
pre: [{
Expand Down Expand Up @@ -80,7 +80,7 @@ const register = function (server,serverOptions) {
path: '/api/{collectionName}/{id}',
options: {
auth: {
strategies: ['simple','session'],
strategies: ['simple','session','token'],
mode: 'try'
},
pre: [{
Expand Down Expand Up @@ -193,7 +193,7 @@ const register = function (server,serverOptions) {
path: '/api/{collectionName}/{id}',
options: {
auth: {
strategies: ['simple','session'],
strategies: ['simple','session','token'],
mode:'try'
},
pre: [{
Expand Down Expand Up @@ -249,7 +249,7 @@ const register = function (server,serverOptions) {
path: '/api/{collectionName}/{id}',
options: {
auth: {
strategies: ['simple','session'],
strategies: ['simple','session','token'],
mode:'try'
},
pre: [{
Expand Down Expand Up @@ -325,7 +325,7 @@ const register = function (server,serverOptions) {
}
},
auth: {
strategies: ['simple','session'],
strategies: ['simple','session','token'],
mode: 'try'
},
pre: [{
Expand Down
2 changes: 1 addition & 1 deletion server/anchor/anchor-model.js
Original file line number Diff line number Diff line change
Expand Up @@ -913,7 +913,7 @@ AnchorModel.routes = {
auth: true,
disabled: false,
create: {
auth: true,
auth: false,
disabled: false,
payload: null,
handler: async (request,h) => {
Expand Down
59 changes: 44 additions & 15 deletions server/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ const Config = require('../config');
const Session = require('./models/session');
const User = require('./models/user');
const Token = require('./models/token');
const Jwt2 = require('hapi-auth-jwt2');
const Crypto = require('crypto');
const Crypto = require('./crypto');


const register = function (server, options) {
Expand Down Expand Up @@ -37,38 +36,68 @@ const register = function (server, options) {
}
});

server.auth.strategy('token','jwt2', {
validate: async function (request,id) {
server.auth.strategy('token','jwt', {
key: Config.get('/cookieSecret'),
validate: async function (id,request) {

console.log('TOKEN');
console.log(id);

const split = id.split(':');


const tokenId = split[0];
const password = split[1];

console.log(tokenId);


const token = await Token.findById(tokenId);
if (token) {
console.log(token);
}
const user = await User.findById(token.userId);

if (user) {
console.log(user);
}

const token = await Token.FindByID(id);
const user = await User.findByID(token.userId);

if (!user) {
console.log('USERINVALID');
return { isValid: false };
}

if (!user.isActive) {
console.log('USER NOT ACTIVE');
return { isValid: false };
}

if (Crypto.compare(token,token)){
console.log('passing through');
console.log(password);
console.log(token.token);
console.log('passing again');
if (await Crypto.compare(password,token.token)){
console.log('comparison completed');
const credentials = {
user,
session: token
};

return { credentials, session: token };

}
return { isValid: false };

console.log('passing tests');

return { credentials, isValid: true };

}

}
console.log('comparison failed');
return { isValid: false };
},
verifyOptions: { algorithms: ['HS256'] }
});



server.auth.strategy('session', 'cookie', {
password: Config.get('/cookieSecret'),
cookie: 'anchor-auth',
Expand Down Expand Up @@ -113,8 +142,8 @@ module.exports = {
dependencies: [
'hapi-auth-basic',
'hapi-auth-cookie',
'hapi-anchor-model',
'hapi-auth-jwt2'
'hapi-auth-jwt2',
'hapi-anchor-model'
],
register
};
1 change: 1 addition & 0 deletions server/crypto.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class Crypto {

static async compare(key,token) {

console.log('COMPARING');
return await Bcrypt.compare(key, token);

}
Expand Down
18 changes: 9 additions & 9 deletions server/models/token.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,32 @@ const Crypto = require('../crypto');
const Hoek = require('hoek');
const Joi = require('joi');
const JWT = require('jsonwebtoken');

const Config = require('../../config');
// const config -> require cookie secret for JWT

class Token extends AnchorModel {


static async create(document) {

const keyHash = await Crypto.generateKeyHash();
keyHash.key = JWT.sign({ key: keyHash.key }, 'secret');
const signedKeyHash = JWT.sign({ key : keyHash.hash }, 'secret');

document = {
description: document.description,
active: true,
createdAt: new Date(),
token:signedKeyHash,
token:keyHash.hash,
userId: document.userId







};

const token = await this.insertOne(document);
console.log(token[0]._id);
keyHash.key = JWT.sign(( token[0]._id + ':' + keyHash.key), Config.get('/cookieSecret'));
console.log(keyHash.key);

token[0].key = keyHash.key;

return token[0];
Expand All @@ -56,7 +55,7 @@ Token.schema = Joi.object({
Token.payload = Joi.object({
userId: Joi.string().required(),
description: Joi.string().required(),
active: Joi.boolean().required(),
active: Joi.boolean(),
permission: Joi.object()
});

Expand All @@ -66,6 +65,7 @@ Token.routes = Hoek.applyToDefaults(AnchorModel.routes, {
payload: Token.payload
},
update: {
auth: true,
payload: Token.payload
},
delete: {
Expand Down

0 comments on commit 5eb780f

Please sign in to comment.