Files
Unify/framework/server/userManager.js
2025-12-25 11:16:59 +01:00

397 lines
6.4 KiB
JavaScript

/*
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();