Skip to content

Commit

Permalink
Merge d0fd854 into f587a9b
Browse files Browse the repository at this point in the history
  • Loading branch information
niekcandaele committed Dec 13, 2018
2 parents f587a9b + d0fd854 commit 7f671da
Show file tree
Hide file tree
Showing 124 changed files with 913 additions and 32,724 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -153,3 +153,4 @@ config/datastores.js
test/output/*
.env
.nyc_output/*
coverage/*
5 changes: 4 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,7 @@ before_install:
install:
- npm install
script:
- npm test
- npm test
- npm run coverage

after_script: "cat coverage/lcov.info | node_modules/coveralls/bin/coveralls.js"
2 changes: 2 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{
}
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
[![Coverage Status](https://coveralls.io/repos/github/CatalysmsServerManager/7-days-to-die-server-manager/badge.svg?branch=master)](https://coveralls.io/github/CatalysmsServerManager/7-days-to-die-server-manager?branch=master)
[![Build Status](https://travis-ci.org/CatalysmsServerManager/7-Days-to-Die-API-wrapper.svg?branch=master)](https://travis-ci.org/CatalysmsServerManager/7-Days-to-Die-API-wrapper)

# 7DTD Server manager

## [Public instance of CSMM](https://csmm.catalysm.net/)
Expand Down
3 changes: 2 additions & 1 deletion api/controllers/role/check-permission.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ module.exports = {
permissionField: {
type: 'string',
required: true,
isIn: ["manageServer", "manageEconomy", "managePlayers", "manageTickets", "viewAnalytics", "viewDashboard", "useTracking", "useChat", "useCommands", "manageGbl", "discordExec", "discordLookup"]
},

serverId: {
Expand Down Expand Up @@ -59,7 +60,7 @@ module.exports = {

let permCheck = await sails.helpers.roles.checkPermission.with(options);

return exits.success(permCheck.hasPermission)
return exits.success(permCheck.hasPermission);

}

Expand Down
25 changes: 22 additions & 3 deletions api/controllers/role/update-role.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ module.exports = {
type: 'number',
custom: async (valueToCheck) => {
let foundRole = await Role.findOne(valueToCheck);
return foundRole
return foundRole;
},
},

Expand All @@ -27,6 +27,10 @@ module.exports = {
min: 0
},

isDefault: {
type: 'boolean',
},

discordRole: {
type: 'string'
},
Expand Down Expand Up @@ -104,6 +108,20 @@ module.exports = {

fn: async function (inputs, exits) {

const role = await Role.findOne(inputs.roleId).populate('server');
const server = role.server;

// If another role is currently set as default, we must set that one to false.
// There can only be one default role per server.
if (inputs.isDefault) {
await Role.update({
server: server.id,
isDefault: true
}, {
isDefault: false,
});
}

let updateObj = {
name: inputs.name,
level: inputs.level,
Expand All @@ -122,7 +140,8 @@ module.exports = {
manageTickets: inputs.manageTickets,
manageGbl: inputs.manageGbl,
discordExec: inputs.discordExec,
discordLookup: inputs.discordLookup
discordLookup: inputs.discordLookup,
isDefault: inputs.isDefault,
};

let updatedRole = await Role.update({
Expand All @@ -131,7 +150,7 @@ module.exports = {

sails.log.info(`Updated a role for server ${updatedRole[0].server}`, updatedRole[0])

return exits.success(updatedRole);
return exits.success(updatedRole[0]);

}

Expand Down
21 changes: 8 additions & 13 deletions api/helpers/discord/set-role-from-discord.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,47 +8,41 @@ module.exports = {
},

},
exits: {
error: {
friendlyName: 'error'
},
},
exits: {},

fn: async function (inputs, exits) {

let player = await Player.findOne(inputs.playerId);

if (_.isUndefined(player)) {
return exits.error(new Error("Unknown player ID"));
}

let user = await User.findOne({
steamId: player.steamId
});

let serverConfig = await SdtdConfig.findOne({
server: player.server
}).populate('server');

let discordClient = sails.hooks.discordbot.getClient();
let discordGuild = await discordClient.guilds.get(serverConfig.discordGuildId);
if (!discordClient) {
return exits.success(player, undefined);
}

let discordGuild = await discordClient.guilds.get(serverConfig.discordGuildId);
if (_.isUndefined(discordGuild) || !discordGuild) {
return exits.success(player, undefined);
}

if (!user.discordId) {
return exits.success(player, undefined);
}

let member = await discordGuild.members.get(user.discordId);

if (_.isUndefined(member)) {
return exits.error(new Error("No GuildMember found corresponding to the user."));
}

let memberRoles = member.roles.array();

let currentPlayerRole = player.role;

let highestRole = await Role.find({
Expand All @@ -60,7 +54,6 @@ module.exports = {
limit: 1
});


if (!_.isUndefined(highestRole[0])) {
if ((!_.isNull(currentPlayerRole) ? currentPlayerRole.level : 9999999) > highestRole[0].level) {
await Player.update({
Expand All @@ -70,8 +63,10 @@ module.exports = {
})
}
sails.log.debug(`Modified a players role - player ${player.id}. ${player.name} to role ${highestRole[0] ? highestRole[0].name : null}`);
return exits.success(player, highestRole[0]);
}

return exits.success(player, highestRole[0]);
return exits.error(new Error(`Unexpected to return here, should have returned earlier.`));

},
};
74 changes: 58 additions & 16 deletions api/helpers/roles/check-permission.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,11 @@ module.exports = {


fn: async function (inputs, exits) {

if ((_.isUndefined(inputs.userId) || _.isUndefined(inputs.serverId)) && (_.isUndefined(inputs.discordId) || _.isUndefined(inputs.serverId)) && _.isUndefined(inputs.playerId)) {
return exits.invalidInput('You must provide either userId AND serverID, discordId AND serverId or just a playerId' + JSON.stringify(inputs));
return exits.invalidInput('You must provide either userId AND serverId, discordId AND serverId or just a playerId' + JSON.stringify(inputs));
}

let role;

if (inputs.discordId) {
let foundUser = await User.find({
discordId: inputs.discordId
Expand All @@ -61,6 +59,14 @@ module.exports = {
}


if (inputs.playerId) {
try {
await sails.helpers.discord.setRoleFromDiscord(inputs.playerId);
} catch (error) {
sails.log.debug(`Couldn't update players roles via discord - ${error}`)
}
}

if (inputs.userId && inputs.serverId) {
role = await sails.helpers.roles.getUserRole(inputs.userId, inputs.serverId);
}
Expand All @@ -69,30 +75,24 @@ module.exports = {
role = await sails.helpers.sdtd.getPlayerRole(inputs.playerId);
}

// If we find no role for a player, we default to highest level role.
if (_.isUndefined(role)) {
let foundRole = await Role.find({
where: {
server: inputs.serverId
},
sort: 'level DESC',
limit: 1
});
role = foundRole[0]
role = await getDefaultRole(inputs.serverId);
}

let hasPermission = false;

if (!_.isUndefined(inputs.userId)) {
let foundUser = await User.findOne(inputs.userId);

// Override permission check when user is a system admin
if (foundUser.steamId === sails.config.custom.adminSteamId) {
foundRole = await Role.find({
where: {
server: inputs.serverId
},
sort: 'level ASC',
limit: 1
})
});
if (foundRole[0]) {
role = foundRole[0];
}
Expand All @@ -108,6 +108,7 @@ module.exports = {
hasPermission = true
}

// Check if the user owns the server on CSMM, in that case we will always return true.
if (!_.isUndefined(inputs.userId) && !hasPermission) {
let server = await SdtdServer.findOne(inputs.serverId);

Expand All @@ -116,9 +117,7 @@ module.exports = {
}
}



//sails.log.debug(`Checked if ${inputs.playerId ? `player ${inputs.playerId}` : `user ${inputs.userId}`} has permission ${inputs.permission} - ${hasPermission}`)
sails.log.debug(`Checked if ${inputs.playerId ? `player ${inputs.playerId}` : `user ${inputs.userId}`} has permission ${inputs.permission} - ${hasPermission}`)

// All done.
return exits.success({
Expand All @@ -130,3 +129,46 @@ module.exports = {


};

async function getDefaultRole(serverId) {

if (_.isUndefined(serverId)) {
throw new Error(`parameter serverId is required.`);
}

let roles = await Role.find({
server: serverId
});
// Check if server has a role set as default
let defaultRole = roles.filter(role => role.isDefault)[0];
if (defaultRole) {
return defaultRole;
}

// If we find no default role for a server, we default to highest level role.
let foundRole = await Role.find({
where: {
server: serverId
},
sort: 'level DESC',
limit: 1
});

// If we still can't find a role, it's likely because the server has none configured. In this case we will create a default role.
if (!foundRole[0]) {
let amountOfRoles = await Role.count({server: serverId});

sails.log.warn(`Detected ${amountOfRoles} roles for server ${serverId}. Creating a default one`);
if (amountOfRoles === 0) {
let createdRole = await Role.create({
server: serverId,
name: "Player",
level: "2000",
}).fetch();
return createdRole;
}
}

return foundRole[0];

}
46 changes: 4 additions & 42 deletions api/helpers/roles/get-user-role.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,18 @@ module.exports = {
userId: {
required: true,
type: 'number',
custom: async (valueToCheck) => {
custom: async function (valueToCheck) {
let foundUser = await User.findOne(valueToCheck);
return foundUser
return foundUser;
},
},

serverId: {
required: true,
type: 'number',
custom: async (valueToCheck) => {
custom: async function (valueToCheck) {
let foundServer = await SdtdServer.findOne(valueToCheck);
return foundServer
return foundServer;
},
},

Expand All @@ -41,57 +41,19 @@ module.exports = {
fn: async function (inputs, exits) {

let foundUser = await User.findOne(inputs.userId);
let foundServer = await SdtdServer.findOne(inputs.serverId);

let foundPlayer = await Player.findOne({
where: {
steamId: foundUser.steamId,
server: inputs.serverId
}
});

try {
if (!_.isUndefined(foundPlayer)) {
await sails.helpers.discord.setRoleFromDiscord(foundPlayer.id);
}
} catch (error) {
sails.log.debug(`Couldn't update players roles via discord - ${error}`)
}

let foundRole;


let amountOfRoles = await Role.count({
server: inputs.serverId
});

if (amountOfRoles === 0) {
await Role.create({
name: "Default role",
level: 9999,
server: inputs.serverId,
amountOfteleports: 5
});
}

if (!_.isUndefined(foundPlayer)) {
if (foundPlayer.role) {
foundRole = await Role.findOne(foundPlayer.role);
}
}

if (_.isUndefined(foundRole)) {
foundRole = await Role.find({
where: {
server: inputs.serverId
},
sort: 'level DESC',
limit: 1
});
foundRole = foundRole[0]
}

//sails.log.verbose(`Found role ${foundRole.name} for user ${foundUser.username}`)
return exits.success(foundRole);

}
Expand Down

0 comments on commit 7f671da

Please sign in to comment.