397 lines
6.4 KiB
JavaScript
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(); |