user redis
This commit is contained in:
0
nodejs/models/auth.js → nodejs/models/auth_pam.js
Executable file → Normal file
0
nodejs/models/auth.js → nodejs/models/auth_pam.js
Executable file → Normal file
55
nodejs/models/auth_red.js
Normal file
55
nodejs/models/auth_red.js
Normal file
@ -0,0 +1,55 @@
|
||||
const {promisify} = require('util');
|
||||
const pam = require('authenticate-pam');
|
||||
const authenticate = promisify(pam.authenticate);
|
||||
|
||||
const {User} = require('./user');
|
||||
const {Token, AuthToken} = require('./token');
|
||||
|
||||
Auth = {}
|
||||
Auth.errors = {}
|
||||
|
||||
Auth.errors.login = function(){
|
||||
let error = new Error('PamLoginFailed');
|
||||
error.name = 'PamLoginFailed';
|
||||
error.message = `Invalid Credentials, login failed.`;
|
||||
error.status = 401;
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
Auth.login = async function(data){
|
||||
try{
|
||||
let auth = await authenticate(data.username, data.password);
|
||||
let user = await User.get(data);
|
||||
let token = await AuthToken.add(user);
|
||||
|
||||
return {user, token}
|
||||
}catch(error){
|
||||
if (error == 'Authentication failure'){
|
||||
throw this.errors.login()
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
Auth.checkToken = async function(data){
|
||||
try{
|
||||
let token = await AuthToken.get(data);
|
||||
if(token.is_valid){
|
||||
return await User.get(token.created_by);
|
||||
}
|
||||
}catch(error){
|
||||
throw this.errors.login();
|
||||
}
|
||||
};
|
||||
|
||||
Auth.logOut = async function(data){
|
||||
try{
|
||||
let token = await AuthToken.get(data);
|
||||
await token.remove();
|
||||
}catch(error){
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {Auth, AuthToken};
|
62
nodejs/models/auth_redis.js
Normal file
62
nodejs/models/auth_redis.js
Normal file
@ -0,0 +1,62 @@
|
||||
'use strict';
|
||||
|
||||
const bcrypt = require('bcrypt');
|
||||
const saltRounds = 10;
|
||||
|
||||
const {User} = require('./user_redis');
|
||||
const {Token, AuthToken} = require('./token');
|
||||
|
||||
var Auth = {}
|
||||
Auth.errors = {}
|
||||
|
||||
Auth.errors.login = function(){
|
||||
let error = new Error('ResisLoginFailed');
|
||||
error.name = 'RedisLoginFailed';
|
||||
error.message = `Invalid Credentials, login failed.`;
|
||||
error.status = 401;
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
Auth.login = async function(data){
|
||||
try{
|
||||
let user = await User.get(data);
|
||||
|
||||
let auth = await bcrypt.compare(data.password, user.password);
|
||||
|
||||
if(auth){
|
||||
let token = await AuthToken.add(user);
|
||||
|
||||
return {user, token}
|
||||
}else{
|
||||
throw this.errors.login();
|
||||
}
|
||||
}catch(error){
|
||||
if (error == 'Authentication failure'){
|
||||
throw this.errors.login()
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
Auth.checkToken = async function(data){
|
||||
try{
|
||||
let token = await AuthToken.get(data);
|
||||
if(token.is_valid){
|
||||
return await User.get(token.created_by);
|
||||
}
|
||||
}catch(error){
|
||||
throw this.errors.login();
|
||||
}
|
||||
};
|
||||
|
||||
Auth.logOut = async function(data){
|
||||
try{
|
||||
let token = await AuthToken.get(data);
|
||||
await token.remove();
|
||||
}catch(error){
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {Auth, AuthToken};
|
@ -1,6 +1,6 @@
|
||||
'use strict';
|
||||
|
||||
const Host = require('../utils/redis_model')({
|
||||
const Host = new require('../utils/redis_model')({
|
||||
_name: 'host',
|
||||
_key: 'host',
|
||||
_keyMap: {
|
||||
|
0
nodejs/models/user.js → nodejs/models/user_pam.js
Executable file → Normal file
0
nodejs/models/user.js → nodejs/models/user_pam.js
Executable file → Normal file
100
nodejs/models/user_redis.js
Normal file
100
nodejs/models/user_redis.js
Normal file
@ -0,0 +1,100 @@
|
||||
'use strict';
|
||||
|
||||
const objValidate = require('../utils/object_validate');
|
||||
const {Token, InviteToken} = require('./token');
|
||||
const bcrypt = require('bcrypt');
|
||||
const saltRounds = 10;
|
||||
|
||||
const User = require('../utils/redis_model')({
|
||||
_name: 'user',
|
||||
_key: 'username',
|
||||
_keyMap: {
|
||||
'created_by': {isRequired: true, type: 'string', min: 3, max: 500},
|
||||
'created_on': {default: function(){return (new Date).getTime()}},
|
||||
'updated_by': {default:"__NONE__", isRequired: false, type: 'string',},
|
||||
'updated_on': {default: function(){return (new Date).getTime()}, always: true},
|
||||
'username': {isRequired: true, type: 'string', min: 3, max: 500},
|
||||
'password': {isRequired: true, type: 'string', min: 3, max: 500},
|
||||
'backing': {default:"redis", isRequired: false, type: 'string',},
|
||||
}
|
||||
});
|
||||
|
||||
User.add = async function(data) {
|
||||
try{
|
||||
data['password'] = await bcrypt.hash(data['password'], saltRounds);
|
||||
data['backing'] = data['backing'] || 'redis';
|
||||
|
||||
|
||||
return this.__proto__.add(data);
|
||||
|
||||
}catch(error){
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
User.addByInvite = async function(data){
|
||||
try{
|
||||
let token = await InviteToken.get(data.token);
|
||||
|
||||
if(!token.is_valid){
|
||||
let error = new Error('Token Invalid');
|
||||
error.name = 'Token Invalid';
|
||||
error.message = `Token is not valid or as allready been used. ${data.token}`;
|
||||
error.status = 401;
|
||||
throw error;
|
||||
}
|
||||
|
||||
let user = await this.add(data);
|
||||
|
||||
if(user){
|
||||
await token.consume({claimed_by: user.username});
|
||||
return user;
|
||||
}
|
||||
|
||||
}catch(error){
|
||||
throw error;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
User.setPassword = async function(data){
|
||||
try{
|
||||
data['password'] = await bcrypt.hash(data['password'], saltRounds);
|
||||
|
||||
return this.__proto__.update(data);
|
||||
}catch(error){
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
User.invite = async function(){
|
||||
try{
|
||||
let token = await InviteToken.add({created_by: this.username});
|
||||
|
||||
return token;
|
||||
|
||||
}catch(error){
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = {User};
|
||||
|
||||
|
||||
(async function(){
|
||||
try{
|
||||
await User.get('proxyadmin1');
|
||||
console.info('proxyadmin1 user exists');
|
||||
}catch(error){
|
||||
try{
|
||||
let user = await User.add({
|
||||
username:'proxyadmin1',
|
||||
password: 'proxyadmin1',
|
||||
created_by:'proxyadmin1'
|
||||
});
|
||||
console.log('proxyadmin1 created', user);
|
||||
}catch(error){
|
||||
console.error(error)
|
||||
}
|
||||
}
|
||||
})();
|
Reference in New Issue
Block a user