Files
2025-01-04 00:34:03 +01:00

1 line
2.1 KiB
JavaScript

import View from"./view.mjs";import sessions from"../../sessions.mjs";import{Module}from"../../packages/_module.mjs";import{PASSWORD_SAFE_STRING}from"../../../common/constants.mjs";import Express from"../express.mjs";export default class JoinView extends View{route="/join";socket="getJoinData";_template="join";_methods=["get","post"];async handleGet(e,s){const{game:o}=global;if(!o.world)return this._noWorld(e,s);if(!o.ready)return setTimeout((()=>this.handleGet(e,s)),1e3);await sessions.logoutWorld(e,s);const t=o.world.background,a=t?`body.background {\n --background-url: url("${URL.parseSafe(t)?t:foundry.utils.getRoute(t,{prefix:express.routePrefix})}");\n }`:"",n=View._getStaticContent({setup:!0});return s.render(this._template,{bodyClass:["auth","join","flexcol",t?"background":"",`theme-${config.options.cssTheme}`,`join-theme-${o.world.joinTheme??"default"}`].filterJoin(" "),messages:sessions.getMessages(e,{clear:!1}),pageTitle:o.world.title,layout:"setup",scripts:n.scripts,styles:n.styles,inlineStyles:a})}async handlePost(e,s){const{config:o,game:t}=global;if(!t.world)return this._noWorld(e,s);let a={};switch(e.body.action){case"shutdown":if(o.options.demoMode)return s.status(401),s.send("This option is not available for servers running in demo mode"),s;if(!o.adminPassword)return s.status(403),s.send("ERROR.InvalidAdminKey"),s;if(!sessions.authenticateAdmin(e,s).success)return s.send(e.session.messages.pop()?.message),e.session.messages=[],s;a=await t.world.deactivate(e,{asAdmin:!0}),a.status="success",a.message="The game world has been successfully deactivated";break;case"join":if(await sessions.logoutWorld(e,s),a=await sessions.authenticateUser(e,s),"failed"===a.status)return s}return s.json(a)}async handleSocket(e,s){const{game:o}=global;return o.world?s({release:global.release,world:o.world.vend(),modules:Module.getPackages({coreTranslation:!0}).map((e=>e.vend())),passwordString:PASSWORD_SAFE_STRING,isAdmin:e.admin,users:await db.User.dump(),activeUsers:Array.from(Object.keys(o.activity.users)),userId:e.worlds[o.world.id]||null,options:{language:global.config.options.language}}):s({})}}