First commit
This commit is contained in:
397
framework/server/userManager.js
Normal file
397
framework/server/userManager.js
Normal file
@@ -0,0 +1,397 @@
|
||||
/*
|
||||
|
||||
Copyright (c) 2020, 2023, The Unified Company.
|
||||
|
||||
This code is part of Unify.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the ESA Software Community License - Strong Copyleft LICENSE,
|
||||
as published by the ESA.
|
||||
See the ESA Software Community License - Strong Copyleft LICENSE, for more details.
|
||||
|
||||
https://unifyjs.org
|
||||
|
||||
*/
|
||||
|
||||
|
||||
import unify from '../unify/unify.js';
|
||||
|
||||
class visitor{
|
||||
|
||||
value = 2.0;
|
||||
|
||||
label = "Member";
|
||||
|
||||
color = "black";
|
||||
|
||||
type = "userGroup";
|
||||
|
||||
|
||||
}
|
||||
|
||||
class userManager{
|
||||
|
||||
computePermissions( object, user ) {
|
||||
|
||||
var permissions = new Object();
|
||||
|
||||
if( object.isAllowed( user, "WRITE" ) ) {
|
||||
|
||||
permissions.WRITE = true;
|
||||
|
||||
} else {
|
||||
|
||||
permissions.WRITE = false;
|
||||
|
||||
}
|
||||
|
||||
if( object.isAllowed( user, "DELETE" ) ) {
|
||||
|
||||
permissions.DELETE = true;
|
||||
|
||||
} else {
|
||||
|
||||
permissions.DELETE = false;
|
||||
|
||||
}
|
||||
|
||||
if( object.isAllowed( user, "READ" ) ) {
|
||||
|
||||
permissions.READ = true;
|
||||
|
||||
} else {
|
||||
|
||||
permissions.READ = false;
|
||||
|
||||
}
|
||||
|
||||
return permissions;
|
||||
|
||||
}
|
||||
|
||||
getPermissions( user, client ) {
|
||||
|
||||
var root = client.application;
|
||||
|
||||
client.permissionObjects = [];
|
||||
|
||||
this.getPermissionsChildren( user, client, root );
|
||||
|
||||
return client.permissionObjects;
|
||||
|
||||
}
|
||||
|
||||
createToken() {
|
||||
|
||||
var token = "";
|
||||
|
||||
for (var i = 0; i < 40; i++) {
|
||||
|
||||
token += Math.floor(Math.random() * 10);
|
||||
|
||||
}
|
||||
|
||||
return token;
|
||||
|
||||
}
|
||||
|
||||
getPermissionsRenderCollection( object, client, user ) {
|
||||
|
||||
var rows = object.rows;
|
||||
|
||||
for( var b = 0; b < rows.length; b++) {
|
||||
|
||||
var rowObject = rows[b];
|
||||
|
||||
var permission = this.getPermissionFromObject( rowObject, user );
|
||||
|
||||
if( permission ) {
|
||||
|
||||
client.permissionObjects.push( permission );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
getPermissionsChildrenObjects( objects, client, user ) {
|
||||
|
||||
for( var c = 0; c < objects.length; c++) {
|
||||
|
||||
var object = objects[c];
|
||||
|
||||
var permission = this.getPermissionFromObject( object, user );
|
||||
|
||||
if( permission ) {
|
||||
|
||||
client.permissionObjects.push( permission );
|
||||
|
||||
}
|
||||
|
||||
if( object.type == "renderCollection" ) {
|
||||
|
||||
this.getPermissionsRenderCollection( object, client, user );
|
||||
|
||||
}
|
||||
|
||||
this.getPermissionsChildren( user, client, object );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
getPermissionsChildren( user, client, object ) {
|
||||
|
||||
unify.extend( object );
|
||||
|
||||
if( object.getChildren ) {
|
||||
|
||||
var objects = object.getChildren();
|
||||
|
||||
var permissionObjects = new Array();
|
||||
|
||||
this.getPermissionsChildrenObjects( objects, client, user );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
getPermissionFromObject( object, user ) {
|
||||
|
||||
var permissionManager = object.permissionManager;
|
||||
|
||||
if( permissionManager && permissionManager.permissions.length > 0 && object.parent ) {
|
||||
|
||||
var objectPermission = {};
|
||||
|
||||
object.updated = true;
|
||||
|
||||
objectPermission.path = object.getApplicationPath().join("/")
|
||||
|
||||
objectPermission.permission = this.computePermissions( object, user );
|
||||
|
||||
return objectPermission;
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
createVisitor( client ) {
|
||||
|
||||
var table = new global.user();
|
||||
|
||||
table.username.value = "Visitor";
|
||||
|
||||
table.id = 0;
|
||||
|
||||
table.groups = new visitor();
|
||||
|
||||
table.permissionObjects = this.getPermissions( table, client );
|
||||
|
||||
return table;
|
||||
|
||||
}
|
||||
|
||||
signOut( cookieUser, client, eventName ) {
|
||||
|
||||
if( client.user ) {
|
||||
|
||||
client.user.get();
|
||||
|
||||
client.user.sessionKey.value = "";
|
||||
|
||||
client.user.save();
|
||||
|
||||
}
|
||||
|
||||
var table = this.createVisitor( client );
|
||||
|
||||
client.user = table;
|
||||
|
||||
global.core.setUserObjects( false, client );
|
||||
|
||||
return table;
|
||||
|
||||
}
|
||||
|
||||
|
||||
signin( object, client, force = false ) {
|
||||
|
||||
console.log("try to sign in");
|
||||
|
||||
var visitor = this.createVisitor( client );
|
||||
|
||||
if( object.table ) {
|
||||
|
||||
table = object;
|
||||
|
||||
} else {
|
||||
|
||||
var table = new global.user();
|
||||
|
||||
}
|
||||
|
||||
client.user = visitor;
|
||||
|
||||
client.user.error = false;
|
||||
|
||||
unify.extend( table );
|
||||
|
||||
if( object.username && object.username.value != "Visitor" ) {
|
||||
|
||||
var username = object.username.value;
|
||||
|
||||
var users = table.find( "username", username );
|
||||
|
||||
console.log("try to sign in users", users);
|
||||
|
||||
if( users.length > 0 ) {
|
||||
|
||||
var fetchedUser = users[ 0 ];
|
||||
|
||||
var hash = fetchedUser.hash;
|
||||
|
||||
console.log("try to sign in hash", hash);
|
||||
|
||||
|
||||
var password = object.password.value;
|
||||
|
||||
|
||||
if( object.sessionKey.value != "" ) {
|
||||
|
||||
console.log("try to signin with sessionKey")
|
||||
|
||||
var sign = ( object.sessionKey.value == fetchedUser.sessionKey );
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
if( !object.password ) {
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if( !sign ) {
|
||||
|
||||
var sign = global.bcrypt.compareSync( password, hash );
|
||||
|
||||
}
|
||||
|
||||
console.log("sign in with password", sign);
|
||||
|
||||
if( !password ) {
|
||||
|
||||
client.user.error = "password required";
|
||||
|
||||
}
|
||||
|
||||
if( !hash ) {
|
||||
|
||||
client.user.error = "user does not have an hash";
|
||||
|
||||
}
|
||||
|
||||
if( sign || force ) {
|
||||
|
||||
table.id = fetchedUser.id;
|
||||
|
||||
console.log("fetchedUser", fetchedUser);
|
||||
|
||||
if( fetchedUser.activation == "true" ) {
|
||||
|
||||
table.get( );
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
console.log("not activated");
|
||||
|
||||
table.activation.value = false;
|
||||
|
||||
}
|
||||
|
||||
table.group.value = fetchedUser.group;
|
||||
|
||||
table.permissionObjects = this.getPermissions( table, client );
|
||||
|
||||
table.username.value = username;
|
||||
|
||||
//console.log("store session key", table.hash.value);
|
||||
|
||||
if( fetchedUser.activation == "true" ) {
|
||||
|
||||
if( table.sessionKey.value == "" ) {
|
||||
|
||||
table.sessionKey.value = this.createToken();
|
||||
|
||||
if( fetchedUser.activation == "true" ) {
|
||||
|
||||
table.save();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//table.save();
|
||||
|
||||
table.error = false;
|
||||
|
||||
client.user = table;
|
||||
|
||||
client.user.status = "success";
|
||||
|
||||
} else {
|
||||
|
||||
client.user.status = "failed";
|
||||
client.user.error = "password";
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
client.user.status = "failed";
|
||||
client.user.error = "username";
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
client.user.error = "password";
|
||||
|
||||
}
|
||||
|
||||
if( client.user.status == "success" ) {
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
}
|
||||
|
||||
global.core.setUserObjects( client.user, client );
|
||||
|
||||
global.core.parse( client.user, client );
|
||||
|
||||
if( client.user.error ) {
|
||||
|
||||
client.user.error = "Wrong Password or Username";
|
||||
|
||||
}
|
||||
|
||||
return client.user;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
export default new userManager();
|
||||
Reference in New Issue
Block a user