Files
Foundry-VTT-Docker/resources/app/dist/server/express.mjs

1 line
7.7 KiB
JavaScript
Raw Normal View History

2025-01-04 00:34:03 +01:00
import fs from"node:fs";import http from"node:http";import https from"node:https";import os from"node:os";import path from"node:path";import compression from"compression";import express from"express";import fileUpload from"express-fileupload";import{engine as handlebars}from"express-handlebars";import{Server as SocketServer}from"socket.io";import sessions from"../sessions.mjs";import*as sockets from"./sockets.mjs";import{getRoute}from"../../common/utils/helpers.mjs";import{fetchJsonWithTimeout}from"../../common/utils/http.mjs";import AuthView from"./views/auth.mjs";import PlayersView from"./views/players.mjs";import View from"./views/view.mjs";import ErrorView from"./views/error.mjs";import QuitView from"./views/quit.mjs";import StreamView from"./views/stream.mjs";import APIView from"./views/api.mjs";import FileUploadView from"./views/upload.mjs";import GameView from"./views/game.mjs";import JoinView from"./views/join.mjs";import SetupView from"./views/setup.mjs";import LicenseView from"./views/license.mjs";import ApplicationUpdateView from"./views/update.mjs";import{TIMEOUTS}from"../../common/constants.mjs";export default class Express{constructor(e,s){this.paths=s,process.env.NODE_ENV="production",this.hostname=e.hostname,this.routePrefix=e.routePrefix,this.port=e.port,this.proxyPort=e.proxyPort,this.ssl=e.isSSL,this.debug=e.debug,this.noIPDiscovery=e.noIPDiscovery,this.views=[new AuthView,new PlayersView,new GameView,new StreamView,new ErrorView,new JoinView,new SetupView,new LicenseView,new ApplicationUpdateView,new FileUploadView,new QuitView,new APIView],this.app=this._createApp({isProxy:e.proxyPort||e.proxySSL,compressStatic:e.compressStatic}),this.server=this._createServer({app:this.app,isSSL:this.ssl,sslKey:e.sslKey,sslCert:e.sslCert}),this.sessions=sessions,this.io=new SocketServer(this.server,{path:getRoute("socket.io",{prefix:this.routePrefix}),origins:"*:*",pingInterval:2e4,pingTimeout:6e5,cookie:!1,maxHttpBufferSize:1e8,perMessageDeflate:e.compressSocket}),this.addresses=null}static get CORE_VIEW_SCRIPTS(){return["scripts/jquery.min.js","scripts/handlebars.min.js","scripts/handlebars-intl.min.js","scripts/pixi.min.js","scripts/particle-emitter.min.js","scripts/pixi-graphics-smooth.js","scripts/basis.min.js","scripts/socket.io.min.js","scripts/tinymce.min.js","scripts/clipper/clipper.js","scripts/earcut-edges/earcut-edges.js","scripts/showdown.js","scripts/spark-md5.min.js"]}static get CORE_VIEW_STYLES(){return["fonts/fontawesome/css/all.min.css","css/style.css"]}static get CORE_VIEW_MODULES(){return[]}get address(){return`${this.ssl?"https":"http"}://localhost:${this.port}`+getRoute("",{prefix:this.routePrefix})}_createApp({compressStatic:e=!0,isProxy:s=!1}={}){const t=express();s&&t.set("trust proxy",!0),t.set("views",path.join(this.paths.root,"templates","views")),t.engine("hbs",handlebars({extname:".hbs",layoutsDir:path.join(this.paths.root,"templates","views","layouts"),defaultLayout:"main"})),t.set("view engine","hbs"),t.use(express.json()),t.use(express.urlencoded({extended:!0})),t.use(fileUpload({defParamCharset:"utf8"})),t.use((function(e,s,t){const{options:i}=global;if("/"===e.path.substr(-1)&&e.path.length>1){const t=e.url.slice(e.path.length),r=`${e.protocol}://${e.hostname}:${i.proxyPort??i.port}`;s.redirect(301,r+e.path.slice(0,-1)+t)}else t()}));const i=express.Router();return t.use(getRoute("",{prefix:this.routePrefix}),i),i.get(/^\/?$/,View.home),this._staticFiles(i,e),this._middleware(i),this._defineRoutes(i),t}_createServer({app:e,isSSL:s,sslKey:t,sslCert:i}={}){return s?https.createServer({key:fs.readFileSync(t,"utf8"),cert:fs.readFileSync(i,"utf8")},e):http.createServer(e)}_middleware(e){e.use(((e,s,t)=>{if(s.locals={bodyClass:"vtt game",release:global.release},global.fatalError)return View.error(e,s,t,global.fatalError);t()})),e.use(this._viewDataMiddleware.bind(this)),e.use(this.constructor._userSessionMiddleware),e.use((function(e,s,t){s.header("Access-Control-Allow-Origin","*"),s.header("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept"),s.header("X-Fram