omegga 0.1.85 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +142 -62
- package/bin/omegga +10 -4
- package/dist/brickadia/config.d.ts +3 -0
- package/dist/brickadia/config.d.ts.map +1 -0
- package/dist/brickadia/config.js +61 -0
- package/dist/brickadia/config.js.map +1 -0
- package/dist/brickadia/presets.d.ts +65 -0
- package/dist/brickadia/presets.js +3 -0
- package/dist/brickadia/presets.js.map +1 -0
- package/dist/brickadia/server.d.ts +20 -0
- package/dist/brickadia/server.d.ts.map +1 -0
- package/dist/brickadia/server.js +188 -0
- package/dist/brickadia/server.js.map +1 -0
- package/dist/brickadia/types.d.ts +45 -0
- package/dist/brickadia/types.d.ts.map +1 -0
- package/dist/brickadia/types.js +3 -0
- package/dist/brickadia/types.js.map +1 -0
- package/dist/cli/auth.d.ts +20 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +115 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/config.d.ts +10 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +72 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/index.d.ts +20 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +15 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/installer.d.ts +1 -0
- package/dist/cli/installer.d.ts.map +1 -0
- package/dist/cli/installer.js +55 -0
- package/dist/cli/installer.js.map +1 -0
- package/dist/cli/plugin.d.ts +11 -0
- package/dist/cli/plugin.d.ts.map +1 -0
- package/dist/cli/plugin.js +598 -0
- package/dist/cli/plugin.js.map +1 -0
- package/dist/cli/terminal.d.ts +34 -0
- package/dist/cli/terminal.d.ts.map +1 -0
- package/dist/cli/terminal.js +395 -0
- package/dist/cli/terminal.js.map +1 -0
- package/dist/config/authorizer.d.ts +2 -0
- package/dist/config/authorizer.d.ts.map +1 -0
- package/dist/config/authorizer.js +38 -0
- package/dist/config/authorizer.js.map +1 -0
- package/dist/config/formats/format_js.d.ts +3 -0
- package/dist/config/formats/format_js.d.ts.map +1 -0
- package/dist/config/formats/format_js.js +10 -0
- package/dist/config/formats/format_js.js.map +1 -0
- package/dist/config/formats/format_yml.d.ts +3 -0
- package/dist/config/formats/format_yml.d.ts.map +1 -0
- package/dist/config/formats/format_yml.js +14 -0
- package/dist/config/formats/format_yml.js.map +1 -0
- package/dist/config/index.d.ts +18 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +86 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/reader.d.ts +3 -0
- package/dist/config/reader.d.ts.map +1 -0
- package/dist/config/reader.js +30 -0
- package/dist/config/reader.js.map +1 -0
- package/dist/config/types.d.ts +37 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +3 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validator.d.ts +6 -0
- package/dist/config/validator.d.ts.map +1 -0
- package/dist/config/validator.js +26 -0
- package/dist/config/validator.js.map +1 -0
- package/dist/config/writer.d.ts +3 -0
- package/dist/config/writer.d.ts.map +1 -0
- package/dist/config/writer.js +25 -0
- package/dist/config/writer.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/info/default_commands.json +28 -0
- package/dist/lib.d.ts +21 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +54 -0
- package/dist/lib.js.map +1 -0
- package/dist/logger.d.ts +41 -0
- package/dist/logger.js +67 -0
- package/dist/logger.js.map +1 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +284 -0
- package/dist/main.js.map +1 -0
- package/dist/omegga/auth.d.ts +6 -0
- package/dist/omegga/auth.d.ts.map +1 -0
- package/dist/omegga/auth.js +139 -0
- package/dist/omegga/auth.js.map +1 -0
- package/dist/omegga/commandInjector.d.ts +35 -0
- package/dist/omegga/commandInjector.d.ts.map +1 -0
- package/dist/omegga/commandInjector.js +234 -0
- package/dist/omegga/commandInjector.js.map +1 -0
- package/dist/omegga/index.d.ts +7 -0
- package/dist/omegga/index.d.ts.map +1 -0
- package/dist/omegga/index.js +43 -0
- package/dist/omegga/index.js.map +1 -0
- package/dist/omegga/logWrangler.d.ts +32 -0
- package/dist/omegga/logWrangler.d.ts.map +1 -0
- package/dist/omegga/logWrangler.js +279 -0
- package/dist/omegga/logWrangler.js.map +1 -0
- package/dist/omegga/matchers/auth.d.ts +9 -0
- package/dist/omegga/matchers/auth.d.ts.map +1 -0
- package/dist/omegga/matchers/auth.js +53 -0
- package/dist/omegga/matchers/auth.js.map +1 -0
- package/dist/omegga/matchers/chat.d.ts +9 -0
- package/dist/omegga/matchers/chat.d.ts.map +1 -0
- package/dist/omegga/matchers/chat.js +68 -0
- package/dist/omegga/matchers/chat.js.map +1 -0
- package/dist/omegga/matchers/command.d.ts +7 -0
- package/dist/omegga/matchers/command.d.ts.map +1 -0
- package/dist/omegga/matchers/command.js +39 -0
- package/dist/omegga/matchers/command.js.map +1 -0
- package/dist/omegga/matchers/exit.d.ts +3 -0
- package/dist/omegga/matchers/exit.d.ts.map +1 -0
- package/dist/omegga/matchers/exit.js +21 -0
- package/dist/omegga/matchers/exit.js.map +1 -0
- package/dist/omegga/matchers/index.d.ts +3 -0
- package/dist/omegga/matchers/index.d.ts.map +1 -0
- package/dist/omegga/matchers/index.js +39 -0
- package/dist/omegga/matchers/index.js.map +1 -0
- package/dist/omegga/matchers/init.d.ts +3 -0
- package/dist/omegga/matchers/init.d.ts.map +1 -0
- package/dist/omegga/matchers/init.js +26 -0
- package/dist/omegga/matchers/init.js.map +1 -0
- package/dist/omegga/matchers/interact.d.ts +4 -0
- package/dist/omegga/matchers/interact.js +39 -0
- package/dist/omegga/matchers/interact.js.map +1 -0
- package/dist/omegga/matchers/join.d.ts +4 -0
- package/dist/omegga/matchers/join.d.ts.map +1 -0
- package/dist/omegga/matchers/join.js +95 -0
- package/dist/omegga/matchers/join.js.map +1 -0
- package/dist/omegga/matchers/leave.d.ts +4 -0
- package/dist/omegga/matchers/leave.d.ts.map +1 -0
- package/dist/omegga/matchers/leave.js +59 -0
- package/dist/omegga/matchers/leave.js.map +1 -0
- package/dist/omegga/matchers/mapChange.d.ts +3 -0
- package/dist/omegga/matchers/mapChange.d.ts.map +1 -0
- package/dist/omegga/matchers/mapChange.js +38 -0
- package/dist/omegga/matchers/mapChange.js.map +1 -0
- package/dist/omegga/matchers/types.d.ts +5 -0
- package/dist/omegga/matchers/types.d.ts.map +1 -0
- package/dist/omegga/matchers/types.js +7 -0
- package/dist/omegga/matchers/types.js.map +1 -0
- package/dist/omegga/matchers/version.d.ts +3 -0
- package/dist/omegga/matchers/version.d.ts.map +1 -0
- package/dist/omegga/matchers/version.js +45 -0
- package/dist/omegga/matchers/version.js.map +1 -0
- package/dist/omegga/player.d.ts +71 -0
- package/dist/omegga/player.d.ts.map +1 -0
- package/dist/omegga/player.js +442 -0
- package/dist/omegga/player.js.map +1 -0
- package/dist/omegga/plugin/plugin_jsonrpc_stdio.d.ts +23 -0
- package/dist/omegga/plugin/plugin_jsonrpc_stdio.d.ts.map +1 -0
- package/dist/omegga/plugin/plugin_jsonrpc_stdio.js +441 -0
- package/dist/omegga/plugin/plugin_jsonrpc_stdio.js.map +1 -0
- package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.d.ts +129 -0
- package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.d.ts.map +1 -0
- package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.js +260 -0
- package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.js.map +1 -0
- package/dist/omegga/plugin/plugin_node_safe/worker.d.ts +1 -0
- package/dist/omegga/plugin/plugin_node_safe/worker.d.ts.map +1 -0
- package/dist/omegga/plugin/plugin_node_safe/worker.js +289 -0
- package/dist/omegga/plugin/plugin_node_safe/worker.js.map +1 -0
- package/dist/omegga/plugin/plugin_node_safe.d.ts +24 -0
- package/dist/omegga/plugin/plugin_node_safe.d.ts.map +1 -0
- package/dist/omegga/plugin/plugin_node_safe.js +397 -0
- package/dist/omegga/plugin/plugin_node_safe.js.map +1 -0
- package/dist/omegga/plugin/plugin_node_unsafe.d.ts +13 -0
- package/dist/omegga/plugin/plugin_node_unsafe.d.ts.map +1 -0
- package/dist/omegga/plugin/plugin_node_unsafe.js +178 -0
- package/dist/omegga/plugin/plugin_node_unsafe.js.map +1 -0
- package/dist/omegga/plugin.d.ts +86 -0
- package/dist/omegga/plugin.d.ts.map +1 -0
- package/dist/omegga/plugin.js +458 -0
- package/dist/omegga/plugin.js.map +1 -0
- package/dist/omegga/server.d.ts +149 -0
- package/dist/omegga/server.d.ts.map +1 -0
- package/dist/omegga/server.js +601 -0
- package/dist/omegga/server.js.map +1 -0
- package/dist/omegga/types.d.ts +48 -0
- package/dist/omegga/types.d.ts.map +1 -0
- package/dist/omegga/types.js +3 -0
- package/dist/omegga/types.js.map +1 -0
- package/dist/omegga/wrapper.d.ts +22 -0
- package/dist/omegga/wrapper.d.ts.map +1 -0
- package/dist/omegga/wrapper.js +75 -0
- package/dist/omegga/wrapper.js.map +1 -0
- package/dist/omeggaplugin.d.ts +1 -0
- package/dist/omeggaplugin.js +4 -0
- package/dist/omeggaplugin.js.map +1 -0
- package/dist/plugin.d.ts +781 -0
- package/dist/plugin.js +41 -0
- package/dist/plugin.js.map +1 -0
- package/dist/softconfig.d.ts +51 -0
- package/dist/softconfig.d.ts.map +1 -0
- package/dist/softconfig.js +82 -0
- package/dist/softconfig.js.map +1 -0
- package/dist/util/brick/checkBounds.d.ts +8 -0
- package/dist/util/brick/checkBounds.d.ts.map +1 -0
- package/dist/util/brick/checkBounds.js +22 -0
- package/dist/util/brick/checkBounds.js.map +1 -0
- package/dist/util/brick/constants.d.ts +18 -0
- package/dist/util/brick/constants.d.ts.map +1 -0
- package/dist/util/brick/constants.js +184 -0
- package/dist/util/brick/constants.js.map +1 -0
- package/dist/util/brick/getBounds.d.ts +4 -0
- package/dist/util/brick/getBounds.d.ts.map +1 -0
- package/dist/util/brick/getBounds.js +39 -0
- package/dist/util/brick/getBounds.js.map +1 -0
- package/dist/util/brick/getBrickSize.d.ts +3 -0
- package/dist/util/brick/getBrickSize.d.ts.map +1 -0
- package/dist/util/brick/getBrickSize.js +12 -0
- package/dist/util/brick/getBrickSize.js.map +1 -0
- package/dist/util/brick/getScaleAxis.d.ts +3 -0
- package/dist/util/brick/getScaleAxis.d.ts.map +1 -0
- package/dist/util/brick/getScaleAxis.js +38 -0
- package/dist/util/brick/getScaleAxis.js.map +1 -0
- package/dist/util/brick/index.d.ts +13 -0
- package/dist/util/brick/index.d.ts.map +1 -0
- package/dist/util/brick/index.js +29 -0
- package/dist/util/brick/index.js.map +1 -0
- package/dist/util/brick/rotate.d.ts +17 -0
- package/dist/util/brick/rotate.d.ts.map +1 -0
- package/dist/util/brick/rotate.js +38 -0
- package/dist/util/brick/rotate.js.map +1 -0
- package/dist/util/brick/setOwnership.d.ts +12 -0
- package/dist/util/brick/setOwnership.d.ts.map +1 -0
- package/dist/util/brick/setOwnership.js +21 -0
- package/dist/util/brick/setOwnership.js.map +1 -0
- package/dist/util/chat.d.ts +23 -0
- package/dist/util/chat.d.ts.map +1 -0
- package/dist/util/chat.js +50 -0
- package/dist/util/chat.js.map +1 -0
- package/dist/util/color.d.ts +13 -0
- package/dist/util/color.d.ts.map +1 -0
- package/dist/util/color.js +130 -0
- package/dist/util/color.js.map +1 -0
- package/dist/util/file.d.ts +5 -0
- package/dist/util/file.d.ts.map +1 -0
- package/dist/util/file.js +114 -0
- package/dist/util/file.js.map +1 -0
- package/dist/util/index.d.ts +162 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/index.js +92 -0
- package/dist/util/index.js.map +1 -0
- package/dist/util/map.d.ts +6 -0
- package/dist/util/map.d.ts.map +1 -0
- package/dist/util/map.js +26 -0
- package/dist/util/map.js.map +1 -0
- package/dist/util/pattern.d.ts +1 -0
- package/dist/util/pattern.d.ts.map +1 -0
- package/dist/util/pattern.js +11 -0
- package/dist/util/pattern.js.map +1 -0
- package/dist/util/time.d.ts +4 -0
- package/dist/util/time.d.ts.map +1 -0
- package/dist/util/time.js +41 -0
- package/dist/util/time.js.map +1 -0
- package/dist/util/uuid.d.ts +2 -0
- package/dist/util/uuid.d.ts.map +1 -0
- package/dist/util/uuid.js +8 -0
- package/dist/util/uuid.js.map +1 -0
- package/dist/util/wsl.d.ts +1 -0
- package/dist/util/wsl.d.ts.map +1 -0
- package/dist/util/wsl.js +14 -0
- package/dist/util/wsl.js.map +1 -0
- package/dist/webserver/backend/api.d.ts +3 -0
- package/dist/webserver/backend/api.d.ts.map +1 -0
- package/dist/webserver/backend/api.js +685 -0
- package/dist/webserver/backend/api.js.map +1 -0
- package/dist/webserver/backend/calendar.d.ts +5 -0
- package/dist/webserver/backend/calendar.d.ts.map +1 -0
- package/dist/webserver/backend/calendar.js +21 -0
- package/dist/webserver/backend/calendar.js.map +1 -0
- package/dist/webserver/backend/database.d.ts +149 -0
- package/dist/webserver/backend/database.d.ts.map +1 -0
- package/dist/webserver/backend/database.js +575 -0
- package/dist/webserver/backend/database.js.map +1 -0
- package/dist/webserver/backend/index.d.ts +31 -0
- package/dist/webserver/backend/index.d.ts.map +1 -0
- package/dist/webserver/backend/index.js +189 -0
- package/dist/webserver/backend/index.js.map +1 -0
- package/dist/webserver/backend/metrics.d.ts +3 -0
- package/dist/webserver/backend/metrics.d.ts.map +1 -0
- package/dist/webserver/backend/metrics.js +203 -0
- package/dist/webserver/backend/metrics.js.map +1 -0
- package/dist/webserver/backend/types.d.ts +115 -0
- package/dist/webserver/backend/types.d.ts.map +1 -0
- package/dist/webserver/backend/types.js +3 -0
- package/dist/webserver/backend/types.js.map +1 -0
- package/dist/webserver/backend/util.d.ts +2 -0
- package/dist/webserver/backend/util.d.ts.map +1 -0
- package/dist/webserver/backend/util.js +78 -0
- package/dist/webserver/backend/util.js.map +1 -0
- package/dist/webserver/index.d.ts +2 -0
- package/dist/webserver/index.d.ts.map +1 -0
- package/dist/webserver/index.js +9 -0
- package/dist/webserver/index.js.map +1 -0
- package/{src/webserver/frontend → frontend}/app.html +0 -0
- package/{src/webserver/frontend → frontend}/assets/fonts/GlacialIndifferenceBold.ttf +0 -0
- package/{src/webserver/frontend → frontend}/assets/fonts/GlacialIndifferenceItalic.otf +0 -0
- package/{src/webserver/frontend → frontend}/assets/fonts/GlacialIndifferenceMedium.otf +0 -0
- package/{src/webserver/frontend → frontend}/assets/fonts/GlacialIndifferenceRegular.ttf +0 -0
- package/{src/webserver/frontend → frontend}/assets/fonts/RobotoBold.ttf +0 -0
- package/{src/webserver/frontend → frontend}/assets/fonts/RobotoItalic.ttf +0 -0
- package/{src/webserver/frontend → frontend}/assets/fonts/RobotoRegular.ttf +0 -0
- package/{src/webserver/frontend → frontend}/assets/img/auth_bg.webp +0 -0
- package/{src/webserver/frontend → frontend}/assets/img/dark_bg.webp +0 -0
- package/{src/webserver/frontend → frontend}/assets/img/turkey.webp +0 -0
- package/{src/webserver/frontend → frontend}/auth.html +0 -0
- package/index.js +10 -2
- package/package.json +44 -16
- package/public/app.bundle.js +537 -73
- package/public/app.bundle.js.map +1 -1
- package/public/app.css +727 -2
- package/public/app.css.map +1 -1
- package/public/auth.bundle.js +18 -18
- package/public/auth.bundle.js.map +1 -1
- package/public/auth.css +364 -2
- package/public/auth.css.map +1 -1
- package/templates/rpc/README.md +29 -0
- package/templates/rpc/doc.json +7 -0
- package/templates/rpc/omegga_plugin +0 -0
- package/templates/rpc/plugin.json +4 -0
- package/templates/rpc/setup.sh +3 -0
- package/templates/safe/README.md +29 -0
- package/templates/safe/access.json +1 -0
- package/templates/safe/doc.json +7 -0
- package/templates/safe/omegga.plugin.js +20 -0
- package/templates/safe/plugin.json +4 -0
- package/templates/safe/setup.sh +4 -0
- package/templates/safe-ts/.gitignore.rename +3 -0
- package/templates/safe-ts/README.md +29 -0
- package/templates/safe-ts/access.json +1 -0
- package/templates/safe-ts/doc.json +7 -0
- package/templates/safe-ts/omegga.d.ts +1311 -0
- package/templates/safe-ts/omegga.plugin.ts +29 -0
- package/templates/safe-ts/plugin.json +4 -0
- package/templates/safe-ts/setup.sh +4 -0
- package/templates/safe-ts/tsconfig.json +10 -0
- package/templates/unsafe/README.md +29 -0
- package/templates/unsafe/doc.json +7 -0
- package/templates/unsafe/omegga.main.js +15 -0
- package/templates/unsafe/plugin.json +4 -0
- package/templates/unsafe/setup.sh +4 -0
- package/.babelrc.json +0 -5
- package/.github/workflows/lint.yml +0 -26
- package/.prettierrc +0 -7
- package/.vscode/extensions.json +0 -5
- package/src/OMEGGA_LEGACY_INSTALL +0 -44
- package/src/brickadia/config.js +0 -42
- package/src/brickadia/server.js +0 -227
- package/src/cli/auth.js +0 -104
- package/src/cli/config.js +0 -77
- package/src/cli/index.js +0 -6
- package/src/cli/installer.js +0 -65
- package/src/cli/plugin.js +0 -575
- package/src/cli/terminal.js +0 -466
- package/src/config/authorizer.js +0 -37
- package/src/config/formats/format_js.js +0 -6
- package/src/config/formats/format_yml.js +0 -8
- package/src/config/index.js +0 -81
- package/src/config/reader.js +0 -27
- package/src/config/validator.js +0 -32
- package/src/config/writer.js +0 -20
- package/src/info/default_commands.json +0 -26
- package/src/lib.js +0 -23
- package/src/main.js +0 -332
- package/src/omegga/auth.js +0 -138
- package/src/omegga/commandInjector.js +0 -228
- package/src/omegga/index.js +0 -22
- package/src/omegga/logWrangler.js +0 -323
- package/src/omegga/matchers/auth.js +0 -49
- package/src/omegga/matchers/chat.js +0 -73
- package/src/omegga/matchers/command.js +0 -39
- package/src/omegga/matchers/exit.js +0 -19
- package/src/omegga/matchers/init.js +0 -23
- package/src/omegga/matchers/join.js +0 -115
- package/src/omegga/matchers/leave.js +0 -58
- package/src/omegga/matchers/mapChange.js +0 -37
- package/src/omegga/matchers/version.js +0 -45
- package/src/omegga/player.js +0 -585
- package/src/omegga/plugin/plugin_jsonrpc_stdio.js +0 -526
- package/src/omegga/plugin/plugin_node_safe/proxyOmegga.js +0 -117
- package/src/omegga/plugin/plugin_node_safe/worker.js +0 -238
- package/src/omegga/plugin/plugin_node_safe.js +0 -473
- package/src/omegga/plugin/plugin_node_unsafe.js +0 -177
- package/src/omegga/plugin.js +0 -565
- package/src/omegga/server.js +0 -658
- package/src/omegga/wrapper.js +0 -62
- package/src/softconfig.js +0 -64
- package/src/util/brick/checkBounds.js +0 -22
- package/src/util/brick/constants.js +0 -185
- package/src/util/brick/getBounds.js +0 -36
- package/src/util/brick/getBrickSize.js +0 -9
- package/src/util/brick/getScaleAxis.js +0 -31
- package/src/util/brick/index.js +0 -9
- package/src/util/brick/rotate.js +0 -43
- package/src/util/brick/setOwnership.js +0 -20
- package/src/util/chat.js +0 -28
- package/src/util/color.js +0 -143
- package/src/util/file.js +0 -119
- package/src/util/index.js +0 -28
- package/src/util/map.js +0 -28
- package/src/util/pattern.js +0 -14
- package/src/util/time.js +0 -46
- package/src/util/uuid.js +0 -8
- package/src/util/wsl.js +0 -9
- package/src/webserver/backend/api.js +0 -795
- package/src/webserver/backend/calendar.js +0 -15
- package/src/webserver/backend/database.js +0 -725
- package/src/webserver/backend/index.js +0 -206
- package/src/webserver/backend/metrics.js +0 -148
- package/src/webserver/backend/util.js +0 -75
- package/src/webserver/frontend/.eslintrc.yml +0 -26
- package/src/webserver/frontend/app.js +0 -78
- package/src/webserver/frontend/auth.js +0 -16
- package/src/webserver/frontend/components/Background.vue +0 -83
- package/src/webserver/frontend/components/Button.vue +0 -105
- package/src/webserver/frontend/components/ChatEntry.vue +0 -107
- package/src/webserver/frontend/components/ChatTime.vue +0 -40
- package/src/webserver/frontend/components/Dimmer.vue +0 -43
- package/src/webserver/frontend/components/Dropdown.vue +0 -145
- package/src/webserver/frontend/components/Footer.vue +0 -29
- package/src/webserver/frontend/components/Header.vue +0 -27
- package/src/webserver/frontend/components/InfiniteScroll.vue +0 -51
- package/src/webserver/frontend/components/Input.vue +0 -93
- package/src/webserver/frontend/components/ListInput.vue +0 -105
- package/src/webserver/frontend/components/Loader.vue +0 -98
- package/src/webserver/frontend/components/MainMenuButton.vue +0 -83
- package/src/webserver/frontend/components/Modal.vue +0 -44
- package/src/webserver/frontend/components/NavBar.vue +0 -24
- package/src/webserver/frontend/components/PlayerDropdown.vue +0 -210
- package/src/webserver/frontend/components/PopoutContent.vue +0 -32
- package/src/webserver/frontend/components/RoleDropdown.vue +0 -157
- package/src/webserver/frontend/components/Scroll.vue +0 -33
- package/src/webserver/frontend/components/Toggle.vue +0 -91
- package/src/webserver/frontend/components/index.js +0 -33
- package/src/webserver/frontend/css/font.scss +0 -53
- package/src/webserver/frontend/css/mixins.scss +0 -49
- package/src/webserver/frontend/css/style.scss +0 -166
- package/src/webserver/frontend/css/theme.scss +0 -64
- package/src/webserver/frontend/partials/NavHeader.vue +0 -55
- package/src/webserver/frontend/partials/Page.vue +0 -40
- package/src/webserver/frontend/partials/PageContent.vue +0 -31
- package/src/webserver/frontend/partials/SideNav.vue +0 -115
- package/src/webserver/frontend/partials/index.js +0 -4
- package/src/webserver/frontend/router.js +0 -83
- package/src/webserver/frontend/views/Auth.vue +0 -190
- package/src/webserver/frontend/views/History.vue +0 -462
- package/src/webserver/frontend/views/Home.vue +0 -251
- package/src/webserver/frontend/views/Main.vue +0 -69
- package/src/webserver/frontend/views/NotFound.vue +0 -10
- package/src/webserver/frontend/views/Players.vue +0 -425
- package/src/webserver/frontend/views/PlayersInspector.vue +0 -538
- package/src/webserver/frontend/views/Plugins.vue +0 -217
- package/src/webserver/frontend/views/PluginsInspector.vue +0 -418
- package/src/webserver/frontend/views/Server.vue +0 -167
- package/src/webserver/frontend/views/Users.vue +0 -538
- package/src/webserver/frontend/widgets/Chat.vue +0 -124
- package/src/webserver/frontend/widgets/Status.vue +0 -91
- package/src/webserver/frontend/widgets/index.js +0 -2
- package/src/webserver/frontend/widgets/tooltip.js +0 -108
- package/src/webserver/index.js +0 -4
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
const http = require('http');
|
|
3
|
-
const https = require('https');
|
|
4
|
-
|
|
5
|
-
const express = require('express');
|
|
6
|
-
const expressSession = require('express-session');
|
|
7
|
-
const NedbStore = require('nedb-promises-session-store').default;
|
|
8
|
-
const SocketIo = require('socket.io');
|
|
9
|
-
const bodyParser = require('body-parser');
|
|
10
|
-
|
|
11
|
-
const util = require('./util.js');
|
|
12
|
-
const setupApi = require('./api.js');
|
|
13
|
-
const setupMetrics = require('./metrics.js');
|
|
14
|
-
const Database = require('./database.js');
|
|
15
|
-
|
|
16
|
-
const soft = require('../../softconfig.js');
|
|
17
|
-
|
|
18
|
-
// path to assets folder
|
|
19
|
-
const ASSET_PATH = path.join(__dirname, '../frontend/assets');
|
|
20
|
-
|
|
21
|
-
// path to frontend directory
|
|
22
|
-
const FRONTEND_PATH = path.join(__dirname, '../frontend');
|
|
23
|
-
|
|
24
|
-
// path to webpacked data
|
|
25
|
-
const PUBLIC_PATH = path.join(__dirname, '../../../public');
|
|
26
|
-
|
|
27
|
-
const log = (...args) => global.Omegga.log(...args);
|
|
28
|
-
const error = (...args) => global.Omegga.error(...args);
|
|
29
|
-
|
|
30
|
-
// the webserver servers an authenticated
|
|
31
|
-
class Webserver {
|
|
32
|
-
#database = undefined;
|
|
33
|
-
|
|
34
|
-
// create a webserver
|
|
35
|
-
constructor(options, omegga) {
|
|
36
|
-
this.port = options.port || process.env.PORT || soft.DEFAULT_PORT;
|
|
37
|
-
this.options = options;
|
|
38
|
-
this.omegga = omegga;
|
|
39
|
-
this.dataPath = path.join(omegga.path, soft.DATA_PATH);
|
|
40
|
-
|
|
41
|
-
// the database provides omegga with metrics, chat logs, and more
|
|
42
|
-
// to help administrators keep track of their users and server
|
|
43
|
-
this.database = new Database(options, omegga);
|
|
44
|
-
|
|
45
|
-
// https status of the server
|
|
46
|
-
this.https = false;
|
|
47
|
-
// started status of the server
|
|
48
|
-
this.started = false;
|
|
49
|
-
this.created = this.createServer();
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// create the webserver
|
|
53
|
-
async createServer() {
|
|
54
|
-
const hasOpenSSL = require('hasbin').sync('openssl');
|
|
55
|
-
|
|
56
|
-
// let the database do migrations
|
|
57
|
-
await this.database.doMigrations();
|
|
58
|
-
|
|
59
|
-
// create express app
|
|
60
|
-
this.app = express();
|
|
61
|
-
|
|
62
|
-
// create a server with https if applicable
|
|
63
|
-
const pickProtocol = async () => {
|
|
64
|
-
if (this.options.https) {
|
|
65
|
-
if (hasOpenSSL) {
|
|
66
|
-
const certFile = await util.getSSLKeys(this.dataPath);
|
|
67
|
-
if (certFile) {
|
|
68
|
-
// handy notification of generated ssl certs
|
|
69
|
-
if (certFile.new) log('>>'.green, 'Generated new SSL certificate');
|
|
70
|
-
|
|
71
|
-
this.https = true;
|
|
72
|
-
return https.createServer(
|
|
73
|
-
{
|
|
74
|
-
key: certFile.keys.serviceKey,
|
|
75
|
-
cert: certFile.keys.certificate,
|
|
76
|
-
},
|
|
77
|
-
this.app
|
|
78
|
-
);
|
|
79
|
-
} else {
|
|
80
|
-
error(
|
|
81
|
-
'!>'.red,
|
|
82
|
-
'Error generating SSL certificate - falling back to http'
|
|
83
|
-
);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// warn the user
|
|
88
|
-
log(
|
|
89
|
-
':>'.yellow,
|
|
90
|
-
'Running web server with http - install ',
|
|
91
|
-
'openssl'.yellow.underline,
|
|
92
|
-
' for https (more secure)'
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// fallback to http
|
|
97
|
-
return http.Server(this.app);
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
// create http(s) server based on openssl availability
|
|
101
|
-
this.server = await pickProtocol();
|
|
102
|
-
|
|
103
|
-
this.app.set('trust proxy', 1);
|
|
104
|
-
const session = expressSession({
|
|
105
|
-
secret: util.getSessionSecret(this.dataPath),
|
|
106
|
-
resave: false,
|
|
107
|
-
saveUninitialized: false,
|
|
108
|
-
cookie: {
|
|
109
|
-
path: '/',
|
|
110
|
-
secure: this.https,
|
|
111
|
-
maxAge: 365 * 24 * 60 * 60 * 1000, // 1 year
|
|
112
|
-
},
|
|
113
|
-
// use a nedb database for session store
|
|
114
|
-
store: NedbStore({
|
|
115
|
-
filename: path.join(this.dataPath, soft.SESSION_STORE),
|
|
116
|
-
connect: expressSession,
|
|
117
|
-
}),
|
|
118
|
-
});
|
|
119
|
-
this.app.use(session);
|
|
120
|
-
|
|
121
|
-
// setup routes and webserver
|
|
122
|
-
await this.initWebUI(session);
|
|
123
|
-
return true;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// setup the web ui routes
|
|
127
|
-
async initWebUI(session) {
|
|
128
|
-
const io = SocketIo(this.server);
|
|
129
|
-
this.io = io;
|
|
130
|
-
|
|
131
|
-
await this.database.getInstanceId();
|
|
132
|
-
|
|
133
|
-
// use the session middleware
|
|
134
|
-
io.use((socket, next) => {
|
|
135
|
-
session(socket.request, socket.request.res || {}, async () => {
|
|
136
|
-
// check if user is authenticated
|
|
137
|
-
const user = await this.database.findUserById(
|
|
138
|
-
socket.request.session.userId
|
|
139
|
-
);
|
|
140
|
-
if (user && !user.isBanned) {
|
|
141
|
-
// TODO: check if user is banned while connected to disconnect websocket
|
|
142
|
-
socket.user = user;
|
|
143
|
-
await this.database.stores.users.update(
|
|
144
|
-
{ _id: user._id },
|
|
145
|
-
{ $set: { lastOnline: Date.now() } }
|
|
146
|
-
);
|
|
147
|
-
next();
|
|
148
|
-
} else {
|
|
149
|
-
next(new Error('unauthorized'));
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
// provide assets in the /public path
|
|
155
|
-
this.app.use('/public', express.static(PUBLIC_PATH));
|
|
156
|
-
this.app.use('/public', express.static(ASSET_PATH));
|
|
157
|
-
this.app.use(bodyParser.json());
|
|
158
|
-
|
|
159
|
-
this.rooms = ['chat', 'status', 'plugins', 'server'];
|
|
160
|
-
|
|
161
|
-
// setup the api
|
|
162
|
-
setupApi(this, io);
|
|
163
|
-
|
|
164
|
-
// setup metrics and tracking
|
|
165
|
-
setupMetrics(this, io);
|
|
166
|
-
|
|
167
|
-
// every request goes through the index file (frontend handles 404s)
|
|
168
|
-
this.app.use(async (req, res) => {
|
|
169
|
-
const user = await this.database.findUserById(req.session.userId);
|
|
170
|
-
const isAuth = user && !user.isBanned;
|
|
171
|
-
|
|
172
|
-
if (isAuth) {
|
|
173
|
-
res.sendFile(path.join(FRONTEND_PATH, 'app.html'));
|
|
174
|
-
} else {
|
|
175
|
-
res.sendFile(path.join(FRONTEND_PATH, 'auth.html'));
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// start the webserver
|
|
181
|
-
async start() {
|
|
182
|
-
if (this.started) return;
|
|
183
|
-
await this.created;
|
|
184
|
-
return await new Promise(resolve => {
|
|
185
|
-
this.server.listen(this.port, () => {
|
|
186
|
-
log(
|
|
187
|
-
`${'>>'.green} Web UI available at`,
|
|
188
|
-
`http${this.https ? 's' : ''}://127.0.0.1:${this.port}`.green
|
|
189
|
-
);
|
|
190
|
-
this.started = true;
|
|
191
|
-
this.database.addChatLog('server', {}, 'Server started');
|
|
192
|
-
resolve();
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
// stop the webserver
|
|
198
|
-
stop() {
|
|
199
|
-
this.database.addChatLog('server', {}, 'Server stopped');
|
|
200
|
-
this.server.close();
|
|
201
|
-
this.started = false;
|
|
202
|
-
clearInterval(this.serverStatusInterval);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
module.exports = Webserver;
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
const soft = require('../../softconfig.js');
|
|
2
|
-
|
|
3
|
-
const error = (...args) => global.Omegga.error(...args);
|
|
4
|
-
|
|
5
|
-
module.exports = (server, io) => {
|
|
6
|
-
const { database, omegga } = server;
|
|
7
|
-
|
|
8
|
-
// server status is checked every minute
|
|
9
|
-
clearInterval(server.serverStatusInterval);
|
|
10
|
-
// heartbeat happens every 60 seconds
|
|
11
|
-
let empties = 0;
|
|
12
|
-
|
|
13
|
-
// last heartbeat hour
|
|
14
|
-
let lastHour = -1;
|
|
15
|
-
// players that have joined in the last hour
|
|
16
|
-
let hourlyPlayers = [];
|
|
17
|
-
|
|
18
|
-
server.lastReportedStatus = null;
|
|
19
|
-
server.serverStatusInterval = setInterval(async () => {
|
|
20
|
-
if (!omegga.started) return;
|
|
21
|
-
try {
|
|
22
|
-
// get the server status
|
|
23
|
-
const status = await omegga.getServerStatus();
|
|
24
|
-
if (!status) return;
|
|
25
|
-
|
|
26
|
-
// get players by id
|
|
27
|
-
const players = status.players.map(p => p.id);
|
|
28
|
-
|
|
29
|
-
// send the unaltered status to the frontend
|
|
30
|
-
server.lastReportedStatus = status;
|
|
31
|
-
io.to('status').emit('server.status', status);
|
|
32
|
-
try {
|
|
33
|
-
omegga.emit('metrics:heartbeat', status);
|
|
34
|
-
} catch (e) {
|
|
35
|
-
// prevent the omegga callback handlers from crashing this
|
|
36
|
-
error('Error in heartbeat emit', e);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// stop recording metrics after 3 empty server statuses
|
|
40
|
-
if (
|
|
41
|
-
players.length === 0 &&
|
|
42
|
-
++empties > soft.METRIC_EMPTIES_BEFORE_PAUSE
|
|
43
|
-
) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const now = new Date();
|
|
48
|
-
const hour = now.getUTCHours();
|
|
49
|
-
// check if it's a new hour (for punchcard unique player tracking)
|
|
50
|
-
if (hour !== lastHour) {
|
|
51
|
-
lastHour = hour;
|
|
52
|
-
hourlyPlayers = [];
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// find all the players unique to this hour
|
|
56
|
-
const newPlayers = players.filter(p => !hourlyPlayers.includes(p));
|
|
57
|
-
if (newPlayers.length > 0) {
|
|
58
|
-
// update the punchcard
|
|
59
|
-
await database.updatePlayerPunchcard(newPlayers.length);
|
|
60
|
-
// mark those players as previously joined players
|
|
61
|
-
hourlyPlayers.push(...newPlayers);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// server is not empty, reset the counter
|
|
65
|
-
empties = 0;
|
|
66
|
-
|
|
67
|
-
const data = {
|
|
68
|
-
// number of bricks
|
|
69
|
-
bricks: status.bricks,
|
|
70
|
-
// unique players by id
|
|
71
|
-
players: players.filter((p, i) => players.indexOf(p) === i),
|
|
72
|
-
// addresses by player id
|
|
73
|
-
ips: Object.fromEntries(status.players.map(p => [p.id, p.address])),
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
// hand the server status off to the database
|
|
77
|
-
await database.addHeartbeat(data);
|
|
78
|
-
} catch (e) {
|
|
79
|
-
// probably an issue getting server status
|
|
80
|
-
error('Server Not Responding...');
|
|
81
|
-
}
|
|
82
|
-
}, soft.METRIC_HEARTBEAT_INTERVAL);
|
|
83
|
-
|
|
84
|
-
// chat events
|
|
85
|
-
omegga.on('chat', async (name, message) => {
|
|
86
|
-
const p = omegga.getPlayer(name);
|
|
87
|
-
const user = {
|
|
88
|
-
id: p.id,
|
|
89
|
-
name,
|
|
90
|
-
color: p.getNameColor(),
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
// tell web users about a chat message
|
|
94
|
-
io.to('chat').emit('chat', await database.addChatLog('msg', user, message));
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
// player leave events
|
|
98
|
-
omegga.on('leave', async ({ id, name }) => {
|
|
99
|
-
// tell web users a player left
|
|
100
|
-
io.to('chat').emit(
|
|
101
|
-
'chat',
|
|
102
|
-
await database.addChatLog('leave', { id, name })
|
|
103
|
-
);
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
// player join events
|
|
107
|
-
omegga.on('join', async ({ id, name }) => {
|
|
108
|
-
// add the visit to the database
|
|
109
|
-
const isFirst = await database.addVisit({ id, name });
|
|
110
|
-
|
|
111
|
-
// tell web users a player joined (and if it's their first time joining)
|
|
112
|
-
io.to('chat').emit(
|
|
113
|
-
'chat',
|
|
114
|
-
await database.addChatLog('join', {
|
|
115
|
-
id,
|
|
116
|
-
name,
|
|
117
|
-
...(isFirst ? { isFirst } : {}),
|
|
118
|
-
})
|
|
119
|
-
);
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
// tell web users plugin status
|
|
123
|
-
omegga.on('plugin:status', (shortPath, info) => {
|
|
124
|
-
io.to('plugins').emit('plugin', shortPath, info);
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
// server status events
|
|
128
|
-
omegga.on('start', () =>
|
|
129
|
-
io
|
|
130
|
-
.to('server')
|
|
131
|
-
.emit('status', { started: true, starting: false, stopping: false })
|
|
132
|
-
);
|
|
133
|
-
omegga.on('server:starting', () =>
|
|
134
|
-
io
|
|
135
|
-
.to('server')
|
|
136
|
-
.emit('status', { started: false, starting: true, stopping: false })
|
|
137
|
-
);
|
|
138
|
-
omegga.on('server:stopped', () =>
|
|
139
|
-
io
|
|
140
|
-
.to('server')
|
|
141
|
-
.emit('status', { started: false, starting: false, stopping: false })
|
|
142
|
-
);
|
|
143
|
-
omegga.on('server:stopping', () =>
|
|
144
|
-
io
|
|
145
|
-
.to('server')
|
|
146
|
-
.emit('status', { started: true, starting: false, stopping: true })
|
|
147
|
-
);
|
|
148
|
-
};
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
const fs = require('fs');
|
|
3
|
-
|
|
4
|
-
const crypto = require('crypto');
|
|
5
|
-
const pem = require('pem').promisified;
|
|
6
|
-
|
|
7
|
-
const soft = require('../../softconfig.js');
|
|
8
|
-
|
|
9
|
-
module.exports = {
|
|
10
|
-
// generate SSL certs for the https server
|
|
11
|
-
async getSSLKeys(dataPath) {
|
|
12
|
-
const certsPath = path.join(dataPath, soft.WEB_CERTS_DATA);
|
|
13
|
-
let certData;
|
|
14
|
-
const now = Date.now();
|
|
15
|
-
|
|
16
|
-
// read cert data from json file
|
|
17
|
-
if (fs.existsSync(certsPath)) {
|
|
18
|
-
try {
|
|
19
|
-
certData = JSON.parse(fs.readFileSync(certsPath, 'utf8'));
|
|
20
|
-
|
|
21
|
-
// make sure the cert is not expired
|
|
22
|
-
if (certData.expires < now) certData = undefined;
|
|
23
|
-
} catch (e) {
|
|
24
|
-
// nothing to do here - probably bad json
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// otherwise generate it
|
|
29
|
-
if (!certData) {
|
|
30
|
-
// expires in half the real duration time
|
|
31
|
-
const days = 360;
|
|
32
|
-
const expires = now + (days / 2) * 24 * 60 * 60 * 1000;
|
|
33
|
-
try {
|
|
34
|
-
const keys = await pem.createCertificate({ days, selfSigned: true });
|
|
35
|
-
certData = { keys, expires };
|
|
36
|
-
|
|
37
|
-
fs.writeFileSync(certsPath, JSON.stringify(certData));
|
|
38
|
-
certData.new = true;
|
|
39
|
-
} catch (e) {
|
|
40
|
-
// probably missing openssl or something
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return certData;
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
// generate a session secret for the cookies
|
|
48
|
-
getSessionSecret(dataPath) {
|
|
49
|
-
const tokenPath = path.join(dataPath, soft.WEB_SESSION_TOKEN);
|
|
50
|
-
const secretSize = 64;
|
|
51
|
-
let secret;
|
|
52
|
-
// read secret from file
|
|
53
|
-
if (fs.existsSync(tokenPath)) {
|
|
54
|
-
try {
|
|
55
|
-
secret = fs.readFileSync(tokenPath, 'utf8');
|
|
56
|
-
} catch (e) {
|
|
57
|
-
// nothing to do here - probably file is a folder or something
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
if (!secret) {
|
|
62
|
-
// generate a new secret
|
|
63
|
-
const buf = Buffer.alloc(secretSize);
|
|
64
|
-
secret = crypto.randomFillSync(buf).toString('hex');
|
|
65
|
-
try {
|
|
66
|
-
// write secret to file
|
|
67
|
-
fs.writeFileSync(tokenPath, secret);
|
|
68
|
-
} catch (e) {
|
|
69
|
-
// nothing to do here - maybe missing perms?
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return secret;
|
|
74
|
-
},
|
|
75
|
-
};
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
env:
|
|
2
|
-
browser: true
|
|
3
|
-
es2021: true
|
|
4
|
-
globals:
|
|
5
|
-
io: readonly
|
|
6
|
-
extends:
|
|
7
|
-
- 'eslint:recommended'
|
|
8
|
-
- 'plugin:vue/essential'
|
|
9
|
-
parserOptions:
|
|
10
|
-
ecmaVersion: 12
|
|
11
|
-
sourceType: module
|
|
12
|
-
plugins:
|
|
13
|
-
- vue
|
|
14
|
-
rules:
|
|
15
|
-
indent:
|
|
16
|
-
- error
|
|
17
|
-
- 2
|
|
18
|
-
linebreak-style:
|
|
19
|
-
- error
|
|
20
|
-
- unix
|
|
21
|
-
quotes:
|
|
22
|
-
- error
|
|
23
|
-
- single
|
|
24
|
-
semi:
|
|
25
|
-
- error
|
|
26
|
-
- always
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import Vue from 'vue';
|
|
2
|
-
|
|
3
|
-
import './components/index.js';
|
|
4
|
-
import './widgets/tooltip.js';
|
|
5
|
-
import './widgets/index.js';
|
|
6
|
-
import './partials/index.js';
|
|
7
|
-
|
|
8
|
-
import Main from './views/Main.vue';
|
|
9
|
-
|
|
10
|
-
Vue.prototype.logout = () =>
|
|
11
|
-
fetch('/api/v1/logout').then(() => location.reload());
|
|
12
|
-
|
|
13
|
-
Vue.prototype.user = {};
|
|
14
|
-
Vue.prototype.roles = [];
|
|
15
|
-
Vue.prototype.userLookup = [];
|
|
16
|
-
Vue.prototype.showLogout = false;
|
|
17
|
-
Vue.prototype.omeggaData = {};
|
|
18
|
-
|
|
19
|
-
Vue.prototype.xss = str =>
|
|
20
|
-
str
|
|
21
|
-
.replace(/&/g, '&')
|
|
22
|
-
.replace(/</g, '<')
|
|
23
|
-
.replace(/>/g, '>')
|
|
24
|
-
.replace(/"/g, '"')
|
|
25
|
-
.replace(/'/g, ''');
|
|
26
|
-
|
|
27
|
-
// convert minutes into min/hour/day
|
|
28
|
-
Vue.prototype.heartbeatAgo = mins => {
|
|
29
|
-
if (mins < 60) return mins + ' mins';
|
|
30
|
-
mins /= 60;
|
|
31
|
-
if (mins < 24) return Math.round(mins) + ' hours';
|
|
32
|
-
mins /= 24;
|
|
33
|
-
return Math.round(mins) + ' days';
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
// convert ms into sec/min/hour
|
|
37
|
-
Vue.prototype.duration = ago => {
|
|
38
|
-
if (ago < 0) return 'not yet';
|
|
39
|
-
ago /= 1000;
|
|
40
|
-
|
|
41
|
-
if (ago < 5) return 'a moment';
|
|
42
|
-
if (ago < 60) return Math.round(ago) + ' secs';
|
|
43
|
-
ago /= 60;
|
|
44
|
-
if (ago < 60) return Math.round(ago) + ' mins';
|
|
45
|
-
ago /= 60;
|
|
46
|
-
if (ago < 24) return Math.round(ago) + ' hours';
|
|
47
|
-
ago /= 24;
|
|
48
|
-
return Math.round(ago) + ' days';
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
// only date
|
|
52
|
-
Vue.prototype.isoDate = time => {
|
|
53
|
-
return Vue.prototype.isoTime(time).split(' ')[0];
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
// date time in semi-iso format
|
|
57
|
-
Vue.prototype.isoTime = time => {
|
|
58
|
-
const date = new Date(time);
|
|
59
|
-
const pad = s => (s + '').padStart(2, '0');
|
|
60
|
-
return (
|
|
61
|
-
date.getFullYear() +
|
|
62
|
-
'-' +
|
|
63
|
-
pad(date.getMonth() + 1) +
|
|
64
|
-
'-' +
|
|
65
|
-
pad(date.getDate()) +
|
|
66
|
-
' ' +
|
|
67
|
-
pad(date.getHours()) +
|
|
68
|
-
':' +
|
|
69
|
-
pad(date.getMinutes()) +
|
|
70
|
-
':' +
|
|
71
|
-
pad(date.getSeconds())
|
|
72
|
-
);
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
new Vue({
|
|
76
|
-
el: '#app',
|
|
77
|
-
...Main,
|
|
78
|
-
});
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
<style scoped lang="scss">
|
|
2
|
-
@import '../css/theme';
|
|
3
|
-
|
|
4
|
-
.background {
|
|
5
|
-
position: fixed;
|
|
6
|
-
left: 0;
|
|
7
|
-
top: 0;
|
|
8
|
-
width: 100%;
|
|
9
|
-
height: 100%;
|
|
10
|
-
overflow: visible;
|
|
11
|
-
|
|
12
|
-
background-image: url('/public/img/auth_bg.webp');
|
|
13
|
-
background-repeat: no-repeat;
|
|
14
|
-
background-attachment: fixed;
|
|
15
|
-
background-size: cover;
|
|
16
|
-
background-position: 50% 50%;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.bg-img {
|
|
20
|
-
position: absolute;
|
|
21
|
-
filter: blur(20px);
|
|
22
|
-
left: -40px;
|
|
23
|
-
top: -40px;
|
|
24
|
-
width: calc(100% + 80px);
|
|
25
|
-
height: calc(100% + 80px);
|
|
26
|
-
object-fit: cover;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
.version {
|
|
30
|
-
position: absolute;
|
|
31
|
-
top: 5px;
|
|
32
|
-
right: 5px;
|
|
33
|
-
font-weight: 200;
|
|
34
|
-
font-size: 12px;
|
|
35
|
-
color: rgba(255, 255, 255, 0.5);
|
|
36
|
-
text-shadow: 0 0 2px rgba(0, 0, 0, 0.5);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
@media (prefers-color-scheme: dark) {
|
|
41
|
-
.background {
|
|
42
|
-
background-image: url('/public/img/dark_bg.webp');
|
|
43
|
-
|
|
44
|
-
.light {
|
|
45
|
-
display: none;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
@media (prefers-color-scheme: light) {
|
|
51
|
-
.dark {
|
|
52
|
-
display: none;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
</style>
|
|
57
|
-
|
|
58
|
-
<template>
|
|
59
|
-
<div class="background">
|
|
60
|
-
<img class="bg-img dark" src="/public/img/dark_bg.webp">
|
|
61
|
-
<img class="bg-img light" src="/public/img/auth_bg.webp">
|
|
62
|
-
<div class="version" v-if="version">Omegga v{{version}}</div>
|
|
63
|
-
<slot />
|
|
64
|
-
</div>
|
|
65
|
-
</template>
|
|
66
|
-
<script>
|
|
67
|
-
|
|
68
|
-
import Vue from 'vue';
|
|
69
|
-
|
|
70
|
-
export default Vue.component('br-background', {
|
|
71
|
-
sockets: {
|
|
72
|
-
data(data) {
|
|
73
|
-
this.version = data.version;
|
|
74
|
-
}
|
|
75
|
-
},
|
|
76
|
-
data() {
|
|
77
|
-
return {
|
|
78
|
-
version: this.omeggaData && this.omeggaData.version,
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
</script>
|