mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2025-04-08 19:56:39 +00:00
add commands and scripts to create new user & assign roles and permissions
This commit is contained in:
parent
316aa018b1
commit
c5053f5480
@ -336,7 +336,7 @@ Get the browser location.hash. We don't use location.hash because of the way tha
|
||||
*/
|
||||
$tw.utils.getLocationHash = function() {
|
||||
var href = window.location.href;
|
||||
var idx = href.indexOf('#');
|
||||
var idx = href.indexOf("#");
|
||||
if(idx === -1) {
|
||||
return "#";
|
||||
} else if(href.substr(idx + 1,1) === "#" || href.substr(idx + 1,3) === "%23") {
|
||||
@ -605,7 +605,7 @@ var globalCheck =[
|
||||
" delete Object.prototype.__temp__;",
|
||||
" }",
|
||||
" delete Object.prototype.__temp__;",
|
||||
].join('\n');
|
||||
].join("\n");
|
||||
|
||||
/*
|
||||
Run code globally with specified context variables in scope
|
||||
@ -1997,7 +1997,7 @@ $tw.loadTiddlersFromSpecification = function(filepath,excludeRegExp) {
|
||||
value = path.relative(rootPath, filename).split(path.sep).slice(0, -1);
|
||||
break;
|
||||
case "filepath":
|
||||
value = path.relative(rootPath, filename).split(path.sep).join('/');
|
||||
value = path.relative(rootPath, filename).split(path.sep).join("/");
|
||||
break;
|
||||
case "filename":
|
||||
value = path.basename(filename);
|
||||
@ -2623,7 +2623,7 @@ $tw.boot.executeNextStartupTask = function(callback) {
|
||||
}
|
||||
taskIndex++;
|
||||
}
|
||||
if(typeof callback === 'function') {
|
||||
if(typeof callback === "function") {
|
||||
callback();
|
||||
}
|
||||
return false;
|
||||
|
@ -11,6 +11,18 @@
|
||||
"tiddlywiki/snowwhite"
|
||||
],
|
||||
"build": {
|
||||
"--mws-list-users": [
|
||||
"--mws-list-users"
|
||||
],
|
||||
"mws-add-user": [
|
||||
"--mws-add-permission", "READ", "Allows user to create tiddlers",
|
||||
"--mws-add-permission", "WRITE", "Gives the user the permission to edit and delete tiddlers",
|
||||
"--mws-add-role", "ADMIN", "System Administrator",
|
||||
"--mws-assign-role-permission", "ADMIN", "READ",
|
||||
"--mws-assign-role-permission", "ADMIN", "WRITE",
|
||||
"--mws-add-user", "user", "pass123",
|
||||
"--mws-assign-user-role", "user", "ADMIN"
|
||||
],
|
||||
"load-mws-demo-data": [
|
||||
"--mws-load-wiki-folder","./editions/tw5.com","docs", "TiddlyWiki Documentation from https://tiddlywiki.com","docs","TiddlyWiki Documentation from https://tiddlywiki.com",
|
||||
"--mws-load-wiki-folder","./editions/dev","dev","TiddlyWiki Developer Documentation from https://tiddlywiki.com/dev","dev-docs", "TiddlyWiki Developer Documentation from https://tiddlywiki.com/dev",
|
||||
|
@ -34,6 +34,7 @@
|
||||
"start": "node ./tiddlywiki.js ./editions/multiwikiserver --mws-load-plugin-bags --build load-mws-demo-data --mws-listen",
|
||||
"build:test-edition": "node ./tiddlywiki.js ./editions/test --verbose --version --build index",
|
||||
"test:multiwikiserver-edition": "node ./tiddlywiki.js ./editions/multiwikiserver/ --build load-mws-demo-data --mws-listen --mws-test-server http://127.0.0.1:8080/ --quit",
|
||||
"mws-add-user": "node ./tiddlywiki.js ./editions/multiwikiserver --build load-mws-demo-data --mws-listen --build mws-add-user --quit",
|
||||
"test": "npm run build:test-edition && npm run test:multiwikiserver-edition",
|
||||
"lint:fix": "eslint . --fix",
|
||||
"lint": "eslint ."
|
||||
|
@ -0,0 +1,49 @@
|
||||
/*\
|
||||
title: $:/plugins/tiddlywiki/multiwikiserver/commands/mws-add-permission.js
|
||||
type: application/javascript
|
||||
module-type: command
|
||||
|
||||
Command to create a permission
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
exports.info = {
|
||||
name: "mws-add-permission",
|
||||
synchronous: false
|
||||
};
|
||||
|
||||
var Command = function(params,commander,callback) {
|
||||
this.params = params;
|
||||
this.commander = commander;
|
||||
this.callback = callback;
|
||||
};
|
||||
|
||||
Command.prototype.execute = function() {
|
||||
var self = this;
|
||||
|
||||
if(this.params.length < 2) {
|
||||
return "Usage: --mws-add-permission <permission_name> <description>";
|
||||
}
|
||||
|
||||
if(!$tw.mws || !$tw.mws.store || !$tw.mws.store.sqlTiddlerDatabase) {
|
||||
return "Error: MultiWikiServer or SQL database not initialized.";
|
||||
}
|
||||
|
||||
var permission_name = this.params[0];
|
||||
var description = this.params[1];
|
||||
|
||||
$tw.mws.store.sqlTiddlerDatabase.createPermission(permission_name, description);
|
||||
|
||||
console.log(permission_name+" Permission Created Successfully!")
|
||||
self.callback();
|
||||
return null;
|
||||
};
|
||||
|
||||
exports.Command = Command;
|
||||
|
||||
})();
|
@ -0,0 +1,49 @@
|
||||
/*\
|
||||
title: $:/plugins/tiddlywiki/multiwikiserver/commands/mws-add-role.js
|
||||
type: application/javascript
|
||||
module-type: command
|
||||
|
||||
Command to create a role
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
exports.info = {
|
||||
name: "mws-add-role",
|
||||
synchronous: false
|
||||
};
|
||||
|
||||
var Command = function(params,commander,callback) {
|
||||
this.params = params;
|
||||
this.commander = commander;
|
||||
this.callback = callback;
|
||||
};
|
||||
|
||||
Command.prototype.execute = function() {
|
||||
var self = this;
|
||||
|
||||
if(this.params.length < 2) {
|
||||
return "Usage: --mws-add-role <role_name> <description>";
|
||||
}
|
||||
|
||||
if(!$tw.mws || !$tw.mws.store || !$tw.mws.store.sqlTiddlerDatabase) {
|
||||
return "Error: MultiWikiServer or SQL database not initialized.";
|
||||
}
|
||||
|
||||
var role_name = this.params[0];
|
||||
var description = this.params[1];
|
||||
|
||||
$tw.mws.store.sqlTiddlerDatabase.createRole(role_name, description);
|
||||
|
||||
console.log(role_name+" Role Created Successfully!")
|
||||
self.callback(null, "Role Created Successfully!");
|
||||
return null;
|
||||
};
|
||||
|
||||
exports.Command = Command;
|
||||
|
||||
})();
|
@ -0,0 +1,58 @@
|
||||
/*\
|
||||
title: $:/plugins/tiddlywiki/multiwikiserver/commands/mws-add-user.js
|
||||
type: application/javascript
|
||||
module-type: command
|
||||
|
||||
Command to create users and grant permission
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
var crypto = require("crypto");
|
||||
|
||||
exports.info = {
|
||||
name: "mws-add-user",
|
||||
synchronous: false
|
||||
};
|
||||
|
||||
var Command = function(params,commander,callback) {
|
||||
this.params = params;
|
||||
this.commander = commander;
|
||||
this.callback = callback;
|
||||
};
|
||||
|
||||
Command.prototype.execute = function() {
|
||||
var self = this;
|
||||
|
||||
if(this.params.length < 2) {
|
||||
return "Usage: --mws-add-user <username> <password> [email]";
|
||||
}
|
||||
|
||||
if(!$tw.mws || !$tw.mws.store || !$tw.mws.store.sqlTiddlerDatabase) {
|
||||
return "Error: MultiWikiServer or SQL database not initialized.";
|
||||
}
|
||||
|
||||
var username = this.params[0];
|
||||
var password = this.params[1];
|
||||
var email = this.params[2] || username + "@tiddlywiki.com";
|
||||
var hashedPassword = crypto.createHash("sha256").update(password).digest("hex");
|
||||
|
||||
var user = $tw.mws.store.sqlTiddlerDatabase.getUserByUsername(username);
|
||||
|
||||
if(user) {
|
||||
self.callback("WARNING: An account with the username (" + username + ") already exists");
|
||||
} else {
|
||||
$tw.mws.store.sqlTiddlerDatabase.createUser(username, email, hashedPassword);
|
||||
console.log("User Account Created Successfully!")
|
||||
self.callback();
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
exports.Command = Command;
|
||||
|
||||
})();
|
@ -0,0 +1,62 @@
|
||||
/*\
|
||||
title: $:/plugins/tiddlywiki/multiwikiserver/commands/mws-assign-role-permission.js
|
||||
type: application/javascript
|
||||
module-type: command
|
||||
|
||||
Command to assign permission to a role
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
exports.info = {
|
||||
name: "mws-assign-role-permission",
|
||||
synchronous: false
|
||||
};
|
||||
|
||||
var Command = function(params,commander,callback) {
|
||||
this.params = params;
|
||||
this.commander = commander;
|
||||
this.callback = callback;
|
||||
};
|
||||
|
||||
Command.prototype.execute = function() {
|
||||
var self = this;
|
||||
|
||||
if(this.params.length < 2) {
|
||||
return "Usage: --mws-assign-role-permission <role_name> <permission_name>";
|
||||
}
|
||||
|
||||
if(!$tw.mws || !$tw.mws.store || !$tw.mws.store.sqlTiddlerDatabase) {
|
||||
return "Error: MultiWikiServer or SQL database not initialized.";
|
||||
}
|
||||
|
||||
var role_name = this.params[0];
|
||||
var permission_name = this.params[1];
|
||||
var role = $tw.mws.store.sqlTiddlerDatabase.getRoleByName(role_name);
|
||||
var permission = $tw.mws.store.sqlTiddlerDatabase.getPermissionByName(permission_name);
|
||||
|
||||
if(!role) {
|
||||
return "Error: Unable to find Role: "+role_name;
|
||||
}
|
||||
|
||||
if(!permission) {
|
||||
return "Error: Unable to find Permission: "+permission_name;
|
||||
}
|
||||
|
||||
var permission = $tw.mws.store.sqlTiddlerDatabase.getPermissionByName(permission_name);
|
||||
|
||||
|
||||
$tw.mws.store.sqlTiddlerDatabase.addPermissionToRole(role.role_id, permission.permission_id);
|
||||
|
||||
console.log(permission_name+" permission assigned to "+role_name+" role successfully!")
|
||||
self.callback();
|
||||
return null;
|
||||
};
|
||||
|
||||
exports.Command = Command;
|
||||
|
||||
})();
|
@ -0,0 +1,59 @@
|
||||
/*\
|
||||
title: $:/plugins/tiddlywiki/multiwikiserver/commands/mws-assign-user-role.js
|
||||
type: application/javascript
|
||||
module-type: command
|
||||
|
||||
Command to assign a role to a user
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
exports.info = {
|
||||
name: "mws-assign-user-role",
|
||||
synchronous: false
|
||||
};
|
||||
|
||||
var Command = function(params,commander,callback) {
|
||||
this.params = params;
|
||||
this.commander = commander;
|
||||
this.callback = callback;
|
||||
};
|
||||
|
||||
Command.prototype.execute = function() {
|
||||
var self = this;
|
||||
|
||||
if(this.params.length < 2) {
|
||||
return "Usage: --mws-assign-user-role <username> <role_name>";
|
||||
}
|
||||
|
||||
if(!$tw.mws || !$tw.mws.store || !$tw.mws.store.sqlTiddlerDatabase) {
|
||||
return "Error: MultiWikiServer or SQL database not initialized.";
|
||||
}
|
||||
|
||||
var username = this.params[0];
|
||||
var role_name = this.params[1];
|
||||
var role = $tw.mws.store.sqlTiddlerDatabase.getRoleByName(role_name);
|
||||
var user = $tw.mws.store.sqlTiddlerDatabase.getUserByUsername(username);
|
||||
|
||||
if(!role) {
|
||||
return "Error: Unable to find Role: "+role_name;
|
||||
}
|
||||
|
||||
if(!user) {
|
||||
return "Error: Unable to find user with the username "+username;
|
||||
}
|
||||
|
||||
$tw.mws.store.sqlTiddlerDatabase.addRoleToUser(user.user_id, role.role_id);
|
||||
|
||||
console.log(role_name+" role has been assigned to user with username "+username)
|
||||
self.callback();
|
||||
return null;
|
||||
};
|
||||
|
||||
exports.Command = Command;
|
||||
|
||||
})();
|
@ -0,0 +1,46 @@
|
||||
/*\
|
||||
title: $:/plugins/tiddlywiki/multiwikiserver/commands/mws-list-users.js
|
||||
type: application/javascript
|
||||
module-type: command
|
||||
|
||||
Command to list users
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
exports.info = {
|
||||
name: "mws-list-users",
|
||||
synchronous: false
|
||||
};
|
||||
|
||||
var Command = function(params,commander,callback) {
|
||||
this.params = params;
|
||||
this.commander = commander;
|
||||
this.callback = callback;
|
||||
};
|
||||
|
||||
Command.prototype.execute = function() {
|
||||
var self = this;
|
||||
|
||||
if(!$tw.mws || !$tw.mws.store || !$tw.mws.store.sqlTiddlerDatabase) {
|
||||
return "Error: MultiWikiServer or SQL database not initialized.";
|
||||
}
|
||||
|
||||
var users = $tw.mws.store.sqlTiddlerDatabase.listUsers().map(function(user){
|
||||
return ({
|
||||
username: user.username,
|
||||
email: user.email,
|
||||
created_at: user.created_at,
|
||||
})
|
||||
});
|
||||
console.log("Users:", users);
|
||||
self.callback(null, "Users retrieved successfully:\n" + JSON.stringify(users, null, 2));
|
||||
};
|
||||
|
||||
exports.Command = Command;
|
||||
|
||||
})();
|
@ -19,8 +19,6 @@ exports.path = /^\/admin\/users\/([^\/]+)\/?$/;
|
||||
|
||||
exports.handler = function(request,response,state) {
|
||||
var user_id = $tw.utils.decodeURIComponentSafe(state.params[0]);
|
||||
console.log("user_id =>", user_id)
|
||||
|
||||
var userData = state.server.sqlTiddlerDatabase.getUser(user_id);
|
||||
|
||||
if(!userData) {
|
||||
|
@ -924,7 +924,7 @@ SqlTiddlerDatabase.prototype.listGroups = function() {
|
||||
// Role CRUD operations
|
||||
SqlTiddlerDatabase.prototype.createRole = function(roleName, description) {
|
||||
const result = this.engine.runStatement(`
|
||||
INSERT INTO roles (role_name, description)
|
||||
INSERT OR IGNORE INTO roles (role_name, description)
|
||||
VALUES ($roleName, $description)
|
||||
`, {
|
||||
$roleName: roleName,
|
||||
@ -941,6 +941,14 @@ SqlTiddlerDatabase.prototype.getRole = function(roleId) {
|
||||
});
|
||||
};
|
||||
|
||||
SqlTiddlerDatabase.prototype.getRoleByName = function(roleName) {
|
||||
return this.engine.runStatementGet(`
|
||||
SELECT * FROM roles WHERE role_name = $roleName
|
||||
`, {
|
||||
$roleName: roleName
|
||||
});
|
||||
}
|
||||
|
||||
SqlTiddlerDatabase.prototype.updateRole = function(roleId, roleName, description) {
|
||||
this.engine.runStatement(`
|
||||
UPDATE roles
|
||||
@ -970,8 +978,8 @@ SqlTiddlerDatabase.prototype.listRoles = function() {
|
||||
// Permission CRUD operations
|
||||
SqlTiddlerDatabase.prototype.createPermission = function(permissionName, description) {
|
||||
const result = this.engine.runStatement(`
|
||||
INSERT INTO permissions (permission_name, description)
|
||||
VALUES ($permissionName, $description)
|
||||
INSERT OR IGNORE INTO permissions (permission_name, description)
|
||||
VALUES ($permissionName, $description)
|
||||
`, {
|
||||
$permissionName: permissionName,
|
||||
$description: description
|
||||
@ -987,6 +995,14 @@ SqlTiddlerDatabase.prototype.getPermission = function(permissionId) {
|
||||
});
|
||||
};
|
||||
|
||||
SqlTiddlerDatabase.prototype.getPermissionByName = function(permissionName) {
|
||||
return this.engine.runStatementGet(`
|
||||
SELECT * FROM permissions WHERE permission_name = $permissionName
|
||||
`, {
|
||||
$permissionName: permissionName
|
||||
});
|
||||
};
|
||||
|
||||
SqlTiddlerDatabase.prototype.updatePermission = function(permissionId, permissionName, description) {
|
||||
this.engine.runStatement(`
|
||||
UPDATE permissions
|
||||
|
Loading…
x
Reference in New Issue
Block a user