@webda/core 4.0.0-beta.2 → 4.0.0-beta.3
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 +252 -0
- package/lib/application/application.d.ts +437 -0
- package/lib/application/application.d.ts.map +1 -0
- package/lib/application/application.js +792 -0
- package/lib/application/application.js.map +1 -0
- package/lib/application/hooks.d.ts +34 -0
- package/lib/application/hooks.d.ts.map +1 -0
- package/lib/application/hooks.js +57 -0
- package/lib/application/hooks.js.map +1 -0
- package/lib/application/iapplication.d.ts +43 -0
- package/lib/application/iapplication.d.ts.map +1 -0
- package/lib/application/iapplication.js +2 -0
- package/lib/application/iapplication.js.map +1 -0
- package/lib/application/iconfiguration.d.ts +176 -0
- package/lib/application/iconfiguration.d.ts.map +1 -0
- package/lib/application/iconfiguration.js +8 -0
- package/lib/application/iconfiguration.js.map +1 -0
- package/lib/application/runner.d.ts +8 -0
- package/lib/application/runner.d.ts.map +1 -0
- package/lib/application/runner.js +26 -0
- package/lib/application/runner.js.map +1 -0
- package/lib/{unpackedapplication.d.ts → application/unpackedapplication.d.ts} +43 -23
- package/lib/application/unpackedapplication.d.ts.map +1 -0
- package/lib/application/unpackedapplication.js +492 -0
- package/lib/application/unpackedapplication.js.map +1 -0
- package/lib/bin/cli-phase.d.ts +28 -0
- package/lib/bin/cli-phase.d.ts.map +1 -0
- package/lib/bin/cli-phase.js +44 -0
- package/lib/bin/cli-phase.js.map +1 -0
- package/lib/bin/cli.d.ts +161 -0
- package/lib/bin/cli.d.ts.map +1 -0
- package/lib/bin/cli.js +828 -0
- package/lib/bin/cli.js.map +1 -0
- package/lib/bin/launcher.d.ts +3 -0
- package/lib/bin/launcher.d.ts.map +1 -0
- package/lib/bin/launcher.js +50 -0
- package/lib/bin/launcher.js.map +1 -0
- package/lib/cache/cache.d.ts +33 -0
- package/lib/cache/cache.d.ts.map +1 -0
- package/lib/cache/cache.js +8 -0
- package/lib/cache/cache.js.map +1 -0
- package/lib/{services/configuration.d.ts → configurations/configuration.service.d.ts} +58 -58
- package/lib/configurations/configuration.service.d.ts.map +1 -0
- package/lib/configurations/configuration.service.js +248 -0
- package/lib/configurations/configuration.service.js.map +1 -0
- package/lib/configurations/fileconfiguration.service.d.ts +30 -0
- package/lib/configurations/fileconfiguration.service.d.ts.map +1 -0
- package/lib/configurations/fileconfiguration.service.js +65 -0
- package/lib/configurations/fileconfiguration.service.js.map +1 -0
- package/lib/configurations/kubernetesconfiguration.service.d.ts +43 -0
- package/lib/configurations/kubernetesconfiguration.service.d.ts.map +1 -0
- package/lib/configurations/kubernetesconfiguration.service.js +83 -0
- package/lib/configurations/kubernetesconfiguration.service.js.map +1 -0
- package/lib/contexts/execution.d.ts +33 -0
- package/lib/contexts/execution.d.ts.map +1 -0
- package/lib/contexts/execution.js +73 -0
- package/lib/contexts/execution.js.map +1 -0
- package/lib/contexts/globalcontext.d.ts +29 -0
- package/lib/contexts/globalcontext.d.ts.map +1 -0
- package/lib/contexts/globalcontext.js +38 -0
- package/lib/contexts/globalcontext.js.map +1 -0
- package/lib/{utils → contexts}/httpcontext.d.ts +44 -19
- package/lib/contexts/httpcontext.d.ts.map +1 -0
- package/lib/{utils → contexts}/httpcontext.js +95 -27
- package/lib/contexts/httpcontext.js.map +1 -0
- package/lib/contexts/icontext.d.ts +236 -0
- package/lib/contexts/icontext.d.ts.map +1 -0
- package/lib/contexts/icontext.js +230 -0
- package/lib/contexts/icontext.js.map +1 -0
- package/lib/contexts/operationcontext.d.ts +179 -0
- package/lib/contexts/operationcontext.d.ts.map +1 -0
- package/lib/contexts/operationcontext.js +358 -0
- package/lib/contexts/operationcontext.js.map +1 -0
- package/lib/contexts/simplecontext.d.ts +31 -0
- package/lib/contexts/simplecontext.d.ts.map +1 -0
- package/lib/contexts/simplecontext.js +45 -0
- package/lib/contexts/simplecontext.js.map +1 -0
- package/lib/contexts/webcontext.d.ts +218 -0
- package/lib/contexts/webcontext.d.ts.map +1 -0
- package/lib/contexts/webcontext.js +389 -0
- package/lib/contexts/webcontext.js.map +1 -0
- package/lib/core/authorizer.d.ts +23 -0
- package/lib/core/authorizer.d.ts.map +1 -0
- package/lib/core/authorizer.js +17 -0
- package/lib/core/authorizer.js.map +1 -0
- package/lib/core/core.d.ts +225 -0
- package/lib/core/core.d.ts.map +1 -0
- package/lib/core/core.js +576 -0
- package/lib/core/core.js.map +1 -0
- package/lib/core/hooks.d.ts +72 -0
- package/lib/core/hooks.d.ts.map +1 -0
- package/lib/core/hooks.js +73 -0
- package/lib/core/hooks.js.map +1 -0
- package/lib/core/icore.d.ts +249 -0
- package/lib/core/icore.d.ts.map +1 -0
- package/lib/core/icore.js +15 -0
- package/lib/core/icore.js.map +1 -0
- package/lib/core/instancestorage.d.ts +61 -0
- package/lib/core/instancestorage.d.ts.map +1 -0
- package/lib/core/instancestorage.js +75 -0
- package/lib/core/instancestorage.js.map +1 -0
- package/lib/core/operations.d.ts +181 -0
- package/lib/core/operations.d.ts.map +1 -0
- package/lib/core/operations.js +559 -0
- package/lib/core/operations.js.map +1 -0
- package/lib/errors/errors.d.ts +126 -0
- package/lib/errors/errors.d.ts.map +1 -0
- package/lib/errors/errors.js +165 -0
- package/lib/errors/errors.js.map +1 -0
- package/lib/events/asynceventemitter.d.ts +159 -0
- package/lib/events/asynceventemitter.d.ts.map +1 -0
- package/lib/events/asynceventemitter.js +152 -0
- package/lib/events/asynceventemitter.js.map +1 -0
- package/lib/events/events.d.ts +112 -0
- package/lib/events/events.d.ts.map +1 -0
- package/lib/events/events.js +45 -0
- package/lib/events/events.js.map +1 -0
- package/lib/index.d.ts +82 -53
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +81 -62
- package/lib/index.js.map +1 -1
- package/lib/loggers/console.service.d.ts +24 -0
- package/lib/loggers/console.service.d.ts.map +1 -0
- package/lib/loggers/console.service.js +30 -0
- package/lib/loggers/console.service.js.map +1 -0
- package/lib/loggers/file.service.d.ts +25 -0
- package/lib/loggers/file.service.d.ts.map +1 -0
- package/lib/loggers/file.service.js +33 -0
- package/lib/loggers/file.service.js.map +1 -0
- package/lib/loggers/hooks.d.ts +20 -0
- package/lib/loggers/hooks.d.ts.map +1 -0
- package/lib/loggers/hooks.js +40 -0
- package/lib/loggers/hooks.js.map +1 -0
- package/lib/loggers/ilogger.d.ts +76 -0
- package/lib/loggers/ilogger.d.ts.map +1 -0
- package/lib/loggers/ilogger.js +108 -0
- package/lib/loggers/ilogger.js.map +1 -0
- package/lib/loggers/logger.d.ts +13 -0
- package/lib/loggers/logger.d.ts.map +1 -0
- package/lib/loggers/logger.js +18 -0
- package/lib/loggers/logger.js.map +1 -0
- package/lib/loggers/memory.service.d.ts +18 -0
- package/lib/loggers/memory.service.d.ts.map +1 -0
- package/lib/loggers/memory.service.js +21 -0
- package/lib/loggers/memory.service.js.map +1 -0
- package/lib/loggers/params.d.ts +47 -0
- package/lib/loggers/params.d.ts.map +1 -0
- package/lib/loggers/params.js +56 -0
- package/lib/loggers/params.js.map +1 -0
- package/lib/metrics/metrics.d.ts +25 -0
- package/lib/metrics/metrics.d.ts.map +1 -0
- package/lib/metrics/metrics.js +51 -0
- package/lib/metrics/metrics.js.map +1 -0
- package/lib/models/aclmodel.d.ts +20 -76
- package/lib/models/aclmodel.d.ts.map +1 -1
- package/lib/models/aclmodel.js +27 -203
- package/lib/models/aclmodel.js.map +1 -1
- package/lib/models/coremodel.model.d.ts +5 -0
- package/lib/models/coremodel.model.d.ts.map +1 -0
- package/lib/models/coremodel.model.js +5 -0
- package/lib/models/coremodel.model.js.map +1 -0
- package/lib/models/decorator.d.ts +63 -0
- package/lib/models/decorator.d.ts.map +1 -0
- package/lib/models/decorator.js +63 -0
- package/lib/models/decorator.js.map +1 -0
- package/lib/models/deployment.d.ts +1 -1
- package/lib/models/deployment.d.ts.map +1 -1
- package/lib/models/ident.model.d.ts +89 -0
- package/lib/models/ident.model.d.ts.map +1 -0
- package/lib/models/ident.model.js +115 -0
- package/lib/models/ident.model.js.map +1 -0
- package/lib/models/ownermodel.model.d.ts +68 -0
- package/lib/models/ownermodel.model.d.ts.map +1 -0
- package/lib/models/ownermodel.model.js +112 -0
- package/lib/models/ownermodel.model.js.map +1 -0
- package/lib/models/registry.model.d.ts +76 -0
- package/lib/models/registry.model.d.ts.map +1 -0
- package/lib/models/registry.model.js +104 -0
- package/lib/models/registry.model.js.map +1 -0
- package/lib/models/rolemodel.model.d.ts +28 -0
- package/lib/models/rolemodel.model.d.ts.map +1 -0
- package/lib/models/{rolemodel.js → rolemodel.model.js} +23 -5
- package/lib/models/rolemodel.model.js.map +1 -0
- package/lib/models/simpleuser.model.d.ts +78 -0
- package/lib/models/simpleuser.model.d.ts.map +1 -0
- package/lib/models/simpleuser.model.js +123 -0
- package/lib/models/simpleuser.model.js.map +1 -0
- package/lib/models/types.d.ts +113 -0
- package/lib/models/types.d.ts.map +1 -0
- package/lib/models/types.js +2 -0
- package/lib/models/types.js.map +1 -0
- package/lib/models/user.model.d.ts +103 -0
- package/lib/models/user.model.d.ts.map +1 -0
- package/lib/models/user.model.js +125 -0
- package/lib/models/user.model.js.map +1 -0
- package/lib/queues/{memoryqueue.d.ts → memoryqueue.service.d.ts} +26 -13
- package/lib/queues/memoryqueue.service.d.ts.map +1 -0
- package/lib/queues/{memoryqueue.js → memoryqueue.service.js} +55 -31
- package/lib/queues/memoryqueue.service.js.map +1 -0
- package/lib/queues/pubsubservice.d.ts +8 -6
- package/lib/queues/pubsubservice.d.ts.map +1 -1
- package/lib/queues/pubsubservice.js +5 -4
- package/lib/queues/pubsubservice.js.map +1 -1
- package/lib/queues/queueservice.d.ts +9 -11
- package/lib/queues/queueservice.d.ts.map +1 -1
- package/lib/queues/queueservice.js +41 -13
- package/lib/queues/queueservice.js.map +1 -1
- package/lib/rest/hooks.d.ts +8 -0
- package/lib/rest/hooks.d.ts.map +1 -0
- package/lib/rest/hooks.js +10 -0
- package/lib/rest/hooks.js.map +1 -0
- package/lib/rest/irest.d.ts +212 -0
- package/lib/rest/irest.d.ts.map +1 -0
- package/lib/rest/irest.js +39 -0
- package/lib/rest/irest.js.map +1 -0
- package/lib/rest/originfilter.d.ts +38 -0
- package/lib/rest/originfilter.d.ts.map +1 -0
- package/lib/rest/originfilter.js +61 -0
- package/lib/rest/originfilter.js.map +1 -0
- package/lib/rest/restoperationstransport.service.d.ts +193 -0
- package/lib/rest/restoperationstransport.service.d.ts.map +1 -0
- package/lib/rest/restoperationstransport.service.js +780 -0
- package/lib/rest/restoperationstransport.service.js.map +1 -0
- package/lib/rest/router.service.d.ts +244 -0
- package/lib/rest/router.service.d.ts.map +1 -0
- package/lib/rest/router.service.js +843 -0
- package/lib/rest/router.service.js.map +1 -0
- package/lib/schemas/hooks.d.ts +48 -0
- package/lib/schemas/hooks.d.ts.map +1 -0
- package/lib/schemas/hooks.js +152 -0
- package/lib/schemas/hooks.js.map +1 -0
- package/lib/services/audit.model.d.ts +208 -0
- package/lib/services/audit.model.d.ts.map +1 -0
- package/lib/services/audit.model.js +431 -0
- package/lib/services/audit.model.js.map +1 -0
- package/lib/services/{authentication.d.ts → authentication.service.d.ts} +140 -59
- package/lib/services/authentication.service.d.ts.map +1 -0
- package/lib/services/authentication.service.js +932 -0
- package/lib/services/authentication.service.js.map +1 -0
- package/lib/services/binary.service.d.ts +808 -0
- package/lib/services/binary.service.d.ts.map +1 -0
- package/lib/services/binary.service.js +1365 -0
- package/lib/services/binary.service.js.map +1 -0
- package/lib/services/cloudbinary.d.ts +17 -12
- package/lib/services/cloudbinary.d.ts.map +1 -1
- package/lib/services/cloudbinary.js +23 -17
- package/lib/services/cloudbinary.js.map +1 -1
- package/lib/services/command.d.ts +118 -0
- package/lib/services/command.d.ts.map +1 -0
- package/lib/services/command.js +97 -0
- package/lib/services/command.js.map +1 -0
- package/lib/services/cron.service.d.ts +142 -0
- package/lib/services/cron.service.d.ts.map +1 -0
- package/lib/services/cron.service.js +291 -0
- package/lib/services/cron.service.js.map +1 -0
- package/lib/services/{cryptoservice.d.ts → cryptoservice.service.d.ts} +75 -141
- package/lib/services/cryptoservice.service.d.ts.map +1 -0
- package/lib/services/cryptoservice.service.js +527 -0
- package/lib/services/cryptoservice.service.js.map +1 -0
- package/lib/services/debugmailer.service.d.ts +49 -0
- package/lib/services/debugmailer.service.d.ts.map +1 -0
- package/lib/services/{debugmailer.js → debugmailer.service.js} +25 -10
- package/lib/services/debugmailer.service.js.map +1 -0
- package/lib/services/domainservice.service.d.ts +203 -0
- package/lib/services/domainservice.service.d.ts.map +1 -0
- package/lib/services/domainservice.service.js +600 -0
- package/lib/services/domainservice.service.js.map +1 -0
- package/lib/services/httpserver.service.d.ts +248 -0
- package/lib/services/httpserver.service.d.ts.map +1 -0
- package/lib/services/httpserver.service.js +673 -0
- package/lib/services/httpserver.service.js.map +1 -0
- package/lib/services/iauthentication.d.ts +9 -0
- package/lib/services/iauthentication.d.ts.map +1 -0
- package/lib/services/iauthentication.js +2 -0
- package/lib/services/iauthentication.js.map +1 -0
- package/lib/services/icryptoservice.d.ts +127 -0
- package/lib/services/icryptoservice.d.ts.map +1 -0
- package/lib/services/icryptoservice.js +68 -0
- package/lib/services/icryptoservice.js.map +1 -0
- package/lib/services/imailer.d.ts +17 -0
- package/lib/services/imailer.d.ts.map +1 -0
- package/lib/services/imailer.js +2 -0
- package/lib/services/imailer.js.map +1 -0
- package/lib/services/iservice.d.ts +104 -0
- package/lib/services/iservice.d.ts.map +1 -0
- package/lib/services/iservice.js +63 -0
- package/lib/services/iservice.js.map +1 -0
- package/lib/services/mailer.service.d.ts +220 -0
- package/lib/services/mailer.service.d.ts.map +1 -0
- package/lib/services/mailer.service.js +251 -0
- package/lib/services/mailer.service.js.map +1 -0
- package/lib/services/{notificationservice.d.ts → notificationservice.service.d.ts} +10 -11
- package/lib/services/notificationservice.service.d.ts.map +1 -0
- package/lib/services/{notificationservice.js → notificationservice.service.js} +24 -12
- package/lib/services/notificationservice.service.js.map +1 -0
- package/lib/services/oauth.d.ts +52 -28
- package/lib/services/oauth.d.ts.map +1 -1
- package/lib/services/oauth.js +365 -254
- package/lib/services/oauth.js.map +1 -1
- package/lib/services/operationstransport.d.ts +65 -0
- package/lib/services/operationstransport.d.ts.map +1 -0
- package/lib/services/operationstransport.js +103 -0
- package/lib/services/operationstransport.js.map +1 -0
- package/lib/services/{prometheus.d.ts → prometheus.service.d.ts} +13 -12
- package/lib/services/prometheus.service.d.ts.map +1 -0
- package/lib/services/prometheus.service.js +203 -0
- package/lib/services/prometheus.service.js.map +1 -0
- package/lib/services/{resource.d.ts → resource.service.d.ts} +34 -15
- package/lib/services/resource.service.d.ts.map +1 -0
- package/lib/services/resource.service.js +301 -0
- package/lib/services/resource.service.js.map +1 -0
- package/lib/services/service.d.ts +87 -188
- package/lib/services/service.d.ts.map +1 -1
- package/lib/services/service.js +407 -422
- package/lib/services/service.js.map +1 -1
- package/lib/services/servicecommands.d.ts +99 -0
- package/lib/services/servicecommands.d.ts.map +1 -0
- package/lib/services/servicecommands.js +165 -0
- package/lib/services/servicecommands.js.map +1 -0
- package/lib/services/serviceparameters.d.ts +33 -0
- package/lib/services/serviceparameters.d.ts.map +1 -0
- package/lib/services/serviceparameters.js +79 -0
- package/lib/services/serviceparameters.js.map +1 -0
- package/lib/{utils → session}/cookie.d.ts +32 -19
- package/lib/session/cookie.d.ts.map +1 -0
- package/lib/{utils → session}/cookie.js +76 -23
- package/lib/session/cookie.js.map +1 -0
- package/lib/session/manager.model.d.ts +71 -0
- package/lib/session/manager.model.d.ts.map +1 -0
- package/lib/session/manager.model.js +155 -0
- package/lib/session/manager.model.js.map +1 -0
- package/lib/session/session.d.ts +57 -0
- package/lib/session/session.d.ts.map +1 -0
- package/lib/session/session.js +126 -0
- package/lib/session/session.js.map +1 -0
- package/lib/stores/istore.d.ts +99 -0
- package/lib/stores/istore.d.ts.map +1 -0
- package/lib/stores/istore.js +26 -0
- package/lib/stores/istore.js.map +1 -0
- package/lib/stores/memory.service.d.ts +114 -0
- package/lib/stores/memory.service.d.ts.map +1 -0
- package/lib/stores/memory.service.js +343 -0
- package/lib/stores/memory.service.js.map +1 -0
- package/lib/stores/store.d.ts +126 -626
- package/lib/stores/store.d.ts.map +1 -1
- package/lib/stores/store.js +257 -1117
- package/lib/stores/store.js.map +1 -1
- package/lib/templates/templates.d.ts +39 -0
- package/lib/templates/templates.d.ts.map +1 -0
- package/lib/templates/templates.js +92 -0
- package/lib/templates/templates.js.map +1 -0
- package/lib/test/application.d.ts +174 -0
- package/lib/test/application.d.ts.map +1 -0
- package/lib/test/application.js +288 -0
- package/lib/test/application.js.map +1 -0
- package/lib/test/asyncstorage.d.ts +16 -0
- package/lib/test/asyncstorage.d.ts.map +1 -0
- package/lib/test/asyncstorage.js +32 -0
- package/lib/test/asyncstorage.js.map +1 -0
- package/lib/test/core.d.ts +63 -0
- package/lib/test/core.d.ts.map +1 -0
- package/lib/test/core.js +190 -0
- package/lib/test/core.js.map +1 -0
- package/lib/test/index.d.ts +7 -0
- package/lib/test/index.d.ts.map +1 -0
- package/lib/test/index.js +8 -0
- package/lib/test/index.js.map +1 -0
- package/lib/test/internal.d.ts +34 -0
- package/lib/test/internal.d.ts.map +1 -0
- package/lib/test/internal.js +156 -0
- package/lib/test/internal.js.map +1 -0
- package/lib/test/objects.d.ts +318 -0
- package/lib/test/objects.d.ts.map +1 -0
- package/lib/test/objects.js +443 -0
- package/lib/test/objects.js.map +1 -0
- package/lib/utils/abstractdeployer.d.ts +4 -2
- package/lib/utils/abstractdeployer.d.ts.map +1 -1
- package/lib/utils/abstractdeployer.js +3 -0
- package/lib/utils/abstractdeployer.js.map +1 -1
- package/package.json +85 -60
- package/test/cachedapp/webda.config.json +1 -5
- package/test/config-cached.json +1 -5
- package/test/config.json +0 -9
- package/test/my-cnf.json +9 -0
- package/webda.module.json +3463 -2482
- package/lib/application.d.ts +0 -888
- package/lib/application.d.ts.map +0 -1
- package/lib/application.js +0 -768
- package/lib/application.js.map +0 -1
- package/lib/application.spec.d.ts +0 -2
- package/lib/application.spec.d.ts.map +0 -1
- package/lib/application.spec.js +0 -248
- package/lib/application.spec.js.map +0 -1
- package/lib/core.d.ts +0 -743
- package/lib/core.d.ts.map +0 -1
- package/lib/core.js +0 -1334
- package/lib/core.js.map +0 -1
- package/lib/core.spec.d.ts +0 -2
- package/lib/core.spec.d.ts.map +0 -1
- package/lib/core.spec.js +0 -790
- package/lib/core.spec.js.map +0 -1
- package/lib/errors.d.ts +0 -64
- package/lib/errors.d.ts.map +0 -1
- package/lib/errors.js +0 -97
- package/lib/errors.js.map +0 -1
- package/lib/errors.spec.d.ts +0 -2
- package/lib/errors.spec.d.ts.map +0 -1
- package/lib/errors.spec.js +0 -33
- package/lib/errors.spec.js.map +0 -1
- package/lib/models/aclmodel.spec.d.ts +0 -2
- package/lib/models/aclmodel.spec.d.ts.map +0 -1
- package/lib/models/aclmodel.spec.js +0 -187
- package/lib/models/aclmodel.spec.js.map +0 -1
- package/lib/models/coremodel.d.ts +0 -896
- package/lib/models/coremodel.d.ts.map +0 -1
- package/lib/models/coremodel.js +0 -1214
- package/lib/models/coremodel.js.map +0 -1
- package/lib/models/coremodel.spec.d.ts +0 -2
- package/lib/models/coremodel.spec.d.ts.map +0 -1
- package/lib/models/coremodel.spec.js +0 -464
- package/lib/models/coremodel.spec.js.map +0 -1
- package/lib/models/ident.d.ts +0 -68
- package/lib/models/ident.d.ts.map +0 -1
- package/lib/models/ident.js +0 -26
- package/lib/models/ident.js.map +0 -1
- package/lib/models/ident.spec.d.ts +0 -2
- package/lib/models/ident.spec.d.ts.map +0 -1
- package/lib/models/ident.spec.js +0 -24
- package/lib/models/ident.spec.js.map +0 -1
- package/lib/models/ownermodel.d.ts +0 -51
- package/lib/models/ownermodel.d.ts.map +0 -1
- package/lib/models/ownermodel.js +0 -65
- package/lib/models/ownermodel.js.map +0 -1
- package/lib/models/ownermodel.spec.d.ts +0 -2
- package/lib/models/ownermodel.spec.d.ts.map +0 -1
- package/lib/models/ownermodel.spec.js +0 -215
- package/lib/models/ownermodel.spec.js.map +0 -1
- package/lib/models/relations.d.ts +0 -182
- package/lib/models/relations.d.ts.map +0 -1
- package/lib/models/relations.js +0 -157
- package/lib/models/relations.js.map +0 -1
- package/lib/models/relations.spec.d.ts +0 -14
- package/lib/models/relations.spec.d.ts.map +0 -1
- package/lib/models/relations.spec.js +0 -217
- package/lib/models/relations.spec.js.map +0 -1
- package/lib/models/rolemodel.d.ts +0 -11
- package/lib/models/rolemodel.d.ts.map +0 -1
- package/lib/models/rolemodel.js.map +0 -1
- package/lib/models/rolemodel.spec.d.ts +0 -2
- package/lib/models/rolemodel.spec.d.ts.map +0 -1
- package/lib/models/rolemodel.spec.js +0 -90
- package/lib/models/rolemodel.spec.js.map +0 -1
- package/lib/models/simpleuser.d.ts +0 -47
- package/lib/models/simpleuser.d.ts.map +0 -1
- package/lib/models/simpleuser.js +0 -84
- package/lib/models/simpleuser.js.map +0 -1
- package/lib/models/test.d.ts +0 -11
- package/lib/models/test.d.ts.map +0 -1
- package/lib/models/test.js +0 -7
- package/lib/models/test.js.map +0 -1
- package/lib/models/user.d.ts +0 -67
- package/lib/models/user.d.ts.map +0 -1
- package/lib/models/user.js +0 -86
- package/lib/models/user.js.map +0 -1
- package/lib/models/user.spec.d.ts +0 -2
- package/lib/models/user.spec.d.ts.map +0 -1
- package/lib/models/user.spec.js +0 -89
- package/lib/models/user.spec.js.map +0 -1
- package/lib/queues/filequeue.d.ts +0 -59
- package/lib/queues/filequeue.d.ts.map +0 -1
- package/lib/queues/filequeue.js +0 -131
- package/lib/queues/filequeue.js.map +0 -1
- package/lib/queues/filequeue.spec.d.ts +0 -2
- package/lib/queues/filequeue.spec.d.ts.map +0 -1
- package/lib/queues/filequeue.spec.js +0 -84
- package/lib/queues/filequeue.spec.js.map +0 -1
- package/lib/queues/memoryqueue.d.ts.map +0 -1
- package/lib/queues/memoryqueue.js.map +0 -1
- package/lib/queues/memoryqueue.spec.d.ts +0 -2
- package/lib/queues/memoryqueue.spec.d.ts.map +0 -1
- package/lib/queues/memoryqueue.spec.js +0 -203
- package/lib/queues/memoryqueue.spec.js.map +0 -1
- package/lib/queues/queue.spec.d.ts +0 -6
- package/lib/queues/queue.spec.d.ts.map +0 -1
- package/lib/queues/queue.spec.js +0 -55
- package/lib/queues/queue.spec.js.map +0 -1
- package/lib/rest/restdomainservice.d.ts +0 -63
- package/lib/rest/restdomainservice.d.ts.map +0 -1
- package/lib/rest/restdomainservice.js +0 -687
- package/lib/rest/restdomainservice.js.map +0 -1
- package/lib/rest/restdomainservice.spec.d.ts +0 -2
- package/lib/rest/restdomainservice.spec.d.ts.map +0 -1
- package/lib/rest/restdomainservice.spec.js +0 -124
- package/lib/rest/restdomainservice.spec.js.map +0 -1
- package/lib/rest/router.d.ts +0 -174
- package/lib/rest/router.d.ts.map +0 -1
- package/lib/rest/router.js +0 -429
- package/lib/rest/router.js.map +0 -1
- package/lib/rest/router.spec.d.ts +0 -2
- package/lib/rest/router.spec.d.ts.map +0 -1
- package/lib/rest/router.spec.js +0 -255
- package/lib/rest/router.spec.js.map +0 -1
- package/lib/services/asyncevents.d.ts +0 -152
- package/lib/services/asyncevents.d.ts.map +0 -1
- package/lib/services/asyncevents.js +0 -217
- package/lib/services/asyncevents.js.map +0 -1
- package/lib/services/asyncevents.spec.d.ts +0 -2
- package/lib/services/asyncevents.spec.d.ts.map +0 -1
- package/lib/services/asyncevents.spec.js +0 -118
- package/lib/services/asyncevents.spec.js.map +0 -1
- package/lib/services/authentication.d.ts.map +0 -1
- package/lib/services/authentication.js +0 -773
- package/lib/services/authentication.js.map +0 -1
- package/lib/services/authentication.spec.d.ts +0 -2
- package/lib/services/authentication.spec.d.ts.map +0 -1
- package/lib/services/authentication.spec.js +0 -458
- package/lib/services/authentication.spec.js.map +0 -1
- package/lib/services/binary.d.ts +0 -477
- package/lib/services/binary.d.ts.map +0 -1
- package/lib/services/binary.js +0 -617
- package/lib/services/binary.js.map +0 -1
- package/lib/services/binary.spec.d.ts +0 -41
- package/lib/services/binary.spec.d.ts.map +0 -1
- package/lib/services/binary.spec.js +0 -151
- package/lib/services/binary.spec.js.map +0 -1
- package/lib/services/cloudbinary.spec.d.ts +0 -6
- package/lib/services/cloudbinary.spec.d.ts.map +0 -1
- package/lib/services/cloudbinary.spec.js +0 -66
- package/lib/services/cloudbinary.spec.js.map +0 -1
- package/lib/services/configuration.d.ts.map +0 -1
- package/lib/services/configuration.js +0 -193
- package/lib/services/configuration.js.map +0 -1
- package/lib/services/configuration.spec.d.ts +0 -2
- package/lib/services/configuration.spec.d.ts.map +0 -1
- package/lib/services/configuration.spec.js +0 -130
- package/lib/services/configuration.spec.js.map +0 -1
- package/lib/services/cron.d.ts +0 -74
- package/lib/services/cron.d.ts.map +0 -1
- package/lib/services/cron.js +0 -141
- package/lib/services/cron.js.map +0 -1
- package/lib/services/cron.spec.d.ts +0 -2
- package/lib/services/cron.spec.d.ts.map +0 -1
- package/lib/services/cron.spec.js +0 -76
- package/lib/services/cron.spec.js.map +0 -1
- package/lib/services/cryptoservice.d.ts.map +0 -1
- package/lib/services/cryptoservice.js +0 -433
- package/lib/services/cryptoservice.js.map +0 -1
- package/lib/services/cryptoservice.spec.d.ts +0 -2
- package/lib/services/cryptoservice.spec.d.ts.map +0 -1
- package/lib/services/cryptoservice.spec.js +0 -177
- package/lib/services/cryptoservice.spec.js.map +0 -1
- package/lib/services/debugmailer.d.ts +0 -36
- package/lib/services/debugmailer.d.ts.map +0 -1
- package/lib/services/debugmailer.js.map +0 -1
- package/lib/services/debugmailer.spec.d.ts +0 -2
- package/lib/services/debugmailer.spec.d.ts.map +0 -1
- package/lib/services/debugmailer.spec.js +0 -32
- package/lib/services/debugmailer.spec.js.map +0 -1
- package/lib/services/domainservice.d.ts +0 -272
- package/lib/services/domainservice.d.ts.map +0 -1
- package/lib/services/domainservice.js +0 -651
- package/lib/services/domainservice.js.map +0 -1
- package/lib/services/domainservice.spec.d.ts +0 -2
- package/lib/services/domainservice.spec.d.ts.map +0 -1
- package/lib/services/domainservice.spec.js +0 -592
- package/lib/services/domainservice.spec.js.map +0 -1
- package/lib/services/filebinary.d.ts +0 -136
- package/lib/services/filebinary.d.ts.map +0 -1
- package/lib/services/filebinary.js +0 -373
- package/lib/services/filebinary.js.map +0 -1
- package/lib/services/filebinary.spec.d.ts +0 -25
- package/lib/services/filebinary.spec.d.ts.map +0 -1
- package/lib/services/filebinary.spec.js +0 -428
- package/lib/services/filebinary.spec.js.map +0 -1
- package/lib/services/fileconfiguration.d.ts +0 -23
- package/lib/services/fileconfiguration.d.ts.map +0 -1
- package/lib/services/fileconfiguration.js +0 -48
- package/lib/services/fileconfiguration.js.map +0 -1
- package/lib/services/fileconfiguration.spec.d.ts +0 -2
- package/lib/services/fileconfiguration.spec.d.ts.map +0 -1
- package/lib/services/fileconfiguration.spec.js +0 -215
- package/lib/services/fileconfiguration.spec.js.map +0 -1
- package/lib/services/invitationservice.d.ts +0 -223
- package/lib/services/invitationservice.d.ts.map +0 -1
- package/lib/services/invitationservice.js +0 -529
- package/lib/services/invitationservice.js.map +0 -1
- package/lib/services/invitationservice.spec.d.ts +0 -2
- package/lib/services/invitationservice.spec.d.ts.map +0 -1
- package/lib/services/invitationservice.spec.js +0 -567
- package/lib/services/invitationservice.spec.js.map +0 -1
- package/lib/services/kubernetesconfiguration.d.ts +0 -27
- package/lib/services/kubernetesconfiguration.d.ts.map +0 -1
- package/lib/services/kubernetesconfiguration.js +0 -52
- package/lib/services/kubernetesconfiguration.js.map +0 -1
- package/lib/services/kubernetesconfiguration.spec.d.ts +0 -2
- package/lib/services/kubernetesconfiguration.spec.d.ts.map +0 -1
- package/lib/services/kubernetesconfiguration.spec.js +0 -206
- package/lib/services/kubernetesconfiguration.spec.js.map +0 -1
- package/lib/services/mailer.d.ts +0 -166
- package/lib/services/mailer.d.ts.map +0 -1
- package/lib/services/mailer.js +0 -176
- package/lib/services/mailer.js.map +0 -1
- package/lib/services/mailer.spec.d.ts +0 -2
- package/lib/services/mailer.spec.d.ts.map +0 -1
- package/lib/services/mailer.spec.js +0 -158
- package/lib/services/mailer.spec.js.map +0 -1
- package/lib/services/notificationservice.d.ts.map +0 -1
- package/lib/services/notificationservice.js.map +0 -1
- package/lib/services/notificationservice.spec.d.ts +0 -2
- package/lib/services/notificationservice.spec.d.ts.map +0 -1
- package/lib/services/notificationservice.spec.js +0 -83
- package/lib/services/notificationservice.spec.js.map +0 -1
- package/lib/services/oauth.spec.d.ts +0 -2
- package/lib/services/oauth.spec.d.ts.map +0 -1
- package/lib/services/oauth.spec.js +0 -208
- package/lib/services/oauth.spec.js.map +0 -1
- package/lib/services/prometheus.d.ts.map +0 -1
- package/lib/services/prometheus.js +0 -160
- package/lib/services/prometheus.js.map +0 -1
- package/lib/services/prometheus.spec.d.ts +0 -2
- package/lib/services/prometheus.spec.d.ts.map +0 -1
- package/lib/services/prometheus.spec.js +0 -76
- package/lib/services/prometheus.spec.js.map +0 -1
- package/lib/services/resource.d.ts.map +0 -1
- package/lib/services/resource.js +0 -170
- package/lib/services/resource.js.map +0 -1
- package/lib/services/resource.spec.d.ts +0 -2
- package/lib/services/resource.spec.d.ts.map +0 -1
- package/lib/services/resource.spec.js +0 -140
- package/lib/services/resource.spec.js.map +0 -1
- package/lib/services/service.spec.d.ts +0 -2
- package/lib/services/service.spec.d.ts.map +0 -1
- package/lib/services/service.spec.js +0 -286
- package/lib/services/service.spec.js.map +0 -1
- package/lib/stores/aggregator.d.ts +0 -48
- package/lib/stores/aggregator.d.ts.map +0 -1
- package/lib/stores/aggregator.js +0 -80
- package/lib/stores/aggregator.js.map +0 -1
- package/lib/stores/file.d.ts +0 -108
- package/lib/stores/file.d.ts.map +0 -1
- package/lib/stores/file.js +0 -188
- package/lib/stores/file.js.map +0 -1
- package/lib/stores/file.spec.d.ts +0 -13
- package/lib/stores/file.spec.d.ts.map +0 -1
- package/lib/stores/file.spec.js +0 -138
- package/lib/stores/file.spec.js.map +0 -1
- package/lib/stores/mapper.d.ts +0 -150
- package/lib/stores/mapper.d.ts.map +0 -1
- package/lib/stores/mapper.js +0 -293
- package/lib/stores/mapper.js.map +0 -1
- package/lib/stores/mapper.spec.d.ts +0 -2
- package/lib/stores/mapper.spec.d.ts.map +0 -1
- package/lib/stores/mapper.spec.js +0 -167
- package/lib/stores/mapper.spec.js.map +0 -1
- package/lib/stores/memory.d.ts +0 -152
- package/lib/stores/memory.d.ts.map +0 -1
- package/lib/stores/memory.js +0 -371
- package/lib/stores/memory.js.map +0 -1
- package/lib/stores/memory.spec.d.ts +0 -14
- package/lib/stores/memory.spec.d.ts.map +0 -1
- package/lib/stores/memory.spec.js +0 -263
- package/lib/stores/memory.spec.js.map +0 -1
- package/lib/stores/modelmapper.d.ts +0 -62
- package/lib/stores/modelmapper.d.ts.map +0 -1
- package/lib/stores/modelmapper.js +0 -197
- package/lib/stores/modelmapper.js.map +0 -1
- package/lib/stores/store.spec.d.ts +0 -57
- package/lib/stores/store.spec.d.ts.map +0 -1
- package/lib/stores/store.spec.js +0 -737
- package/lib/stores/store.spec.js.map +0 -1
- package/lib/test.d.ts +0 -265
- package/lib/test.d.ts.map +0 -1
- package/lib/test.js +0 -622
- package/lib/test.js.map +0 -1
- package/lib/unpackedapplication.d.ts.map +0 -1
- package/lib/unpackedapplication.js +0 -350
- package/lib/unpackedapplication.js.map +0 -1
- package/lib/utils/abstractdeployer.spec.d.ts +0 -2
- package/lib/utils/abstractdeployer.spec.d.ts.map +0 -1
- package/lib/utils/abstractdeployer.spec.js +0 -21
- package/lib/utils/abstractdeployer.spec.js.map +0 -1
- package/lib/utils/case.d.ts +0 -8
- package/lib/utils/case.d.ts.map +0 -1
- package/lib/utils/case.js +0 -43
- package/lib/utils/case.js.map +0 -1
- package/lib/utils/case.spec.d.ts +0 -2
- package/lib/utils/case.spec.d.ts.map +0 -1
- package/lib/utils/case.spec.js +0 -50
- package/lib/utils/case.spec.js.map +0 -1
- package/lib/utils/context.d.ts +0 -482
- package/lib/utils/context.d.ts.map +0 -1
- package/lib/utils/context.js +0 -739
- package/lib/utils/context.js.map +0 -1
- package/lib/utils/context.spec.d.ts +0 -10
- package/lib/utils/context.spec.d.ts.map +0 -1
- package/lib/utils/context.spec.js +0 -383
- package/lib/utils/context.spec.js.map +0 -1
- package/lib/utils/cookie.d.ts.map +0 -1
- package/lib/utils/cookie.js.map +0 -1
- package/lib/utils/cookie.spec.d.ts +0 -2
- package/lib/utils/cookie.spec.d.ts.map +0 -1
- package/lib/utils/cookie.spec.js +0 -88
- package/lib/utils/cookie.spec.js.map +0 -1
- package/lib/utils/esm.d.ts +0 -14
- package/lib/utils/esm.d.ts.map +0 -1
- package/lib/utils/esm.js +0 -19
- package/lib/utils/esm.js.map +0 -1
- package/lib/utils/httpcontext.d.ts.map +0 -1
- package/lib/utils/httpcontext.js.map +0 -1
- package/lib/utils/httpcontext.spec.d.ts +0 -5
- package/lib/utils/httpcontext.spec.d.ts.map +0 -1
- package/lib/utils/httpcontext.spec.js +0 -77
- package/lib/utils/httpcontext.spec.js.map +0 -1
- package/lib/utils/logger.d.ts +0 -92
- package/lib/utils/logger.d.ts.map +0 -1
- package/lib/utils/logger.js +0 -121
- package/lib/utils/logger.js.map +0 -1
- package/lib/utils/logger.spec.d.ts +0 -2
- package/lib/utils/logger.spec.d.ts.map +0 -1
- package/lib/utils/logger.spec.js +0 -48
- package/lib/utils/logger.spec.js.map +0 -1
- package/lib/utils/serializers.d.ts +0 -162
- package/lib/utils/serializers.d.ts.map +0 -1
- package/lib/utils/serializers.js +0 -420
- package/lib/utils/serializers.js.map +0 -1
- package/lib/utils/serializers.spec.d.ts +0 -2
- package/lib/utils/serializers.spec.d.ts.map +0 -1
- package/lib/utils/serializers.spec.js +0 -311
- package/lib/utils/serializers.spec.js.map +0 -1
- package/lib/utils/session.d.ts +0 -123
- package/lib/utils/session.d.ts.map +0 -1
- package/lib/utils/session.js +0 -156
- package/lib/utils/session.js.map +0 -1
- package/lib/utils/session.spec.d.ts +0 -2
- package/lib/utils/session.spec.d.ts.map +0 -1
- package/lib/utils/session.spec.js +0 -81
- package/lib/utils/session.spec.js.map +0 -1
- package/lib/utils/throttler.d.ts +0 -99
- package/lib/utils/throttler.d.ts.map +0 -1
- package/lib/utils/throttler.js +0 -160
- package/lib/utils/throttler.js.map +0 -1
- package/lib/utils/throttler.spec.d.ts +0 -2
- package/lib/utils/throttler.spec.d.ts.map +0 -1
- package/lib/utils/throttler.spec.js +0 -53
- package/lib/utils/throttler.spec.js.map +0 -1
- package/lib/utils/waiter.d.ts +0 -94
- package/lib/utils/waiter.d.ts.map +0 -1
- package/lib/utils/waiter.js +0 -148
- package/lib/utils/waiter.js.map +0 -1
- package/lib/utils/waiter.spec.d.ts +0 -2
- package/lib/utils/waiter.spec.d.ts.map +0 -1
- package/lib/utils/waiter.spec.js +0 -98
- package/lib/utils/waiter.spec.js.map +0 -1
- package/test/jsonutils/mdocs.yaml +0 -56
- package/test/jsonutils/test.json +0 -3
- package/test/jsonutils/test.yml +0 -5
|
@@ -1,773 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
import bcrypt from "bcryptjs";
|
|
8
|
-
import { Counter } from "../core.js";
|
|
9
|
-
import * as WebdaError from "../errors.js";
|
|
10
|
-
import { Inject, Service, ServiceParameters } from "../services/service.js";
|
|
11
|
-
import { Route } from "../rest/router.js";
|
|
12
|
-
import { HttpContext } from "../utils/httpcontext.js";
|
|
13
|
-
export class AuthenticationParameters extends ServiceParameters {
|
|
14
|
-
constructor(params) {
|
|
15
|
-
var _a, _b;
|
|
16
|
-
super(params);
|
|
17
|
-
this.identModel ?? (this.identModel = "Webda/Ident");
|
|
18
|
-
this.userModel ?? (this.userModel = "Webda/User");
|
|
19
|
-
this.url ?? (this.url = "/auth");
|
|
20
|
-
this.password ?? (this.password = {
|
|
21
|
-
regexp: ".{8,}"
|
|
22
|
-
});
|
|
23
|
-
if (this.email) {
|
|
24
|
-
(_a = this.email).delay ?? (_a.delay = 3600000 * 4);
|
|
25
|
-
(_b = this.email).failedLoginBeforeDelay ?? (_b.failedLoginBeforeDelay = 3);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* This class is known as the Authentication module
|
|
31
|
-
* It handles OAuth for several providers for now (Facebook, Google, Amazon, GitHub and Twitter)
|
|
32
|
-
* It also handles email authentication with prevalidation or postvalidation of the email
|
|
33
|
-
*
|
|
34
|
-
* It requires two Store to work one `idents` and one `users`
|
|
35
|
-
*
|
|
36
|
-
* The parameters are
|
|
37
|
-
* ```
|
|
38
|
-
* providerName: {
|
|
39
|
-
* clientID: '...',
|
|
40
|
-
* clientSecret: '...',
|
|
41
|
-
* scope: ''
|
|
42
|
-
* },
|
|
43
|
-
* email: {
|
|
44
|
-
* postValidation: true|false // If postValidation=true, account created without email verification
|
|
45
|
-
* }
|
|
46
|
-
* url: 'url' // By default /auth
|
|
47
|
-
* ```
|
|
48
|
-
*
|
|
49
|
-
* @category CoreServices
|
|
50
|
-
* @WebdaModda
|
|
51
|
-
*/
|
|
52
|
-
class Authentication extends Service {
|
|
53
|
-
constructor() {
|
|
54
|
-
super(...arguments);
|
|
55
|
-
this.providers = new Set();
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Load the parameters for a service
|
|
59
|
-
*/
|
|
60
|
-
loadParameters(params) {
|
|
61
|
-
return new AuthenticationParameters(params);
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Get the user store
|
|
65
|
-
* @returns
|
|
66
|
-
*/
|
|
67
|
-
getUserStore() {
|
|
68
|
-
return this._userModel.store();
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Get the user store
|
|
72
|
-
* @returns
|
|
73
|
-
*/
|
|
74
|
-
getIdentStore() {
|
|
75
|
-
return this._identModel.store();
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* @ignore
|
|
79
|
-
* Setup the default routes
|
|
80
|
-
*/
|
|
81
|
-
computeParameters() {
|
|
82
|
-
super.computeParameters();
|
|
83
|
-
this._identModel = this.getWebda().getModel(this.parameters.identModel);
|
|
84
|
-
this._userModel = this.getWebda().getModel(this.parameters.userModel);
|
|
85
|
-
if (this.parameters.password.verifier) {
|
|
86
|
-
this._passwordVerifier = this.getService(this.parameters.password.verifier);
|
|
87
|
-
}
|
|
88
|
-
if (this.parameters.email && this.getMailMan() === undefined) {
|
|
89
|
-
throw Error("email authentication requires a Mailer service");
|
|
90
|
-
}
|
|
91
|
-
// Add email provider
|
|
92
|
-
if (this.parameters.email) {
|
|
93
|
-
this.addProvider("email");
|
|
94
|
-
this.addRoute("./email/{email}/recover", ["GET"], this._passwordRecoveryEmail, {
|
|
95
|
-
get: {
|
|
96
|
-
description: "The password reset process will be start",
|
|
97
|
-
summary: "Start password recovery",
|
|
98
|
-
operationId: "startEmailRecovery",
|
|
99
|
-
responses: {
|
|
100
|
-
"204": {
|
|
101
|
-
description: ""
|
|
102
|
-
},
|
|
103
|
-
"404": {
|
|
104
|
-
description: "Email does not exist"
|
|
105
|
-
},
|
|
106
|
-
"429": {
|
|
107
|
-
description: "Recovery has been initiated in the last 4 hours"
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
this.addRoute("./email/passwordRecovery", ["POST"], this._passwordRecovery, {
|
|
113
|
-
post: {
|
|
114
|
-
schemas: {
|
|
115
|
-
input: {
|
|
116
|
-
type: "object",
|
|
117
|
-
properties: {
|
|
118
|
-
token: {
|
|
119
|
-
type: "string"
|
|
120
|
-
},
|
|
121
|
-
expire: {
|
|
122
|
-
type: "number"
|
|
123
|
-
},
|
|
124
|
-
password: {
|
|
125
|
-
type: "string"
|
|
126
|
-
},
|
|
127
|
-
login: {
|
|
128
|
-
type: "string"
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
},
|
|
133
|
-
description: "Reinit the password if we have the right token, expire",
|
|
134
|
-
summary: "Reinit password",
|
|
135
|
-
operationId: "reinitPassword",
|
|
136
|
-
responses: {
|
|
137
|
-
"204": {
|
|
138
|
-
description: ""
|
|
139
|
-
},
|
|
140
|
-
"403": {
|
|
141
|
-
description: "Wrong Token"
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
});
|
|
146
|
-
this.addRoute("./email", ["POST"], this._handleEmail, {
|
|
147
|
-
post: {
|
|
148
|
-
description: "Authenticate with an email and password",
|
|
149
|
-
summary: "Authenticate with email",
|
|
150
|
-
operationId: `authWithEmail`
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* @override
|
|
157
|
-
*/
|
|
158
|
-
initMetrics() {
|
|
159
|
-
super.initMetrics();
|
|
160
|
-
this.metrics.login = this.getMetric(Counter, {
|
|
161
|
-
name: "auth_login",
|
|
162
|
-
help: "Counter number of login per provider",
|
|
163
|
-
labelNames: ["provider"]
|
|
164
|
-
});
|
|
165
|
-
this.metrics.logout = this.getMetric(Counter, {
|
|
166
|
-
name: "auth_logout",
|
|
167
|
-
help: "Counter number of logout"
|
|
168
|
-
});
|
|
169
|
-
this.metrics.registration = this.getMetric(Counter, {
|
|
170
|
-
name: "auth_registration",
|
|
171
|
-
help: "Counter number of registration per provider",
|
|
172
|
-
labelNames: ["provider"]
|
|
173
|
-
});
|
|
174
|
-
if (this.parameters.email) {
|
|
175
|
-
this.metrics.loginFailed = this.getMetric(Counter, {
|
|
176
|
-
name: "auth_login_failed",
|
|
177
|
-
help: "Counter number of login failed with password"
|
|
178
|
-
});
|
|
179
|
-
this.metrics.recovery = this.getMetric(Counter, {
|
|
180
|
-
name: "auth_login_recovery",
|
|
181
|
-
help: "Counter number of password lost process initiated"
|
|
182
|
-
});
|
|
183
|
-
this.metrics.recovered = this.getMetric(Counter, {
|
|
184
|
-
name: "auth_login_recovered",
|
|
185
|
-
help: "Counter number of password lost process successful"
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Add a provider to the oauth scheme
|
|
191
|
-
* @param name
|
|
192
|
-
*/
|
|
193
|
-
addProvider(name) {
|
|
194
|
-
this.providers.add(name);
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Ensure email is enabled for all emails routes
|
|
198
|
-
* @override
|
|
199
|
-
*/
|
|
200
|
-
getUrl(url, methods) {
|
|
201
|
-
if (url.startsWith("./emails") && !this.parameters.email) {
|
|
202
|
-
return undefined;
|
|
203
|
-
}
|
|
204
|
-
return super.getUrl(url, methods);
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Send or resend an email to validate the email address
|
|
208
|
-
*
|
|
209
|
-
* @param ctx
|
|
210
|
-
* @throws 409 if ident is linked to someone else
|
|
211
|
-
* @throws 412 if the email is already validated
|
|
212
|
-
* @throws 429 if a validation email has been sent recently
|
|
213
|
-
*/
|
|
214
|
-
async _sendEmailValidation(ctx) {
|
|
215
|
-
const identKey = ctx.parameters.email + "_email";
|
|
216
|
-
const ident = await this._identModel.ref(identKey).get();
|
|
217
|
-
if (!ident) {
|
|
218
|
-
await this._identModel.ref(`${ctx.parameters.email}_email`).create({
|
|
219
|
-
_lastValidationEmail: Date.now(),
|
|
220
|
-
_type: "email"
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
// If the ident is linked to someone else - might want to remove it
|
|
225
|
-
if (ident.getUser().getUuid() !== ctx.getCurrentUserId()) {
|
|
226
|
-
throw new WebdaError.Conflict("Ident is linked to someone else");
|
|
227
|
-
}
|
|
228
|
-
// If the email is already validated
|
|
229
|
-
if (ident._validation) {
|
|
230
|
-
throw new WebdaError.PreconditionFailed("Email already validated");
|
|
231
|
-
}
|
|
232
|
-
//
|
|
233
|
-
if (ident._lastValidationEmail >= Date.now() - this.parameters.email.delay) {
|
|
234
|
-
throw new WebdaError.TooManyRequests("Email sent recently");
|
|
235
|
-
}
|
|
236
|
-
await this._identModel.ref(ident.getUuid()).setAttribute("_lastValidationEmail", Date.now());
|
|
237
|
-
}
|
|
238
|
-
await this.sendValidationEmail(ctx, ctx.parameters.email);
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Return current user
|
|
242
|
-
* @param ctx
|
|
243
|
-
*/
|
|
244
|
-
async _getMe(ctx) {
|
|
245
|
-
const user = await ctx.getCurrentUser();
|
|
246
|
-
if (user === undefined) {
|
|
247
|
-
throw new WebdaError.NotFound("No user found");
|
|
248
|
-
}
|
|
249
|
-
await this.emitSync("Authentication.GetMe", {
|
|
250
|
-
context: ctx,
|
|
251
|
-
user
|
|
252
|
-
});
|
|
253
|
-
ctx.write(user);
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Handle both list of available authentication
|
|
257
|
-
* and logout with method 'DELETE'
|
|
258
|
-
*
|
|
259
|
-
* @param ctx
|
|
260
|
-
* @returns
|
|
261
|
-
*/
|
|
262
|
-
async _listAuthentications(ctx) {
|
|
263
|
-
if (ctx.getHttpContext().getMethod() === "DELETE") {
|
|
264
|
-
await this.logout(ctx);
|
|
265
|
-
this.metrics.logout.inc();
|
|
266
|
-
ctx.write("GoodBye");
|
|
267
|
-
return;
|
|
268
|
-
}
|
|
269
|
-
ctx.write(Array.from(this.providers));
|
|
270
|
-
}
|
|
271
|
-
async onIdentLogin(ctx, provider, identId, profile, tokens = undefined) {
|
|
272
|
-
// Auto postifx with provider name
|
|
273
|
-
const postfix = `_${provider}`;
|
|
274
|
-
if (!identId.endsWith(postfix)) {
|
|
275
|
-
identId += postfix;
|
|
276
|
-
}
|
|
277
|
-
let ident = await this._identModel.ref(identId).get();
|
|
278
|
-
// Ident is known
|
|
279
|
-
if (ident) {
|
|
280
|
-
await this.login(ctx, ident.getUser().toString(), ident, provider);
|
|
281
|
-
await ident.patch({
|
|
282
|
-
_lastUsed: new Date(),
|
|
283
|
-
__tokens: tokens
|
|
284
|
-
});
|
|
285
|
-
// Redirect to?
|
|
286
|
-
return;
|
|
287
|
-
}
|
|
288
|
-
let user;
|
|
289
|
-
if (profile.email) {
|
|
290
|
-
ident = await this._identModel.ref(`${profile.email}_email`).get();
|
|
291
|
-
}
|
|
292
|
-
// If already login
|
|
293
|
-
if (ctx.getCurrentUserId()) {
|
|
294
|
-
user = await ctx.getCurrentUser();
|
|
295
|
-
}
|
|
296
|
-
else {
|
|
297
|
-
// If an email in profile try to find the ident
|
|
298
|
-
if (ident) {
|
|
299
|
-
user = await this._userModel.ref(ident.getUser().toString()).get();
|
|
300
|
-
}
|
|
301
|
-
if (!user) {
|
|
302
|
-
// If no user, register a new user automatically
|
|
303
|
-
user = await this.registerUser(ctx, profile, identId);
|
|
304
|
-
await user.save();
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
if (profile.email && !ident) {
|
|
308
|
-
// Save additional email
|
|
309
|
-
await new this._identModel()
|
|
310
|
-
.load({
|
|
311
|
-
uuid: `${profile.email}_email`,
|
|
312
|
-
provider: "email",
|
|
313
|
-
_user: user.getUuid()
|
|
314
|
-
}, true)
|
|
315
|
-
.save();
|
|
316
|
-
}
|
|
317
|
-
// Work directly on ident argument
|
|
318
|
-
ident = new this._identModel().load({
|
|
319
|
-
uuid: identId,
|
|
320
|
-
__profile: profile,
|
|
321
|
-
__tokens: tokens,
|
|
322
|
-
provider
|
|
323
|
-
}, true);
|
|
324
|
-
ident.setUser(user.uuid);
|
|
325
|
-
ident._lastUsed = new Date();
|
|
326
|
-
ident.setType(provider);
|
|
327
|
-
await ident.save();
|
|
328
|
-
ident.__new = true;
|
|
329
|
-
await this.login(ctx, user, ident, provider);
|
|
330
|
-
}
|
|
331
|
-
/**
|
|
332
|
-
* Create a new User with the link ident
|
|
333
|
-
* @param ident
|
|
334
|
-
*/
|
|
335
|
-
async createUserWithIdent(provider, identId, profile = {}) {
|
|
336
|
-
if (await this._identModel.ref(`${identId}_${provider}`).exists()) {
|
|
337
|
-
throw new Error("Ident is already known");
|
|
338
|
-
}
|
|
339
|
-
const ctx = await this._webda.newWebContext(new HttpContext("fake", "GET", "/"));
|
|
340
|
-
// Pretend we logged in with the ident
|
|
341
|
-
await this.onIdentLogin(ctx, provider, identId, profile);
|
|
342
|
-
}
|
|
343
|
-
async registerUser(ctx, data, identId, user = new this._userModel()) {
|
|
344
|
-
user.load({
|
|
345
|
-
email: data.email,
|
|
346
|
-
locale: ctx.getLocale()
|
|
347
|
-
}, true);
|
|
348
|
-
this.metrics.registration.inc();
|
|
349
|
-
await this.emitSync("Authentication.Register", {
|
|
350
|
-
user: user,
|
|
351
|
-
data: data,
|
|
352
|
-
context: ctx,
|
|
353
|
-
identId
|
|
354
|
-
});
|
|
355
|
-
return user;
|
|
356
|
-
}
|
|
357
|
-
async getPasswordRecoveryInfos(uuid, interval = this.parameters.email.delay) {
|
|
358
|
-
const expire = Date.now() + interval;
|
|
359
|
-
let user;
|
|
360
|
-
if (typeof uuid === "string") {
|
|
361
|
-
user = await this._userModel.ref(uuid).get();
|
|
362
|
-
}
|
|
363
|
-
else {
|
|
364
|
-
user = uuid;
|
|
365
|
-
}
|
|
366
|
-
if (!user) {
|
|
367
|
-
return undefined;
|
|
368
|
-
}
|
|
369
|
-
return {
|
|
370
|
-
expire: expire,
|
|
371
|
-
// Might want to add more alea not coming from the db to avoid exploitation of stolen db
|
|
372
|
-
token: await this.cryptoService.hmac(user.uuid + expire + user.getPassword()),
|
|
373
|
-
login: user.uuid
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
/**
|
|
377
|
-
* Manage password recovery
|
|
378
|
-
* @param ctx
|
|
379
|
-
*/
|
|
380
|
-
async _passwordRecoveryEmail(ctx) {
|
|
381
|
-
const email = ctx.parameter("email");
|
|
382
|
-
const ident = await this._identModel.ref(email + "_email").get();
|
|
383
|
-
if (!ident) {
|
|
384
|
-
throw new WebdaError.NotFound("Email not found");
|
|
385
|
-
}
|
|
386
|
-
const user = await this._userModel.ref(ident.getUser().toString()).get();
|
|
387
|
-
// Dont allow to do too many request
|
|
388
|
-
if (!user.lastPasswordRecoveryBefore(Date.now() - this.parameters.email.delay)) {
|
|
389
|
-
throw new WebdaError.TooManyRequests("Password recovery already requested recently");
|
|
390
|
-
}
|
|
391
|
-
await user.patch({
|
|
392
|
-
_lastPasswordRecovery: Date.now()
|
|
393
|
-
}, null);
|
|
394
|
-
this.metrics.recovery.inc();
|
|
395
|
-
await this.sendRecoveryEmail(ctx, user, email);
|
|
396
|
-
}
|
|
397
|
-
async _verifyPassword(password, user) {
|
|
398
|
-
if (this._passwordVerifier) {
|
|
399
|
-
if (!(await this._passwordVerifier.validate(password, user))) {
|
|
400
|
-
throw new WebdaError.BadRequest("Password does not match the policy");
|
|
401
|
-
}
|
|
402
|
-
return;
|
|
403
|
-
}
|
|
404
|
-
const regexp = new RegExp(this.parameters.password.regexp);
|
|
405
|
-
if (regexp.exec(password) === null) {
|
|
406
|
-
throw new WebdaError.BadRequest("Password does not match the policy");
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
async _passwordRecovery(ctx) {
|
|
410
|
-
const body = await ctx.getRequestBody();
|
|
411
|
-
const user = await this._userModel.ref(body.login.toLowerCase()).get();
|
|
412
|
-
if (!user) {
|
|
413
|
-
throw new WebdaError.Forbidden("User not found");
|
|
414
|
-
}
|
|
415
|
-
if (!(await this.cryptoService.hmacVerify(body.login.toLowerCase() + body.expire + user.getPassword(), body.token))) {
|
|
416
|
-
throw new WebdaError.Forbidden("Invalid token");
|
|
417
|
-
}
|
|
418
|
-
if (body.expire < Date.now()) {
|
|
419
|
-
throw new WebdaError.Gone("Expired token");
|
|
420
|
-
}
|
|
421
|
-
await this._verifyPassword(body.password, user);
|
|
422
|
-
const password = this.hashPassword(body.password);
|
|
423
|
-
await user.patch({
|
|
424
|
-
__password: password
|
|
425
|
-
}, null);
|
|
426
|
-
this.metrics.recovered.inc();
|
|
427
|
-
await this.emitSync("Authentication.PasswordUpdate", {
|
|
428
|
-
user,
|
|
429
|
-
password,
|
|
430
|
-
context: ctx
|
|
431
|
-
});
|
|
432
|
-
}
|
|
433
|
-
/**
|
|
434
|
-
* Callback to validate an email address
|
|
435
|
-
* @param ctx
|
|
436
|
-
* @returns
|
|
437
|
-
*/
|
|
438
|
-
async _handleEmailCallback(ctx) {
|
|
439
|
-
if (!(await this.cryptoService.hmacVerify(`${ctx.parameter("email")}_${ctx.parameter("user")}`, ctx.parameter("token")))) {
|
|
440
|
-
ctx.writeHead(302, {
|
|
441
|
-
Location: this.parameters.failureRedirect + "?reason=badToken"
|
|
442
|
-
});
|
|
443
|
-
return;
|
|
444
|
-
}
|
|
445
|
-
if (ctx.parameter("user") !== ctx.getCurrentUserId() &&
|
|
446
|
-
ctx.getCurrentUserId() !== "" &&
|
|
447
|
-
ctx.getCurrentUserId() !== undefined) {
|
|
448
|
-
ctx.writeHead(302, {
|
|
449
|
-
Location: this.parameters.failureRedirect + "?reason=badUser"
|
|
450
|
-
});
|
|
451
|
-
return;
|
|
452
|
-
}
|
|
453
|
-
if (!ctx.parameter("user")) {
|
|
454
|
-
ctx.writeHead(302, {
|
|
455
|
-
Location: `${this.parameters.registerRedirect}?token=${ctx.parameter("token")}&email=${ctx.parameter("email")}`
|
|
456
|
-
});
|
|
457
|
-
return;
|
|
458
|
-
}
|
|
459
|
-
const uuid = ctx.parameter("email") + "_email";
|
|
460
|
-
let ident = await this._identModel.ref(uuid).get();
|
|
461
|
-
// Would mean the ident got delete in the mean time... hyper low likely hood
|
|
462
|
-
if (ident === undefined) {
|
|
463
|
-
ident = new this._identModel().setUuid(uuid);
|
|
464
|
-
}
|
|
465
|
-
ident._type = "email";
|
|
466
|
-
ident._validation = new Date();
|
|
467
|
-
ident.setUser(ctx.parameter("user"));
|
|
468
|
-
await ident.save();
|
|
469
|
-
ctx.writeHead(302, {
|
|
470
|
-
Location: this.parameters.successRedirect + "?validation=email",
|
|
471
|
-
"X-Webda-Authentication": "success"
|
|
472
|
-
});
|
|
473
|
-
}
|
|
474
|
-
/**
|
|
475
|
-
* Send an email to recover the user password
|
|
476
|
-
*
|
|
477
|
-
* @param ctx
|
|
478
|
-
* @param user
|
|
479
|
-
* @param email
|
|
480
|
-
* @returns
|
|
481
|
-
*/
|
|
482
|
-
async sendRecoveryEmail(ctx, user, email) {
|
|
483
|
-
const infos = await this.getPasswordRecoveryInfos(user);
|
|
484
|
-
const mailer = this.getMailMan();
|
|
485
|
-
const locale = user.locale || ctx.getLocale();
|
|
486
|
-
const mailOptions = {
|
|
487
|
-
to: email,
|
|
488
|
-
locale: locale,
|
|
489
|
-
template: "EMAIL_RECOVERY",
|
|
490
|
-
replacements: {
|
|
491
|
-
...this.parameters.email,
|
|
492
|
-
infos,
|
|
493
|
-
to: email,
|
|
494
|
-
context: ctx
|
|
495
|
-
}
|
|
496
|
-
};
|
|
497
|
-
return mailer.send(mailOptions);
|
|
498
|
-
}
|
|
499
|
-
/**
|
|
500
|
-
* Send an email to validate the user email by sending a unique link to
|
|
501
|
-
* his email
|
|
502
|
-
*
|
|
503
|
-
* @param ctx
|
|
504
|
-
* @param email
|
|
505
|
-
* @returns
|
|
506
|
-
*/
|
|
507
|
-
async sendValidationEmail(ctx, email) {
|
|
508
|
-
const mailer = this.getMailMan();
|
|
509
|
-
const replacements = {
|
|
510
|
-
...this.parameters.email,
|
|
511
|
-
context: ctx,
|
|
512
|
-
url: ctx
|
|
513
|
-
.getHttpContext()
|
|
514
|
-
.getAbsoluteUrl(`${this.parameters.url}/email/callback?email=${email}&token=${await this.generateEmailValidationToken(ctx.getCurrentUserId(), email)}`)
|
|
515
|
-
};
|
|
516
|
-
const userId = ctx.getCurrentUserId();
|
|
517
|
-
if (userId && userId.length > 0) {
|
|
518
|
-
replacements.url += "&user=" + userId;
|
|
519
|
-
}
|
|
520
|
-
const mailOptions = {
|
|
521
|
-
to: email,
|
|
522
|
-
locale: ctx.getLocale(),
|
|
523
|
-
template: "EMAIL_REGISTER",
|
|
524
|
-
replacements: replacements
|
|
525
|
-
};
|
|
526
|
-
return mailer.send(mailOptions);
|
|
527
|
-
}
|
|
528
|
-
/**
|
|
529
|
-
* Check the password match the stored hash
|
|
530
|
-
* @param hash generate prior by hashPassword
|
|
531
|
-
* @param password as entered by the user
|
|
532
|
-
*/
|
|
533
|
-
checkPassword(hash, pass) {
|
|
534
|
-
return bcrypt.compareSync(pass, hash);
|
|
535
|
-
}
|
|
536
|
-
/**
|
|
537
|
-
* Hash the password according to good practices
|
|
538
|
-
*
|
|
539
|
-
* @param pass to hash
|
|
540
|
-
*/
|
|
541
|
-
hashPassword(pass) {
|
|
542
|
-
return bcrypt.hashSync(pass, this.parameters.salt || 10);
|
|
543
|
-
}
|
|
544
|
-
/**
|
|
545
|
-
* Logout user
|
|
546
|
-
*/
|
|
547
|
-
async logout(ctx) {
|
|
548
|
-
await this.emitSync("Authentication.Logout", {
|
|
549
|
-
context: ctx
|
|
550
|
-
});
|
|
551
|
-
await ctx.newSession();
|
|
552
|
-
}
|
|
553
|
-
/**
|
|
554
|
-
* Login a user
|
|
555
|
-
*
|
|
556
|
-
* @param ctx
|
|
557
|
-
* @param user
|
|
558
|
-
* @param ident
|
|
559
|
-
* @returns
|
|
560
|
-
*/
|
|
561
|
-
async login(ctx, user, ident, provider) {
|
|
562
|
-
const event = {
|
|
563
|
-
context: ctx,
|
|
564
|
-
userId: "",
|
|
565
|
-
identId: ident.uuid,
|
|
566
|
-
ident
|
|
567
|
-
};
|
|
568
|
-
if (typeof user == "object") {
|
|
569
|
-
event.userId = user.getUuid();
|
|
570
|
-
event.user = user;
|
|
571
|
-
}
|
|
572
|
-
else {
|
|
573
|
-
event.userId = user;
|
|
574
|
-
}
|
|
575
|
-
event.context = ctx;
|
|
576
|
-
ctx.getSession().login(event.userId, event.identId);
|
|
577
|
-
this.metrics.login.inc({ provider });
|
|
578
|
-
return this.emitSync("Authentication.Login", event);
|
|
579
|
-
}
|
|
580
|
-
getMailMan() {
|
|
581
|
-
return this.getService(this.parameters.email.mailer ? this.parameters.email.mailer : "Mailer");
|
|
582
|
-
}
|
|
583
|
-
/**
|
|
584
|
-
* Handle a user login request
|
|
585
|
-
*
|
|
586
|
-
* @param ctx
|
|
587
|
-
* @param ident
|
|
588
|
-
*/
|
|
589
|
-
async handleLogin(ctx, ident) {
|
|
590
|
-
const updates = {};
|
|
591
|
-
const user = await this._userModel.ref(ident.getUser().toString()).get();
|
|
592
|
-
// Check password
|
|
593
|
-
if (this.checkPassword(user.getPassword(), (await ctx.getRequestBody()).password)) {
|
|
594
|
-
if (ident._failedLogin > 0) {
|
|
595
|
-
ident._failedLogin = 0;
|
|
596
|
-
}
|
|
597
|
-
updates._lastUsed = new Date();
|
|
598
|
-
updates._failedLogin = 0;
|
|
599
|
-
await this._identModel.ref(ident.uuid).patch(updates);
|
|
600
|
-
await this.login(ctx, ident.getUser().toString(), ident, "email");
|
|
601
|
-
ctx.write(user);
|
|
602
|
-
}
|
|
603
|
-
else {
|
|
604
|
-
this.metrics.loginFailed.inc();
|
|
605
|
-
await this.emitSync("Authentication.LoginFailed", {
|
|
606
|
-
user,
|
|
607
|
-
context: ctx
|
|
608
|
-
});
|
|
609
|
-
ident._failedLogin ?? (ident._failedLogin = 0);
|
|
610
|
-
updates._failedLogin = ident._failedLogin + 1;
|
|
611
|
-
updates._lastFailedLogin = new Date();
|
|
612
|
-
// Swalow exeception issue to double check !
|
|
613
|
-
await this._identModel.ref(ident.uuid).patch(updates);
|
|
614
|
-
// Allows to auto redirect user to a oauth if needed
|
|
615
|
-
// It can intercept the error and redirect to the oauth if
|
|
616
|
-
// email match
|
|
617
|
-
if (!ctx.isEnded()) {
|
|
618
|
-
throw new WebdaError.Forbidden("Invalid password");
|
|
619
|
-
}
|
|
620
|
-
}
|
|
621
|
-
}
|
|
622
|
-
/**
|
|
623
|
-
* Handle the POST /auth/email
|
|
624
|
-
*
|
|
625
|
-
* @param ctx
|
|
626
|
-
* @returns
|
|
627
|
-
*/
|
|
628
|
-
async _handleEmail(ctx) {
|
|
629
|
-
// If called while logged in reject
|
|
630
|
-
if (ctx.getCurrentUserId() !== undefined) {
|
|
631
|
-
throw new WebdaError.Gone("Already logged in");
|
|
632
|
-
}
|
|
633
|
-
const body = await ctx.getRequestBody();
|
|
634
|
-
const mailConfig = this.parameters.email;
|
|
635
|
-
const uuid = body.login.toLowerCase() + "_email";
|
|
636
|
-
let ident = await this._identModel.ref(uuid).get();
|
|
637
|
-
if (ident !== undefined && ident.getUser() !== undefined) {
|
|
638
|
-
// Register on an known user
|
|
639
|
-
if (!body.register) {
|
|
640
|
-
await this.handleLogin(ctx, ident);
|
|
641
|
-
return;
|
|
642
|
-
}
|
|
643
|
-
// If register on a validate email
|
|
644
|
-
if (ident._validation !== undefined) {
|
|
645
|
-
throw new WebdaError.Conflict("Email already registered");
|
|
646
|
-
}
|
|
647
|
-
}
|
|
648
|
-
// TODO Handle add of email on authenticated user
|
|
649
|
-
const email = body.login.toLowerCase();
|
|
650
|
-
// Read the form
|
|
651
|
-
if (body.register) {
|
|
652
|
-
let validation = undefined;
|
|
653
|
-
// Need to check email before creation
|
|
654
|
-
if (!mailConfig.postValidation) {
|
|
655
|
-
if (body.token && (await this.cryptoService.hmacVerify(`${email}_${ctx.getCurrentUserId()}`, body.token))) {
|
|
656
|
-
validation = new Date();
|
|
657
|
-
}
|
|
658
|
-
else {
|
|
659
|
-
ctx.write({});
|
|
660
|
-
// token is undefined send an email
|
|
661
|
-
return this.sendValidationEmail(ctx, email);
|
|
662
|
-
}
|
|
663
|
-
}
|
|
664
|
-
if (!body.password) {
|
|
665
|
-
throw new WebdaError.BadRequest("Password is required");
|
|
666
|
-
}
|
|
667
|
-
// Store with a _
|
|
668
|
-
const __password = this.hashPassword(body.password);
|
|
669
|
-
await this._verifyPassword(body.password);
|
|
670
|
-
// Remove useless attributes
|
|
671
|
-
delete body.password;
|
|
672
|
-
delete body.register;
|
|
673
|
-
delete body.token;
|
|
674
|
-
const user = await this.registerUser(ctx, {}, uuid, new this._userModel().load({
|
|
675
|
-
...body,
|
|
676
|
-
__password
|
|
677
|
-
}, true));
|
|
678
|
-
await this.emitSync("Authentication.PasswordCreate", {
|
|
679
|
-
user,
|
|
680
|
-
password: __password,
|
|
681
|
-
context: ctx
|
|
682
|
-
});
|
|
683
|
-
await user.save();
|
|
684
|
-
const newIdent = new this._identModel().load({
|
|
685
|
-
uuid: uuid,
|
|
686
|
-
_type: "email",
|
|
687
|
-
email: email
|
|
688
|
-
}, true);
|
|
689
|
-
newIdent.setUser(user.getUuid());
|
|
690
|
-
if (validation) {
|
|
691
|
-
newIdent._validation = validation;
|
|
692
|
-
}
|
|
693
|
-
else if (!mailConfig.skipEmailValidation) {
|
|
694
|
-
newIdent._lastValidationEmail = Date.now();
|
|
695
|
-
}
|
|
696
|
-
ident = await newIdent.save();
|
|
697
|
-
await this.login(ctx, user, ident, "email");
|
|
698
|
-
ctx.write(user);
|
|
699
|
-
if (!validation && !mailConfig.skipEmailValidation) {
|
|
700
|
-
await this.sendValidationEmail(ctx, email);
|
|
701
|
-
}
|
|
702
|
-
return;
|
|
703
|
-
}
|
|
704
|
-
throw new WebdaError.NotFound("");
|
|
705
|
-
}
|
|
706
|
-
async generateEmailValidationToken(user, email) {
|
|
707
|
-
return this.cryptoService.hmac(email + "_" + user);
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
__decorate([
|
|
711
|
-
Inject("CryptoService")
|
|
712
|
-
], Authentication.prototype, "cryptoService", void 0);
|
|
713
|
-
__decorate([
|
|
714
|
-
Route("./email/{email}/validate", ["GET"], {
|
|
715
|
-
get: {
|
|
716
|
-
description: "The email validation process will be start",
|
|
717
|
-
summary: "Restart email validation",
|
|
718
|
-
operationId: "startEmailRecovery",
|
|
719
|
-
responses: {
|
|
720
|
-
"204": {
|
|
721
|
-
description: ""
|
|
722
|
-
},
|
|
723
|
-
"409": {
|
|
724
|
-
description: "Email already verified for another user"
|
|
725
|
-
},
|
|
726
|
-
"412": {
|
|
727
|
-
description: "Email already verified for current user"
|
|
728
|
-
},
|
|
729
|
-
"429": {
|
|
730
|
-
description: "Validation has been initiated in the last 4 hours"
|
|
731
|
-
}
|
|
732
|
-
}
|
|
733
|
-
}
|
|
734
|
-
})
|
|
735
|
-
], Authentication.prototype, "_sendEmailValidation", null);
|
|
736
|
-
__decorate([
|
|
737
|
-
Route("./me", ["GET"], {
|
|
738
|
-
get: {
|
|
739
|
-
description: "Retrieve the current user from the session",
|
|
740
|
-
summary: "Get current user",
|
|
741
|
-
operationId: "getCurrentUser"
|
|
742
|
-
}
|
|
743
|
-
})
|
|
744
|
-
], Authentication.prototype, "_getMe", null);
|
|
745
|
-
__decorate([
|
|
746
|
-
Route(".", ["GET", "DELETE"], {
|
|
747
|
-
get: {
|
|
748
|
-
description: "Retrieve the list of available authentication",
|
|
749
|
-
summary: "Get available auths",
|
|
750
|
-
operationId: `getAuthenticationMethods`,
|
|
751
|
-
responses: {
|
|
752
|
-
"200": {
|
|
753
|
-
description: "List of authentication"
|
|
754
|
-
}
|
|
755
|
-
}
|
|
756
|
-
},
|
|
757
|
-
delete: {
|
|
758
|
-
description: "Logout current user",
|
|
759
|
-
summary: "Logout",
|
|
760
|
-
operationId: `logout`,
|
|
761
|
-
responses: {
|
|
762
|
-
"200": {}
|
|
763
|
-
}
|
|
764
|
-
}
|
|
765
|
-
})
|
|
766
|
-
], Authentication.prototype, "_listAuthentications", null);
|
|
767
|
-
__decorate([
|
|
768
|
-
Route("./email/callback{?email,token,user?}", ["GET"], {
|
|
769
|
-
hidden: true
|
|
770
|
-
})
|
|
771
|
-
], Authentication.prototype, "_handleEmailCallback", null);
|
|
772
|
-
export { Authentication };
|
|
773
|
-
//# sourceMappingURL=authentication.js.map
|