79 lines
1.8 KiB
JavaScript
79 lines
1.8 KiB
JavaScript
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,
|
|
};
|