MVP version
This commit is contained in:
commit
3f96943858
25 changed files with 3962 additions and 0 deletions
79
src/services/permissions.js
Normal file
79
src/services/permissions.js
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
import { getStartProfile } from "./serverLauncher.js";
|
||||
|
||||
function serializeGroup(group, { includePermissions = true } = {}) {
|
||||
const serialized = {
|
||||
id: group.id,
|
||||
name: group.name,
|
||||
admin: isAdminGroup(group),
|
||||
createdAt: group.createdAt,
|
||||
updatedAt: group.updatedAt,
|
||||
};
|
||||
|
||||
if (includePermissions) {
|
||||
serialized.permissions = normalizePermissions(group.permissions);
|
||||
}
|
||||
|
||||
return serialized;
|
||||
}
|
||||
|
||||
function serializeSession(group) {
|
||||
if (!isAdminGroup(group)) {
|
||||
return { admin: false };
|
||||
}
|
||||
|
||||
return {
|
||||
admin: true,
|
||||
name: group.name,
|
||||
};
|
||||
}
|
||||
|
||||
function normalizePermissions(permissions = {}) {
|
||||
return {
|
||||
servers: Array.isArray(permissions.servers) ? permissions.servers : [],
|
||||
};
|
||||
}
|
||||
|
||||
function canAccessServer(group, serverId) {
|
||||
if (isAdminGroup(group)) return true;
|
||||
return normalizePermissions(group?.permissions).servers.includes(serverId);
|
||||
}
|
||||
|
||||
function isAdminGroup(group) {
|
||||
return group?.id === "admin";
|
||||
}
|
||||
|
||||
function getPublicSecrets(secrets = {}) {
|
||||
return Object.fromEntries(
|
||||
Object.entries(secrets).filter(([key]) => !key.toLowerCase().startsWith("admin"))
|
||||
);
|
||||
}
|
||||
|
||||
function serializeServerForGroup(server, group) {
|
||||
const publicSecrets = getPublicSecrets(server.secrets);
|
||||
const startProfile = getStartProfile(server);
|
||||
const serialized = {
|
||||
id: server.id,
|
||||
game: server.game,
|
||||
address: server.address,
|
||||
port: server.port,
|
||||
heroImage: server.heroImage || null,
|
||||
active: Boolean(server.active),
|
||||
canStart: canAccessServer(group, server.id) && !server.active && Boolean(startProfile),
|
||||
hasSecrets: Object.keys(publicSecrets).length > 0,
|
||||
};
|
||||
|
||||
if (canAccessServer(group, server.id)) {
|
||||
serialized.secrets = publicSecrets;
|
||||
}
|
||||
|
||||
return serialized;
|
||||
}
|
||||
|
||||
export {
|
||||
canAccessServer,
|
||||
isAdminGroup,
|
||||
normalizePermissions,
|
||||
serializeGroup,
|
||||
serializeSession,
|
||||
serializeServerForGroup,
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue