@fdm-monster/server 1.5.0-rc1
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/.env +19 -0
- package/.env.template +43 -0
- package/.gitattributes +1 -0
- package/.idea/codeStyles/Project.xml +85 -0
- package/.idea/codeStyles/codeStyleConfig.xml +5 -0
- package/.idea/dbnavigator.xml +574 -0
- package/.idea/fdm-monster.iml +16 -0
- package/.idea/inspectionProfiles/Project_Default.xml +22 -0
- package/.idea/jsLibraryMappings.xml +6 -0
- package/.idea/modules.xml +12 -0
- package/.idea/prettier.xml +6 -0
- package/.idea/vcs.xml +17 -0
- package/.swcrc +33 -0
- package/CODE_OF_CONDUCT.md +46 -0
- package/CONTRIBUTING.md +134 -0
- package/LICENSE +661 -0
- package/README.md +149 -0
- package/SECURITY.md +16 -0
- package/dist/@type/express/index.d.js +7 -0
- package/dist/@type/express/index.d.js.map +1 -0
- package/dist/constants/authorization.constants.js +99 -0
- package/dist/constants/authorization.constants.js.map +1 -0
- package/dist/constants/event.constants.js +55 -0
- package/dist/constants/event.constants.js.map +1 -0
- package/dist/constants/http-status-codes.constants.js +268 -0
- package/dist/constants/http-status-codes.constants.js.map +1 -0
- package/dist/constants/server-settings.constants.js +119 -0
- package/dist/constants/server-settings.constants.js.map +1 -0
- package/dist/constants/service.constants.js +48 -0
- package/dist/constants/service.constants.js.map +1 -0
- package/dist/container.js +161 -0
- package/dist/container.js.map +1 -0
- package/dist/container.tokens.js +83 -0
- package/dist/container.tokens.js.map +1 -0
- package/dist/controllers/auth.controller.js +143 -0
- package/dist/controllers/auth.controller.js.map +1 -0
- package/dist/controllers/batch-call.controller.js +59 -0
- package/dist/controllers/batch-call.controller.js.map +1 -0
- package/dist/controllers/camera-stream.controller.js +57 -0
- package/dist/controllers/camera-stream.controller.js.map +1 -0
- package/dist/controllers/custom-gcode.controller.js +76 -0
- package/dist/controllers/custom-gcode.controller.js.map +1 -0
- package/dist/controllers/first-time-setup.controller.js +65 -0
- package/dist/controllers/first-time-setup.controller.js.map +1 -0
- package/dist/controllers/floor.controller.js +78 -0
- package/dist/controllers/floor.controller.js.map +1 -0
- package/dist/controllers/plugin-firmware-update.controller.js +140 -0
- package/dist/controllers/plugin-firmware-update.controller.js.map +1 -0
- package/dist/controllers/print-completion.controller.js +58 -0
- package/dist/controllers/print-completion.controller.js.map +1 -0
- package/dist/controllers/printer-files.controller.js +208 -0
- package/dist/controllers/printer-files.controller.js.map +1 -0
- package/dist/controllers/printer-settings.controller.js +58 -0
- package/dist/controllers/printer-settings.controller.js.map +1 -0
- package/dist/controllers/printer.controller.js +287 -0
- package/dist/controllers/printer.controller.js.map +1 -0
- package/dist/controllers/server-private.controller.js +122 -0
- package/dist/controllers/server-private.controller.js.map +1 -0
- package/dist/controllers/server-public.controller.js +140 -0
- package/dist/controllers/server-public.controller.js.map +1 -0
- package/dist/controllers/settings.controller.js +89 -0
- package/dist/controllers/settings.controller.js.map +1 -0
- package/dist/controllers/user.controller.js +137 -0
- package/dist/controllers/user.controller.js.map +1 -0
- package/dist/controllers/validation/auth-controller.validation.js +15 -0
- package/dist/controllers/validation/auth-controller.validation.js.map +1 -0
- package/dist/controllers/validation/batch-controller.validation.js +29 -0
- package/dist/controllers/validation/batch-controller.validation.js.map +1 -0
- package/dist/controllers/validation/generic.validation.js +15 -0
- package/dist/controllers/validation/generic.validation.js.map +1 -0
- package/dist/controllers/validation/printer-controller.validation.js +66 -0
- package/dist/controllers/validation/printer-controller.validation.js.map +1 -0
- package/dist/controllers/validation/printer-files-controller.validation.js +66 -0
- package/dist/controllers/validation/printer-files-controller.validation.js.map +1 -0
- package/dist/controllers/validation/printer-settings-controller.validation.js +15 -0
- package/dist/controllers/validation/printer-settings-controller.validation.js.map +1 -0
- package/dist/controllers/validation/setting.validation.js +19 -0
- package/dist/controllers/validation/setting.validation.js.map +1 -0
- package/dist/controllers/validation/user-controller.validation.js +16 -0
- package/dist/controllers/validation/user-controller.validation.js.map +1 -0
- package/dist/exceptions/job.exceptions.js +18 -0
- package/dist/exceptions/job.exceptions.js.map +1 -0
- package/dist/exceptions/runtime.exceptions.js +108 -0
- package/dist/exceptions/runtime.exceptions.js.map +1 -0
- package/dist/handlers/cache-manager.js +25 -0
- package/dist/handlers/cache-manager.js.map +1 -0
- package/dist/handlers/event-emitter.js +31 -0
- package/dist/handlers/event-emitter.js.map +1 -0
- package/dist/handlers/logger-factory.js +18 -0
- package/dist/handlers/logger-factory.js.map +1 -0
- package/dist/handlers/logger.js +85 -0
- package/dist/handlers/logger.js.map +1 -0
- package/dist/handlers/validators.js +131 -0
- package/dist/handlers/validators.js.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/authenticate.js +83 -0
- package/dist/middleware/authenticate.js.map +1 -0
- package/dist/middleware/database.js +26 -0
- package/dist/middleware/database.js.map +1 -0
- package/dist/middleware/exception.handler.js +96 -0
- package/dist/middleware/exception.handler.js.map +1 -0
- package/dist/middleware/global.middleware.js +58 -0
- package/dist/middleware/global.middleware.js.map +1 -0
- package/dist/middleware/passport.js +44 -0
- package/dist/middleware/passport.js.map +1 -0
- package/dist/middleware/printer.js +49 -0
- package/dist/middleware/printer.js.map +1 -0
- package/dist/migrations/1696187882312-PrinterFile.js +40 -0
- package/dist/migrations/1696187882312-PrinterFile.js.map +1 -0
- package/dist/models/Auth/Permission.js +20 -0
- package/dist/models/Auth/Permission.js.map +1 -0
- package/dist/models/Auth/RefreshToken.js +41 -0
- package/dist/models/Auth/RefreshToken.js.map +1 -0
- package/dist/models/Auth/Role.js +20 -0
- package/dist/models/Auth/Role.js.map +1 -0
- package/dist/models/Auth/User.js +51 -0
- package/dist/models/Auth/User.js.map +1 -0
- package/dist/models/CameraStream.js +59 -0
- package/dist/models/CameraStream.js.map +1 -0
- package/dist/models/CustomGcode.js +28 -0
- package/dist/models/CustomGcode.js.map +1 -0
- package/dist/models/Floor.js +33 -0
- package/dist/models/Floor.js.map +1 -0
- package/dist/models/FloorPrinter.js +29 -0
- package/dist/models/FloorPrinter.js.map +1 -0
- package/dist/models/PrintCompletion.js +40 -0
- package/dist/models/PrintCompletion.js.map +1 -0
- package/dist/models/Printer.js +113 -0
- package/dist/models/Printer.js.map +1 -0
- package/dist/models/ServerSettings.js +168 -0
- package/dist/models/ServerSettings.js.map +1 -0
- package/dist/models/Settings.js +168 -0
- package/dist/models/Settings.js.map +1 -0
- package/dist/models/index.js +54 -0
- package/dist/models/index.js.map +1 -0
- package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js +49 -0
- package/dist/mongo-migrations/20210713120034-printers-settingsapperance-apikey.js.map +1 -0
- package/dist/mongo-migrations/20210907173950-printers-enabled.js +39 -0
- package/dist/mongo-migrations/20210907173950-printers-enabled.js.map +1 -0
- package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js +39 -0
- package/dist/mongo-migrations/20211029110742-user-password-passwordhash.js.map +1 -0
- package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js +60 -0
- package/dist/mongo-migrations/20230414141005-floor-remove-groupinfloor.js.map +1 -0
- package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js +30 -0
- package/dist/mongo-migrations/20230427202911-printer-remove-sortindex.js.map +1 -0
- package/dist/mongo-migrations/20230716065316-user-remove-name.js +30 -0
- package/dist/mongo-migrations/20230716065316-user-remove-name.js.map +1 -0
- package/dist/nodemon_restart_trigger.js +4 -0
- package/dist/nodemon_restart_trigger.js.map +1 -0
- package/dist/server.constants.js +99 -0
- package/dist/server.constants.js.map +1 -0
- package/dist/server.core.js +91 -0
- package/dist/server.core.js.map +1 -0
- package/dist/server.env.js +225 -0
- package/dist/server.env.js.map +1 -0
- package/dist/server.host.js +106 -0
- package/dist/server.host.js.map +1 -0
- package/dist/services/authentication/auth.service.js +136 -0
- package/dist/services/authentication/auth.service.js.map +1 -0
- package/dist/services/authentication/jwt.service.js +34 -0
- package/dist/services/authentication/jwt.service.js.map +1 -0
- package/dist/services/authentication/permission.service.js +73 -0
- package/dist/services/authentication/permission.service.js.map +1 -0
- package/dist/services/authentication/refresh-token.service.js +99 -0
- package/dist/services/authentication/refresh-token.service.js.map +1 -0
- package/dist/services/authentication/role.service.js +120 -0
- package/dist/services/authentication/role.service.js.map +1 -0
- package/dist/services/authentication/user.service.js +154 -0
- package/dist/services/authentication/user.service.js.map +1 -0
- package/dist/services/batch-call.service.js +148 -0
- package/dist/services/batch-call.service.js.map +1 -0
- package/dist/services/camera-stream.service.js +80 -0
- package/dist/services/camera-stream.service.js.map +1 -0
- package/dist/services/core/client-bundle.service.js +156 -0
- package/dist/services/core/client-bundle.service.js.map +1 -0
- package/dist/services/core/config.service.js +26 -0
- package/dist/services/core/config.service.js.map +1 -0
- package/dist/services/core/github.service.js +74 -0
- package/dist/services/core/github.service.js.map +1 -0
- package/dist/services/core/logs-manager.service.js +87 -0
- package/dist/services/core/logs-manager.service.js.map +1 -0
- package/dist/services/core/monsterpi.service.js +38 -0
- package/dist/services/core/monsterpi.service.js.map +1 -0
- package/dist/services/core/multer.service.js +122 -0
- package/dist/services/core/multer.service.js.map +1 -0
- package/dist/services/core/server-release.service.js +116 -0
- package/dist/services/core/server-release.service.js.map +1 -0
- package/dist/services/core/server-update.service.js +73 -0
- package/dist/services/core/server-update.service.js.map +1 -0
- package/dist/services/core/task-manager.service.js +196 -0
- package/dist/services/core/task-manager.service.js.map +1 -0
- package/dist/services/core/yaml.service.js +278 -0
- package/dist/services/core/yaml.service.js.map +1 -0
- package/dist/services/custom-gcode.service.js +48 -0
- package/dist/services/custom-gcode.service.js.map +1 -0
- package/dist/services/floor.service.js +183 -0
- package/dist/services/floor.service.js.map +1 -0
- package/dist/services/influxdb-v2/influx-db-v2-base.service.js +45 -0
- package/dist/services/influxdb-v2/influx-db-v2-base.service.js.map +1 -0
- package/dist/services/interfaces/auth.service.interface.js +6 -0
- package/dist/services/interfaces/auth.service.interface.js.map +1 -0
- package/dist/services/interfaces/camera-stream.dto.js +109 -0
- package/dist/services/interfaces/camera-stream.dto.js.map +1 -0
- package/dist/services/interfaces/camera-stream.service.interface.js +6 -0
- package/dist/services/interfaces/camera-stream.service.interface.js.map +1 -0
- package/dist/services/interfaces/custom-gcode.dto.js +18 -0
- package/dist/services/interfaces/custom-gcode.dto.js.map +1 -0
- package/dist/services/interfaces/custom-gcode.service.interface.js +6 -0
- package/dist/services/interfaces/custom-gcode.service.interface.js.map +1 -0
- package/dist/services/interfaces/floor.dto.js +61 -0
- package/dist/services/interfaces/floor.dto.js.map +1 -0
- package/dist/services/interfaces/floor.service.interface.js +6 -0
- package/dist/services/interfaces/floor.service.interface.js.map +1 -0
- package/dist/services/interfaces/gcode-analysis.dto.js +6 -0
- package/dist/services/interfaces/gcode-analysis.dto.js.map +1 -0
- package/dist/services/interfaces/jwt.service.interface.js +6 -0
- package/dist/services/interfaces/jwt.service.interface.js.map +1 -0
- package/dist/services/interfaces/login.dto.js +16 -0
- package/dist/services/interfaces/login.dto.js.map +1 -0
- package/dist/services/interfaces/page.interface.js +16 -0
- package/dist/services/interfaces/page.interface.js.map +1 -0
- package/dist/services/interfaces/permission.dto.js +16 -0
- package/dist/services/interfaces/permission.dto.js.map +1 -0
- package/dist/services/interfaces/permission.service.interface.js +6 -0
- package/dist/services/interfaces/permission.service.interface.js.map +1 -0
- package/dist/services/interfaces/printer-file.dto.js +27 -0
- package/dist/services/interfaces/printer-file.dto.js.map +1 -0
- package/dist/services/interfaces/printer-files.service.interface.js +6 -0
- package/dist/services/interfaces/printer-files.service.interface.js.map +1 -0
- package/dist/services/interfaces/printer.dto.js +18 -0
- package/dist/services/interfaces/printer.dto.js.map +1 -0
- package/dist/services/interfaces/printer.service.interface.js +6 -0
- package/dist/services/interfaces/printer.service.interface.js.map +1 -0
- package/dist/services/interfaces/role-service.interface.js +6 -0
- package/dist/services/interfaces/role-service.interface.js.map +1 -0
- package/dist/services/interfaces/settings.dto.js +34 -0
- package/dist/services/interfaces/settings.dto.js.map +1 -0
- package/dist/services/interfaces/settings.service.interface.js +6 -0
- package/dist/services/interfaces/settings.service.interface.js.map +1 -0
- package/dist/services/interfaces/user-service.interface.js +6 -0
- package/dist/services/interfaces/user-service.interface.js.map +1 -0
- package/dist/services/interfaces/user.dto.js +39 -0
- package/dist/services/interfaces/user.dto.js.map +1 -0
- package/dist/services/octoprint/constants/firmware-update-settings.constants.js +32 -0
- package/dist/services/octoprint/constants/firmware-update-settings.constants.js.map +1 -0
- package/dist/services/octoprint/constants/octoprint-service.constants.js +101 -0
- package/dist/services/octoprint/constants/octoprint-service.constants.js.map +1 -0
- package/dist/services/octoprint/constants/octoprint-websocket.constants.js +88 -0
- package/dist/services/octoprint/constants/octoprint-websocket.constants.js.map +1 -0
- package/dist/services/octoprint/octoprint-api.routes.js +192 -0
- package/dist/services/octoprint/octoprint-api.routes.js.map +1 -0
- package/dist/services/octoprint/octoprint-api.service.js +402 -0
- package/dist/services/octoprint/octoprint-api.service.js.map +1 -0
- package/dist/services/octoprint/octoprint-sockio.adapter.js +309 -0
- package/dist/services/octoprint/octoprint-sockio.adapter.js.map +1 -0
- package/dist/services/octoprint/plugin-base.service.js +102 -0
- package/dist/services/octoprint/plugin-base.service.js.map +1 -0
- package/dist/services/octoprint/plugin-firmware-update.service.js +104 -0
- package/dist/services/octoprint/plugin-firmware-update.service.js.map +1 -0
- package/dist/services/octoprint/plugin-repository.cache.js +45 -0
- package/dist/services/octoprint/plugin-repository.cache.js.map +1 -0
- package/dist/services/octoprint/socket.factory.js +22 -0
- package/dist/services/octoprint/socket.factory.js.map +1 -0
- package/dist/services/octoprint/utils/api.utils.js +72 -0
- package/dist/services/octoprint/utils/api.utils.js.map +1 -0
- package/dist/services/orm/floor.service.interface.js +73 -0
- package/dist/services/orm/floor.service.interface.js.map +1 -0
- package/dist/services/orm/printer.service.interface.js +6 -0
- package/dist/services/orm/printer.service.interface.js.map +1 -0
- package/dist/services/print-completion.service.js +162 -0
- package/dist/services/print-completion.service.js.map +1 -0
- package/dist/services/printer-files.service.js +91 -0
- package/dist/services/printer-files.service.js.map +1 -0
- package/dist/services/printer.service.js +230 -0
- package/dist/services/printer.service.js.map +1 -0
- package/dist/services/settings.service.js +158 -0
- package/dist/services/settings.service.js.map +1 -0
- package/dist/services/validators/floor-service.validation.js +60 -0
- package/dist/services/validators/floor-service.validation.js.map +1 -0
- package/dist/services/validators/print-completion-service.validation.js +20 -0
- package/dist/services/validators/print-completion-service.validation.js.map +1 -0
- package/dist/services/validators/printer-service.validation.js +48 -0
- package/dist/services/validators/printer-service.validation.js.map +1 -0
- package/dist/services/validators/settings-service.validation.js +71 -0
- package/dist/services/validators/settings-service.validation.js.map +1 -0
- package/dist/services/validators/user-service.validation.js +33 -0
- package/dist/services/validators/user-service.validation.js.map +1 -0
- package/dist/services/validators/yaml-service.validation.js +63 -0
- package/dist/services/validators/yaml-service.validation.js.map +1 -0
- package/dist/services/yaml.service.js +278 -0
- package/dist/services/yaml.service.js.map +1 -0
- package/dist/shared.constants.js +15 -0
- package/dist/shared.constants.js.map +1 -0
- package/dist/state/file-upload-tracker.cache.js +88 -0
- package/dist/state/file-upload-tracker.cache.js.map +1 -0
- package/dist/state/file.cache.js +99 -0
- package/dist/state/file.cache.js.map +1 -0
- package/dist/state/files.store.js +132 -0
- package/dist/state/files.store.js.map +1 -0
- package/dist/state/floor.store.js +99 -0
- package/dist/state/floor.store.js.map +1 -0
- package/dist/state/printer-events.cache.js +97 -0
- package/dist/state/printer-events.cache.js.map +1 -0
- package/dist/state/printer-socket.store.js +217 -0
- package/dist/state/printer-socket.store.js.map +1 -0
- package/dist/state/printer.cache.js +112 -0
- package/dist/state/printer.cache.js.map +1 -0
- package/dist/state/settings.store.js +154 -0
- package/dist/state/settings.store.js.map +1 -0
- package/dist/state/socket-io.gateway.js +66 -0
- package/dist/state/socket-io.gateway.js.map +1 -0
- package/dist/state/test-printer-socket.store.js +91 -0
- package/dist/state/test-printer-socket.store.js.map +1 -0
- package/dist/state/validation/create-test-printer.validation.js +18 -0
- package/dist/state/validation/create-test-printer.validation.js.map +1 -0
- package/dist/task.presets.js +50 -0
- package/dist/task.presets.js.map +1 -0
- package/dist/tasks/boot.task.js +198 -0
- package/dist/tasks/boot.task.js.map +1 -0
- package/dist/tasks/client-bundle.task.js +32 -0
- package/dist/tasks/client-bundle.task.js.map +1 -0
- package/dist/tasks/print-completion.socketio.task.js +85 -0
- package/dist/tasks/print-completion.socketio.task.js.map +1 -0
- package/dist/tasks/printer-file-clean.task.js +72 -0
- package/dist/tasks/printer-file-clean.task.js.map +1 -0
- package/dist/tasks/printer-websocket-restore.task.js +64 -0
- package/dist/tasks/printer-websocket-restore.task.js.map +1 -0
- package/dist/tasks/printer-websocket.task.js +43 -0
- package/dist/tasks/printer-websocket.task.js.map +1 -0
- package/dist/tasks/socketio.task.js +83 -0
- package/dist/tasks/socketio.task.js.map +1 -0
- package/dist/tasks/software-update.task.js +22 -0
- package/dist/tasks/software-update.task.js.map +1 -0
- package/dist/tasks.js +48 -0
- package/dist/tasks.js.map +1 -0
- package/dist/types/express/index.d.js +7 -0
- package/dist/types/express/index.d.js.map +1 -0
- package/dist/utils/array.util.js +27 -0
- package/dist/utils/array.util.js.map +1 -0
- package/dist/utils/benchmark.util.js +39 -0
- package/dist/utils/benchmark.util.js.map +1 -0
- package/dist/utils/cache/key-diff.cache.js +128 -0
- package/dist/utils/cache/key-diff.cache.js.map +1 -0
- package/dist/utils/correlation-token.util.js +15 -0
- package/dist/utils/correlation-token.util.js.map +1 -0
- package/dist/utils/crypto.utils.js +29 -0
- package/dist/utils/crypto.utils.js.map +1 -0
- package/dist/utils/env.utils.js +98 -0
- package/dist/utils/env.utils.js.map +1 -0
- package/dist/utils/error.utils.js +15 -0
- package/dist/utils/error.utils.js.map +1 -0
- package/dist/utils/find-predicate.utils.js +18 -0
- package/dist/utils/find-predicate.utils.js.map +1 -0
- package/dist/utils/fs.utils.js +38 -0
- package/dist/utils/fs.utils.js.map +1 -0
- package/dist/utils/is-docker.js +40 -0
- package/dist/utils/is-docker.js.map +1 -0
- package/dist/utils/mapper.utils.js +33 -0
- package/dist/utils/mapper.utils.js.map +1 -0
- package/dist/utils/metric.utils.js +35 -0
- package/dist/utils/metric.utils.js.map +1 -0
- package/dist/utils/normalize-url.js +245 -0
- package/dist/utils/normalize-url.js.map +1 -0
- package/dist/utils/semver.utils.js +18 -0
- package/dist/utils/semver.utils.js.map +1 -0
- package/dist/utils/time.utils.js +26 -0
- package/dist/utils/time.utils.js.map +1 -0
- package/dist/utils/url.utils.js +33 -0
- package/dist/utils/url.utils.js.map +1 -0
- package/dist/utils/websocket.adapter.js +105 -0
- package/dist/utils/websocket.adapter.js.map +1 -0
- package/migrate-mongo-config.js +45 -0
- package/nodemon_restart_trigger.js +1 -0
- package/package.json +149 -0
- package/src/index.ts +19 -0
- package/tsconfig.json +28 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
ensureMongoDBConnectionStringSet: function() {
|
|
13
|
+
return ensureMongoDBConnectionStringSet;
|
|
14
|
+
},
|
|
15
|
+
ensurePortSet: function() {
|
|
16
|
+
return ensurePortSet;
|
|
17
|
+
},
|
|
18
|
+
fetchMongoDBConnectionString: function() {
|
|
19
|
+
return fetchMongoDBConnectionString;
|
|
20
|
+
},
|
|
21
|
+
fetchServerPort: function() {
|
|
22
|
+
return fetchServerPort;
|
|
23
|
+
},
|
|
24
|
+
isEnvProd: function() {
|
|
25
|
+
return isEnvProd;
|
|
26
|
+
},
|
|
27
|
+
runMigrations: function() {
|
|
28
|
+
return runMigrations;
|
|
29
|
+
},
|
|
30
|
+
setupEnvConfig: function() {
|
|
31
|
+
return setupEnvConfig;
|
|
32
|
+
},
|
|
33
|
+
setupSentry: function() {
|
|
34
|
+
return setupSentry;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
const _migratemongo = require("migrate-mongo");
|
|
38
|
+
const _path = require("path");
|
|
39
|
+
const _child_process = require("child_process");
|
|
40
|
+
const _node = /*#__PURE__*/ _interop_require_wildcard(require("@sentry/node"));
|
|
41
|
+
const _dotenv = require("dotenv");
|
|
42
|
+
const _serverconstants = require("./server.constants");
|
|
43
|
+
const _logger = require("./handlers/logger");
|
|
44
|
+
const _envutils = require("./utils/env.utils");
|
|
45
|
+
const _errorutils = require("./utils/error.utils");
|
|
46
|
+
const _fsutils = require("./utils/fs.utils");
|
|
47
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
48
|
+
if (typeof WeakMap !== "function") return null;
|
|
49
|
+
var cacheBabelInterop = new WeakMap();
|
|
50
|
+
var cacheNodeInterop = new WeakMap();
|
|
51
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
52
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
53
|
+
})(nodeInterop);
|
|
54
|
+
}
|
|
55
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
56
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
57
|
+
return obj;
|
|
58
|
+
}
|
|
59
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
60
|
+
return {
|
|
61
|
+
default: obj
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
65
|
+
if (cache && cache.has(obj)) {
|
|
66
|
+
return cache.get(obj);
|
|
67
|
+
}
|
|
68
|
+
var newObj = {};
|
|
69
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
70
|
+
for(var key in obj){
|
|
71
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
72
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
73
|
+
if (desc && (desc.get || desc.set)) {
|
|
74
|
+
Object.defineProperty(newObj, key, desc);
|
|
75
|
+
} else {
|
|
76
|
+
newObj[key] = obj[key];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
newObj.default = obj;
|
|
81
|
+
if (cache) {
|
|
82
|
+
cache.set(obj, newObj);
|
|
83
|
+
}
|
|
84
|
+
return newObj;
|
|
85
|
+
}
|
|
86
|
+
const logger = new _logger.LoggerService("FDM-Environment", false);
|
|
87
|
+
// Constants and definition
|
|
88
|
+
const instructionsReferralURL = "https://github.com/fdm-monster/fdm-monster/blob/master/README.md";
|
|
89
|
+
const packageJsonPath = (0, _path.join)((0, _fsutils.superRootPath)(), "./package.json");
|
|
90
|
+
const dotEnvPath = (0, _path.join)((0, _fsutils.superRootPath)(), "./.env");
|
|
91
|
+
function isEnvTest() {
|
|
92
|
+
return process.env[_serverconstants.AppConstants.NODE_ENV_KEY] === _serverconstants.AppConstants.defaultTestEnv;
|
|
93
|
+
}
|
|
94
|
+
function isEnvProd() {
|
|
95
|
+
return process.env[_serverconstants.AppConstants.NODE_ENV_KEY] === _serverconstants.AppConstants.defaultProductionEnv;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Set and write the environment name to file, if applicable
|
|
99
|
+
|
|
100
|
+
*/ function ensureNodeEnvSet() {
|
|
101
|
+
const environment = process.env[_serverconstants.AppConstants.NODE_ENV_KEY];
|
|
102
|
+
if (!environment || !_serverconstants.AppConstants.knownEnvNames.includes(environment)) {
|
|
103
|
+
const newEnvName = _serverconstants.AppConstants.defaultProductionEnv;
|
|
104
|
+
process.env[_serverconstants.AppConstants.NODE_ENV_KEY] = newEnvName;
|
|
105
|
+
logger.warn(`NODE_ENV=${environment} was not set, or not known. Defaulting to NODE_ENV=${newEnvName}`);
|
|
106
|
+
} else {
|
|
107
|
+
logger.log(`✓ NODE_ENV variable correctly set (${environment})!`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Ensures that `process.env[AppConstants.VERSION_KEY]` is never undefined
|
|
112
|
+
*/ function ensureEnvNpmVersionSet() {
|
|
113
|
+
const packageJsonVersion = require(packageJsonPath).version;
|
|
114
|
+
if (!process.env[_serverconstants.AppConstants.VERSION_KEY]) {
|
|
115
|
+
process.env[_serverconstants.AppConstants.VERSION_KEY] = packageJsonVersion;
|
|
116
|
+
process.env[_serverconstants.AppConstants.NON_NPM_MODE_KEY] = "true";
|
|
117
|
+
logger.log(`✓ Running server version ${process.env[_serverconstants.AppConstants.VERSION_KEY]} in non-NPM mode!`);
|
|
118
|
+
} else {
|
|
119
|
+
logger.debug(`✓ Running server version ${process.env[_serverconstants.AppConstants.VERSION_KEY]} in NPM mode!`);
|
|
120
|
+
}
|
|
121
|
+
if (process.env[_serverconstants.AppConstants.VERSION_KEY] !== packageJsonVersion) {
|
|
122
|
+
process.env[_serverconstants.AppConstants.VERSION_KEY] = packageJsonVersion;
|
|
123
|
+
logger.debug(`~ Had to synchronize FDM version to '${packageJsonVersion}' as it was outdated.`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function removePm2Service(reason) {
|
|
127
|
+
logger.error(`Removing PM2 service as Server failed to start: ${reason}`);
|
|
128
|
+
(0, _child_process.execSync)(`pm2 delete ${_serverconstants.AppConstants.pm2ServiceName}`);
|
|
129
|
+
}
|
|
130
|
+
function setupPackageJsonVersionOrThrow() {
|
|
131
|
+
const result = (0, _envutils.verifyPackageJsonRequirements)((0, _fsutils.superRootPath)());
|
|
132
|
+
if (!result) {
|
|
133
|
+
if ((0, _envutils.isPm2)()) {
|
|
134
|
+
// TODO test this works under docker as well
|
|
135
|
+
removePm2Service("didnt pass startup validation (package.json)");
|
|
136
|
+
}
|
|
137
|
+
throw new Error(`Aborting server.`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Print out instructions URL
|
|
142
|
+
*/ function printInstructionsURL() {
|
|
143
|
+
logger.log(`Please make sure to read ${instructionsReferralURL} on how to configure your environment correctly.`);
|
|
144
|
+
}
|
|
145
|
+
function fetchMongoDBConnectionString() {
|
|
146
|
+
if (!process.env[_serverconstants.AppConstants.MONGO_KEY]) {
|
|
147
|
+
logger.debug(`~ ${_serverconstants.AppConstants.MONGO_KEY} environment variable is not set. Assuming default: ${_serverconstants.AppConstants.MONGO_KEY}=${_serverconstants.AppConstants.defaultMongoStringUnauthenticated}`);
|
|
148
|
+
printInstructionsURL();
|
|
149
|
+
process.env[_serverconstants.AppConstants.MONGO_KEY] = _serverconstants.AppConstants.defaultMongoStringUnauthenticated;
|
|
150
|
+
}
|
|
151
|
+
return process.env[_serverconstants.AppConstants.MONGO_KEY];
|
|
152
|
+
}
|
|
153
|
+
function fetchServerPort() {
|
|
154
|
+
let port = process.env[_serverconstants.AppConstants.SERVER_PORT_KEY];
|
|
155
|
+
if (Number.isNaN(parseInt(port))) {
|
|
156
|
+
// Update config immediately
|
|
157
|
+
process.env[_serverconstants.AppConstants.SERVER_PORT_KEY] = _serverconstants.AppConstants.defaultServerPort.toString();
|
|
158
|
+
port = process.env[_serverconstants.AppConstants.SERVER_PORT_KEY];
|
|
159
|
+
}
|
|
160
|
+
return port;
|
|
161
|
+
}
|
|
162
|
+
function ensureMongoDBConnectionStringSet() {
|
|
163
|
+
let dbConnectionString = process.env[_serverconstants.AppConstants.MONGO_KEY];
|
|
164
|
+
if (!dbConnectionString) {
|
|
165
|
+
fetchMongoDBConnectionString();
|
|
166
|
+
} else {
|
|
167
|
+
logger.log(`✓ ${_serverconstants.AppConstants.MONGO_KEY} environment variable set!`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
function setupSentry() {
|
|
171
|
+
const sentryDsnToken = (0, _envutils.getEnvOrDefault)(_serverconstants.AppConstants.sentryCustomDsnToken, _serverconstants.AppConstants.sentryCustomDsnDefault);
|
|
172
|
+
_node.init({
|
|
173
|
+
dsn: sentryDsnToken,
|
|
174
|
+
environment: process.env.NODE_ENV,
|
|
175
|
+
release: process.env.npm_package_version,
|
|
176
|
+
enabled: !isEnvTest(),
|
|
177
|
+
tracesSampleRate: (0, _envutils.isProductionEnvironment)() ? 0.25 : 1.0
|
|
178
|
+
});
|
|
179
|
+
process.on("unhandledRejection", (e)=>{
|
|
180
|
+
const message = `Unhandled rejection error - ${(0, _errorutils.errorSummary)(e)}`;
|
|
181
|
+
logger.error(message);
|
|
182
|
+
// The server must not crash
|
|
183
|
+
_node.captureException(e);
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
function ensurePortSet() {
|
|
187
|
+
fetchServerPort();
|
|
188
|
+
if (!process.env[_serverconstants.AppConstants.SERVER_PORT_KEY]) {
|
|
189
|
+
logger.log(`~ ${_serverconstants.AppConstants.SERVER_PORT_KEY} environment variable is not set. Assuming default: ${_serverconstants.AppConstants.SERVER_PORT_KEY}=${_serverconstants.AppConstants.defaultServerPort}.`);
|
|
190
|
+
printInstructionsURL();
|
|
191
|
+
process.env[_serverconstants.AppConstants.SERVER_PORT_KEY] = _serverconstants.AppConstants.defaultServerPort.toString();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function setupEnvConfig(skipDotEnv = false) {
|
|
195
|
+
if (!skipDotEnv) {
|
|
196
|
+
// This needs to be CWD of app.js, so be careful not to move this call.
|
|
197
|
+
(0, _dotenv.config)({
|
|
198
|
+
path: dotEnvPath
|
|
199
|
+
});
|
|
200
|
+
logger.log("✓ Parsed environment and (optional) .env file");
|
|
201
|
+
}
|
|
202
|
+
ensureNodeEnvSet();
|
|
203
|
+
setupPackageJsonVersionOrThrow();
|
|
204
|
+
ensureEnvNpmVersionSet();
|
|
205
|
+
setupSentry();
|
|
206
|
+
ensureMongoDBConnectionStringSet();
|
|
207
|
+
ensurePortSet();
|
|
208
|
+
}
|
|
209
|
+
async function runMigrations(db, client) {
|
|
210
|
+
const migrationsStatus = await (0, _migratemongo.status)(db);
|
|
211
|
+
const pendingMigrations = migrationsStatus.filter((m)=>m.appliedAt === "PENDING");
|
|
212
|
+
if (pendingMigrations.length) {
|
|
213
|
+
logger.log(`! MongoDB has ${pendingMigrations.length} migrations left to run (${migrationsStatus.length} migrations in total)`);
|
|
214
|
+
} else {
|
|
215
|
+
logger.log(`✓ Mongo Database is up to date [${migrationsStatus.length} migration applied]`);
|
|
216
|
+
}
|
|
217
|
+
const migrationResult = await (0, _migratemongo.up)(db, client);
|
|
218
|
+
if (migrationResult?.length > 0) {
|
|
219
|
+
logger.log(`Applied ${migrationResult.length} migrations successfully`, migrationResult);
|
|
220
|
+
} else {
|
|
221
|
+
logger.log("No migrations were run");
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
//# sourceMappingURL=server.env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/server.env.ts"],"names":["ensureMongoDBConnectionStringSet","ensurePortSet","fetchMongoDBConnectionString","fetchServerPort","isEnvProd","runMigrations","setupEnvConfig","setupSentry","logger","Logger","instructionsReferralURL","packageJsonPath","join","superRootPath","dotEnvPath","isEnvTest","process","env","AppConstants","NODE_ENV_KEY","defaultTestEnv","defaultProductionEnv","ensureNodeEnvSet","environment","knownEnvNames","includes","newEnvName","warn","log","ensureEnvNpmVersionSet","packageJsonVersion","require","version","VERSION_KEY","NON_NPM_MODE_KEY","debug","removePm2Service","reason","error","execSync","pm2ServiceName","setupPackageJsonVersionOrThrow","result","verifyPackageJsonRequirements","isPm2","Error","printInstructionsURL","MONGO_KEY","defaultMongoStringUnauthenticated","port","SERVER_PORT_KEY","Number","isNaN","parseInt","defaultServerPort","toString","dbConnectionString","sentryDsnToken","getEnvOrDefault","sentryCustomDsnToken","sentryCustomDsnDefault","Sentry","init","dsn","NODE_ENV","release","npm_package_version","enabled","tracesSampleRate","isProductionEnvironment","on","e","message","errorSummary","captureException","skipDotEnv","config","path","db","client","migrationsStatus","status","pendingMigrations","filter","m","appliedAt","length","migrationResult","up"],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "ServerHost", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return ServerHost;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _express = /*#__PURE__*/ _interop_require_default(require("express"));
|
|
12
|
+
const _mongoose = /*#__PURE__*/ _interop_require_default(require("mongoose"));
|
|
13
|
+
const _connecthistoryapifallback = /*#__PURE__*/ _interop_require_default(require("connect-history-api-fallback"));
|
|
14
|
+
const _awilixexpress = require("awilix-express");
|
|
15
|
+
const _path = require("path");
|
|
16
|
+
const _exceptionhandler = require("./middleware/exception.handler");
|
|
17
|
+
const _serverenv = require("./server.env");
|
|
18
|
+
const _runtimeexceptions = require("./exceptions/runtime.exceptions");
|
|
19
|
+
const _serverconstants = require("./server.constants");
|
|
20
|
+
const _fsutils = require("./utils/fs.utils");
|
|
21
|
+
const _envutils = require("./utils/env.utils");
|
|
22
|
+
function _interop_require_default(obj) {
|
|
23
|
+
return obj && obj.__esModule ? obj : {
|
|
24
|
+
default: obj
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
class ServerHost {
|
|
28
|
+
bootTask;
|
|
29
|
+
taskManagerService;
|
|
30
|
+
socketIoGateway;
|
|
31
|
+
appInstance = null;
|
|
32
|
+
configService;
|
|
33
|
+
logger;
|
|
34
|
+
constructor({ loggerFactory, bootTask, taskManagerService, socketIoGateway, configService }){
|
|
35
|
+
this.logger = loggerFactory(ServerHost.name);
|
|
36
|
+
this.bootTask = bootTask;
|
|
37
|
+
this.taskManagerService = taskManagerService;
|
|
38
|
+
this.socketIoGateway = socketIoGateway;
|
|
39
|
+
this.configService = configService;
|
|
40
|
+
}
|
|
41
|
+
async boot(app, quick_boot = false, listenRequests = true) {
|
|
42
|
+
// Enforce models to be strictly applied, any unknown property will not be persisted
|
|
43
|
+
_mongoose.default.set("strictQuery", true);
|
|
44
|
+
this.appInstance = app;
|
|
45
|
+
this.serveControllerRoutes(this.appInstance);
|
|
46
|
+
if (!quick_boot) {
|
|
47
|
+
await this.bootTask.runOnce();
|
|
48
|
+
}
|
|
49
|
+
if (listenRequests) return this.httpListen();
|
|
50
|
+
}
|
|
51
|
+
hasConnected() {
|
|
52
|
+
return _mongoose.default.connections[0].readyState;
|
|
53
|
+
}
|
|
54
|
+
serveControllerRoutes(app) {
|
|
55
|
+
const routePath = "./controllers";
|
|
56
|
+
// Catches any HTML request to paths like / or file/ as long as its text/html
|
|
57
|
+
app.use((req, res, next)=>{
|
|
58
|
+
if (!req.originalUrl.startsWith("/api") && !req.originalUrl.startsWith("/socket.io")) {
|
|
59
|
+
(0, _connecthistoryapifallback.default)()(req, res, next);
|
|
60
|
+
} else {
|
|
61
|
+
next();
|
|
62
|
+
}
|
|
63
|
+
}).use((0, _awilixexpress.loadControllers)(`${routePath}/*.controller.*`, {
|
|
64
|
+
cwd: __dirname,
|
|
65
|
+
ignore: "**/*.map"
|
|
66
|
+
})).use(_exceptionhandler.exceptionHandler);
|
|
67
|
+
// Serve the files for our frontend - do this later than the controllers
|
|
68
|
+
const bundleDistPath = (0, _path.join)((0, _fsutils.superRootPath)(), _serverconstants.AppConstants.defaultClientBundleStorage, "dist");
|
|
69
|
+
app.use(_express.default.static(bundleDistPath));
|
|
70
|
+
// Backup client in node_modules
|
|
71
|
+
const backupClientPath = (0, _path.join)((0, _fsutils.superRootPath)(), "node_modules", _serverconstants.AppConstants.clientPackageName, "dist");
|
|
72
|
+
app.use(_express.default.static(backupClientPath));
|
|
73
|
+
app.get("*", (req, res)=>{
|
|
74
|
+
const path = req.originalUrl;
|
|
75
|
+
let resource = "MVC";
|
|
76
|
+
if (path.startsWith("/socket.io") || path.startsWith("/api") || path.startsWith("/plugins")) {
|
|
77
|
+
resource = "API";
|
|
78
|
+
} else if (path.endsWith(".min.js")) {
|
|
79
|
+
resource = "client-bundle";
|
|
80
|
+
}
|
|
81
|
+
this.logger.error(`${resource} resource at '${path}' was not found`);
|
|
82
|
+
if (!path.startsWith("/socket.io")) {
|
|
83
|
+
throw new _runtimeexceptions.NotFoundException(`${resource} resource was not found`, path);
|
|
84
|
+
}
|
|
85
|
+
}).use(_exceptionhandler.exceptionHandler);
|
|
86
|
+
}
|
|
87
|
+
async httpListen() {
|
|
88
|
+
const port = (0, _serverenv.fetchServerPort)();
|
|
89
|
+
if (!(0, _envutils.isProductionEnvironment)() && this.configService.get(_serverconstants.AppConstants.debugRoutesKey, "false") === "true") {
|
|
90
|
+
const expressListRoutes = require("express-list-routes");
|
|
91
|
+
expressListRoutes(this.appInstance, {
|
|
92
|
+
prefix: "/"
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (!port || Number.isNaN(parseInt(port))) {
|
|
96
|
+
throw new Error("The FDM Server requires a numeric port input argument to run");
|
|
97
|
+
}
|
|
98
|
+
const hostOrFqdn = "0.0.0.0";
|
|
99
|
+
const server = this.appInstance.listen(parseInt(port), hostOrFqdn, ()=>{
|
|
100
|
+
this.logger.log(`Server started... open it at http://127.0.0.1:${port}`);
|
|
101
|
+
});
|
|
102
|
+
this.socketIoGateway.attachServer(server);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
//# sourceMappingURL=server.host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/server.host.ts"],"names":["ServerHost","bootTask","taskManagerService","socketIoGateway","appInstance","configService","logger","constructor","loggerFactory","name","boot","app","quick_boot","listenRequests","mongoose","set","serveControllerRoutes","runOnce","httpListen","hasConnected","connections","readyState","routePath","use","req","res","next","originalUrl","startsWith","history","loadControllers","cwd","__dirname","ignore","exceptionHandler","bundleDistPath","join","superRootPath","AppConstants","defaultClientBundleStorage","express","static","backupClientPath","clientPackageName","get","path","resource","endsWith","error","NotFoundException","port","fetchServerPort","isProductionEnvironment","debugRoutesKey","expressListRoutes","require","prefix","Number","isNaN","parseInt","Error","hostOrFqdn","server","listen","log","attachServer"],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "AuthService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return AuthService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
|
|
12
|
+
const _cryptoutils = require("../../utils/crypto.utils");
|
|
13
|
+
class AuthService {
|
|
14
|
+
logger;
|
|
15
|
+
userService;
|
|
16
|
+
jwtService;
|
|
17
|
+
settingsStore;
|
|
18
|
+
refreshTokenService;
|
|
19
|
+
/**
|
|
20
|
+
* When users are blacklisted at runtime, this cache can make quick work of rejecting them
|
|
21
|
+
*/ blacklistedJwtCache = {};
|
|
22
|
+
/**
|
|
23
|
+
* loginUser: starts new session: id-token, refresh, removing any old refresh
|
|
24
|
+
* logoutUser: ends session, removes refresh token and blacklists userId
|
|
25
|
+
* renewLoginByRefreshToken: renews session, reduces refresh attempts
|
|
26
|
+
* addBlackListEntry: private, adds a blacklisted entry after logout
|
|
27
|
+
* removeBlacklistEntry: private, removes a blacklisted entry
|
|
28
|
+
* logoutUser
|
|
29
|
+
* signJwtToken: private, purely signs a new jwt token
|
|
30
|
+
*/ /**
|
|
31
|
+
* cool features: faking other user logins (encapsulated login? Double login?)
|
|
32
|
+
* registration link
|
|
33
|
+
* loginUser: username/password based login
|
|
34
|
+
* blacklist: forcing all existing refresh tokens and jwts to be rejected of that user until login
|
|
35
|
+
* refreshAttempts => integer in setting with cap?
|
|
36
|
+
*/ constructor({ userService, jwtService, loggerFactory, settingsStore, refreshTokenService }){
|
|
37
|
+
this.userService = userService;
|
|
38
|
+
this.jwtService = jwtService;
|
|
39
|
+
this.logger = loggerFactory(AuthService.name);
|
|
40
|
+
this.settingsStore = settingsStore;
|
|
41
|
+
this.refreshTokenService = refreshTokenService;
|
|
42
|
+
}
|
|
43
|
+
async loginUser(username, password) {
|
|
44
|
+
const userDoc = await this.userService.findRawByUsername(username);
|
|
45
|
+
if (!userDoc) {
|
|
46
|
+
throw new _runtimeexceptions.AuthenticationError("Login incorrect");
|
|
47
|
+
}
|
|
48
|
+
const result = (0, _cryptoutils.comparePasswordHash)(password, userDoc.passwordHash);
|
|
49
|
+
if (!result) {
|
|
50
|
+
throw new _runtimeexceptions.AuthenticationError("Login incorrect");
|
|
51
|
+
}
|
|
52
|
+
const userId = userDoc.id.toString();
|
|
53
|
+
const token = await this.signJwtToken(userId);
|
|
54
|
+
await this.refreshTokenService.purgeOutdatedRefreshTokensByUserId(userId);
|
|
55
|
+
await this.purgeBlacklistedJwtCache();
|
|
56
|
+
const refreshToken = await this.refreshTokenService.createRefreshTokenForUserId(userId);
|
|
57
|
+
return {
|
|
58
|
+
token,
|
|
59
|
+
refreshToken
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
async logoutUserId(userId, jwtToken) {
|
|
63
|
+
await this.refreshTokenService.deleteRefreshTokenByUserId(userId);
|
|
64
|
+
if (jwtToken?.length) {
|
|
65
|
+
this.blacklistedJwtCache[jwtToken] = {
|
|
66
|
+
userId,
|
|
67
|
+
createdAt: Date.now()
|
|
68
|
+
};
|
|
69
|
+
await this.purgeBlacklistedJwtCache();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async purgeBlacklistedJwtCache() {
|
|
73
|
+
try {
|
|
74
|
+
const { jwtExpiresIn } = await this.settingsStore.getCredentialSettings();
|
|
75
|
+
const now = Date.now();
|
|
76
|
+
const keys = Object.keys(this.blacklistedJwtCache);
|
|
77
|
+
for (const key of keys){
|
|
78
|
+
const { createdAt } = this.blacklistedJwtCache[key];
|
|
79
|
+
if (now - createdAt > jwtExpiresIn) {
|
|
80
|
+
delete this.blacklistedJwtCache[key];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
} catch (err) {
|
|
84
|
+
this.logger.error("Failed to purge blacklisted jwt cache", err);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async logoutUserRefreshToken(refreshToken) {
|
|
88
|
+
const userRefreshToken = await this.getValidRefreshToken(refreshToken);
|
|
89
|
+
await this.refreshTokenService.deleteRefreshTokenByUserId(userRefreshToken.userId.toString());
|
|
90
|
+
}
|
|
91
|
+
async renewLoginByRefreshToken(refreshToken) {
|
|
92
|
+
const userRefreshToken = await this.getValidRefreshToken(refreshToken, false);
|
|
93
|
+
if (!userRefreshToken) {
|
|
94
|
+
throw new _runtimeexceptions.AuthenticationError("The refresh token was invalid or expired, could not refresh user token");
|
|
95
|
+
}
|
|
96
|
+
const userId = userRefreshToken.userId.toString();
|
|
97
|
+
const token = await this.signJwtToken(userId);
|
|
98
|
+
await this.increaseRefreshTokenAttemptsUsed(userRefreshToken.refreshToken);
|
|
99
|
+
return token;
|
|
100
|
+
}
|
|
101
|
+
isJwtTokenBlacklisted(jwtToken) {
|
|
102
|
+
return this.blacklistedJwtCache[jwtToken];
|
|
103
|
+
}
|
|
104
|
+
async getValidRefreshToken(refreshToken, throwNotFoundError = true) {
|
|
105
|
+
const userRefreshToken = await this.refreshTokenService.getRefreshToken(refreshToken, throwNotFoundError);
|
|
106
|
+
if (Date.now() > userRefreshToken.expiresAt) {
|
|
107
|
+
await this.refreshTokenService.deleteRefreshTokenByUserId(userRefreshToken.userId.toString());
|
|
108
|
+
throw new _runtimeexceptions.AuthenticationError("Refresh token expired, login required");
|
|
109
|
+
}
|
|
110
|
+
return userRefreshToken;
|
|
111
|
+
}
|
|
112
|
+
async increaseRefreshTokenAttemptsUsed(refreshToken) {
|
|
113
|
+
const { refreshTokenAttempts } = await this.settingsStore.getCredentialSettings();
|
|
114
|
+
const userRefreshToken = await this.getValidRefreshToken(refreshToken);
|
|
115
|
+
// If no attempts are set, then we don't care about attempts
|
|
116
|
+
if (refreshTokenAttempts < 0) return;
|
|
117
|
+
const attemptsUsed = userRefreshToken.refreshAttemptsUsed;
|
|
118
|
+
if (attemptsUsed >= refreshTokenAttempts) {
|
|
119
|
+
await this.refreshTokenService.deleteRefreshTokenByUserId(userRefreshToken.userId.toString());
|
|
120
|
+
throw new _runtimeexceptions.AuthenticationError("Refresh token attempts exceeded, login required");
|
|
121
|
+
}
|
|
122
|
+
await this.refreshTokenService.updateRefreshTokenAttempts(refreshToken, attemptsUsed + 1);
|
|
123
|
+
}
|
|
124
|
+
async signJwtToken(userId) {
|
|
125
|
+
const user = await this.userService.getUser(userId);
|
|
126
|
+
if (user.needsPasswordChange) {
|
|
127
|
+
throw new _runtimeexceptions.PasswordChangeRequiredError();
|
|
128
|
+
}
|
|
129
|
+
if (!user.isVerified) {
|
|
130
|
+
throw new _runtimeexceptions.AuthenticationError("User is not verified yet");
|
|
131
|
+
}
|
|
132
|
+
return this.jwtService.signJwtToken(userId, user.username);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
//# sourceMappingURL=auth.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/services/authentication/auth.service.ts"],"names":["AuthService","logger","userService","jwtService","settingsStore","refreshTokenService","blacklistedJwtCache","constructor","loggerFactory","name","loginUser","username","password","userDoc","findRawByUsername","AuthenticationError","result","comparePasswordHash","passwordHash","userId","id","toString","token","signJwtToken","purgeOutdatedRefreshTokensByUserId","purgeBlacklistedJwtCache","refreshToken","createRefreshTokenForUserId","logoutUserId","jwtToken","deleteRefreshTokenByUserId","length","createdAt","Date","now","jwtExpiresIn","getCredentialSettings","keys","Object","key","err","error","logoutUserRefreshToken","userRefreshToken","getValidRefreshToken","renewLoginByRefreshToken","increaseRefreshTokenAttemptsUsed","isJwtTokenBlacklisted","throwNotFoundError","getRefreshToken","expiresAt","refreshTokenAttempts","attemptsUsed","refreshAttemptsUsed","updateRefreshTokenAttempts","user","getUser","needsPasswordChange","PasswordChangeRequiredError","isVerified"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "JwtService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return JwtService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _jsonwebtoken = require("jsonwebtoken");
|
|
12
|
+
const _serverconstants = require("../../server.constants");
|
|
13
|
+
class JwtService {
|
|
14
|
+
settingsStore;
|
|
15
|
+
configService;
|
|
16
|
+
constructor({ settingsStore, configService }){
|
|
17
|
+
this.settingsStore = settingsStore;
|
|
18
|
+
this.configService = configService;
|
|
19
|
+
}
|
|
20
|
+
async signJwtToken(userId, username) {
|
|
21
|
+
const { jwtSecret, jwtExpiresIn } = await this.settingsStore.getCredentialSettings();
|
|
22
|
+
return (0, _jsonwebtoken.sign)({
|
|
23
|
+
userId,
|
|
24
|
+
username
|
|
25
|
+
}, jwtSecret, {
|
|
26
|
+
expiresIn: jwtExpiresIn,
|
|
27
|
+
subject: userId,
|
|
28
|
+
audience: this.configService.get(_serverconstants.AppConstants.OVERRIDE_JWT_AUDIENCE, _serverconstants.AppConstants.DEFAULT_JWT_AUDIENCE),
|
|
29
|
+
issuer: this.configService.get(_serverconstants.AppConstants.OVERRIDE_JWT_ISSUER, _serverconstants.AppConstants.DEFAULT_JWT_ISSUER)
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=jwt.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/services/authentication/jwt.service.ts"],"names":["JwtService","settingsStore","configService","constructor","signJwtToken","userId","username","jwtSecret","jwtExpiresIn","getCredentialSettings","sign","expiresIn","subject","audience","get","AppConstants","OVERRIDE_JWT_AUDIENCE","DEFAULT_JWT_AUDIENCE","issuer","OVERRIDE_JWT_ISSUER","DEFAULT_JWT_ISSUER"],"mappings":";;;;+BAOaA;;;eAAAA;;;8BAPQ;iCACQ;AAMtB,MAAMA;IACXC,cAA6B;IAC7BC,cAA8B;IAE9BC,YAAY,EAAEF,aAAa,EAAEC,aAAa,EAAmE,CAAE;QAC7G,IAAI,CAACD,aAAa,GAAGA;QACrB,IAAI,CAACC,aAAa,GAAGA;IACvB;IAEA,MAAME,aAAaC,MAAc,EAAEC,QAAgB,EAAE;QACnD,MAAM,EAAEC,SAAS,EAAEC,YAAY,EAAE,GAAG,MAAM,IAAI,CAACP,aAAa,CAACQ,qBAAqB;QAElF,OAAOC,IAAAA,kBAAI,EAAC;YAAEL;YAAQC;QAAS,GAAGC,WAAW;YAC3CI,WAAWH;YACXI,SAASP;YACTQ,UAAU,IAAI,CAACX,aAAa,CAACY,GAAG,CAACC,6BAAY,CAACC,qBAAqB,EAAED,6BAAY,CAACE,oBAAoB;YACtGC,QAAQ,IAAI,CAAChB,aAAa,CAACY,GAAG,CAACC,6BAAY,CAACI,mBAAmB,EAAEJ,6BAAY,CAACK,kBAAkB;QAClG;IACF;AACF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "PermissionService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return PermissionService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _models = require("../../models");
|
|
12
|
+
const _authorizationconstants = require("../../constants/authorization.constants");
|
|
13
|
+
const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
|
|
14
|
+
class PermissionService {
|
|
15
|
+
logger;
|
|
16
|
+
constructor({ loggerFactory }){
|
|
17
|
+
this.logger = loggerFactory(PermissionService.name);
|
|
18
|
+
}
|
|
19
|
+
_permissions = [];
|
|
20
|
+
get permissions() {
|
|
21
|
+
return this._permissions;
|
|
22
|
+
}
|
|
23
|
+
toDto(permission) {
|
|
24
|
+
return {
|
|
25
|
+
id: permission.id,
|
|
26
|
+
name: permission.name
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
authorizePermission(requiredPermission, assignedPermissions) {
|
|
30
|
+
return !!assignedPermissions.find((assignedPermission)=>{
|
|
31
|
+
const normalizePermission = this.normalizePermission(assignedPermission);
|
|
32
|
+
if (!normalizePermission) return false;
|
|
33
|
+
return normalizePermission === requiredPermission;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
async getPermissionByName(permissionName) {
|
|
37
|
+
const permission = this.permissions.find((r)=>r.name === permissionName);
|
|
38
|
+
if (!permission) throw new _runtimeexceptions.NotFoundException("Permission not found");
|
|
39
|
+
return permission;
|
|
40
|
+
}
|
|
41
|
+
async getPermission(permissionId) {
|
|
42
|
+
const permission = this.permissions.find((r)=>r.id === permissionId);
|
|
43
|
+
if (!permission) throw new _runtimeexceptions.NotFoundException(`Permission Id '${permissionId}' not found`);
|
|
44
|
+
return permission;
|
|
45
|
+
}
|
|
46
|
+
async syncPermissions() {
|
|
47
|
+
this._permissions = [];
|
|
48
|
+
const permissionDefinition = (0, _authorizationconstants.flattenPermissionDefinition)();
|
|
49
|
+
for (let permission of permissionDefinition){
|
|
50
|
+
const storedPermission = await _models.Permission.findOne({
|
|
51
|
+
name: permission
|
|
52
|
+
});
|
|
53
|
+
if (!storedPermission) {
|
|
54
|
+
const newPermission = await _models.Permission.create({
|
|
55
|
+
name: permission
|
|
56
|
+
});
|
|
57
|
+
this._permissions.push(newPermission);
|
|
58
|
+
} else {
|
|
59
|
+
this._permissions.push(storedPermission);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
normalizePermission(assignedPermission) {
|
|
64
|
+
const permissionInstance = this.permissions.find((r)=>r.id === assignedPermission || r.name === assignedPermission);
|
|
65
|
+
if (!permissionInstance) {
|
|
66
|
+
this.logger.warn(`The permission by ID ${assignedPermission} did not exist. Skipping.`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
return permissionInstance.name;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=permission.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/services/authentication/permission.service.ts"],"names":["PermissionService","logger","constructor","loggerFactory","name","_permissions","permissions","toDto","permission","id","authorizePermission","requiredPermission","assignedPermissions","find","assignedPermission","normalizePermission","getPermissionByName","permissionName","r","NotFoundException","getPermission","permissionId","syncPermissions","permissionDefinition","flattenPermissionDefinition","storedPermission","Permission","findOne","newPermission","create","push","permissionInstance","warn"],"mappings":";;;;+BASaA;;;eAAAA;;;wBATc;wCACiB;mCACV;AAO3B,MAAMA;IACHC,OAAsB;IAE9BC,YAAY,EAAEC,aAAa,EAAqC,CAAE;QAChE,IAAI,CAACF,MAAM,GAAGE,cAAcH,kBAAkBI,IAAI;IACpD;IAEQC,eAA8B,EAAE,CAAC;IAEzC,IAAIC,cAAc;QAChB,OAAO,IAAI,CAACD,YAAY;IAC1B;IAEAE,MAAMC,UAAuB,EAAE;QAC7B,OAAO;YACLC,IAAID,WAAWC,EAAE;YACjBL,MAAMI,WAAWJ,IAAI;QACvB;IACF;IAEAM,oBAAoBC,kBAA0B,EAAEC,mBAA6B,EAAE;QAC7E,OAAO,CAAC,CAACA,oBAAoBC,IAAI,CAAC,CAACC;YACjC,MAAMC,sBAAsB,IAAI,CAACA,mBAAmB,CAACD;YACrD,IAAI,CAACC,qBAAqB,OAAO;YACjC,OAAOA,wBAAwBJ;QACjC;IACF;IAEA,MAAMK,oBAAoBC,cAAsB,EAAE;QAChD,MAAMT,aAAa,IAAI,CAACF,WAAW,CAACO,IAAI,CAAC,CAACK,IAAMA,EAAEd,IAAI,KAAKa;QAC3D,IAAI,CAACT,YAAY,MAAM,IAAIW,oCAAiB,CAAC;QAE7C,OAAOX;IACT;IAEA,MAAMY,cAAcC,YAAyB,EAAE;QAC7C,MAAMb,aAAa,IAAI,CAACF,WAAW,CAACO,IAAI,CAAC,CAACK,IAAMA,EAAET,EAAE,KAAKY;QACzD,IAAI,CAACb,YAAY,MAAM,IAAIW,oCAAiB,CAAC,CAAC,eAAe,EAAEE,aAAa,WAAW,CAAC;QAExF,OAAOb;IACT;IAEA,MAAMc,kBAAkB;QACtB,IAAI,CAACjB,YAAY,GAAG,EAAE;QAEtB,MAAMkB,uBAAuBC,IAAAA,mDAA2B;QACxD,KAAK,IAAIhB,cAAce,qBAAsB;YAC3C,MAAME,mBAAmB,MAAMC,kBAAU,CAACC,OAAO,CAAC;gBAAEvB,MAAMI;YAAW;YACrE,IAAI,CAACiB,kBAAkB;gBACrB,MAAMG,gBAAgB,MAAMF,kBAAU,CAACG,MAAM,CAAC;oBAC5CzB,MAAMI;gBACR;gBACA,IAAI,CAACH,YAAY,CAACyB,IAAI,CAACF;YACzB,OAAO;gBACL,IAAI,CAACvB,YAAY,CAACyB,IAAI,CAACL;YACzB;QACF;IACF;IAEAV,oBAAoBD,kBAA0B,EAAE;QAC9C,MAAMiB,qBAAqB,IAAI,CAACzB,WAAW,CAACO,IAAI,CAAC,CAACK,IAAMA,EAAET,EAAE,KAAKK,sBAAsBI,EAAEd,IAAI,KAAKU;QAClG,IAAI,CAACiB,oBAAoB;YACvB,IAAI,CAAC9B,MAAM,CAAC+B,IAAI,CAAC,CAAC,qBAAqB,EAAElB,mBAAmB,yBAAyB,CAAC;YACtF;QACF;QACA,OAAOiB,mBAAmB3B,IAAI;IAChC;AACF"}
|