gina 0.5.26 → 0.6.0
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/CHANGELOG.md +22 -0
- package/README.md +34 -22
- package/ROADMAP.md +43 -16
- package/bin/cli +12 -1
- package/bin/gina-init +15 -1
- package/framework/v0.6.0/VERSION +1 -0
- package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/js/gina.js +36 -1
- package/framework/v0.6.0/core/asset/plugin/dist/vendor/gina/js/gina.min.js +601 -0
- package/framework/v0.6.0/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.0/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.5.26 → v0.6.0}/core/connectors/couchbase/lib/session-store.v3.js +52 -84
- package/framework/{v0.5.26 → v0.6.0}/core/connectors/couchbase/lib/session-store.v4.js +58 -84
- package/framework/{v0.5.26 → v0.6.0}/core/connectors/mongodb/lib/session-store.js +5 -2
- package/framework/{v0.5.26 → v0.6.0}/core/connectors/redis/lib/session-store.js +5 -2
- package/framework/{v0.5.26 → v0.6.0}/core/connectors/scylladb/lib/session-store.js +5 -2
- package/framework/{v0.5.26 → v0.6.0}/core/connectors/sqlite/lib/session-store.js +17 -3
- package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/session/src/main.js +142 -9
- package/framework/{v0.5.26 → v0.6.0}/core/router.js +101 -11
- package/framework/{v0.5.26 → v0.6.0}/core/server.js +91 -1
- package/framework/{v0.5.26 → v0.6.0}/core/template/conf/settings.json +3 -0
- package/framework/v0.6.0/lib/audit/src/main.js +916 -0
- package/framework/v0.6.0/lib/authn/package.json +7 -0
- package/framework/v0.6.0/lib/authn/src/lockout.js +615 -0
- package/framework/v0.6.0/lib/authn/src/main.js +899 -0
- package/framework/v0.6.0/lib/authn/src/totp.js +418 -0
- package/framework/v0.6.0/lib/cmd/audit/arguments.json +5 -0
- package/framework/v0.6.0/lib/cmd/audit/help.txt +50 -0
- package/framework/v0.6.0/lib/cmd/audit/verify.js +294 -0
- package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/init.js +11 -0
- package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/tail.js +5 -1
- package/framework/{v0.5.26 → v0.6.0}/lib/cmd/gina.1.md +1 -0
- package/framework/{v0.5.26 → v0.6.0}/lib/index.js +13 -0
- package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/containers/file/index.js +11 -1
- package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/containers/mq/speaker.js +8 -1
- package/framework/v0.6.0/lib/net-locality/package.json +17 -0
- package/framework/v0.6.0/lib/net-locality/src/main.js +174 -0
- package/framework/{v0.5.26 → v0.6.0}/lib/nunjucks-filters/src/main.js +13 -0
- package/framework/{v0.5.26 → v0.6.0}/lib/routing/src/main.js +36 -1
- package/framework/{v0.5.26 → v0.6.0}/lib/swig-filters/src/main.js +13 -0
- package/framework/{v0.5.26 → v0.6.0}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +19 -2
- package/package.json +3 -3
- package/schema/connectors.json +2 -3
- package/schema/settings.json +101 -0
- package/types/index.d.ts +4 -0
- package/framework/v0.5.26/VERSION +0 -1
- package/framework/v0.5.26/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -599
- package/framework/v0.5.26/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.5.26/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/v0.5.26/lib/audit/src/main.js +0 -456
- /package/framework/{v0.5.26 → v0.6.0}/AUTHORS +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/LICENSE +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/html/static.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/config.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/content.encoding +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/dev/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/gna.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/locales/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/locales/currency.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/locales/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/mime.types +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/model/entity.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/model/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/model/template/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/server.express.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/server.isaac.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/status.codes +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/_gitignore +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/conf/env.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/conf/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/console.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/context.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/data/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/data/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/json/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/json/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/path.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/prototypes.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/task.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/text.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/admin/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/archiver/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/archiver/build.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/archiver/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/async/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/async/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/audit/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/audit-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cache/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cache/build.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cache/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/collection/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/collection/build.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/collection/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/config.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cron/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cron/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/domain/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/domain/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/dto/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/generator/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/i18n/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/image-build/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/inherits/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/inherits/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/instrument/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/job/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/job/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/job-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/math/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/merge/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/merge/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/metrics/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/model.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/proc.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/routing/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/routing/build.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/routing/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/secrets/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/session-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/shell.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/state.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/url/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/url/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/url/routing.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/uuid/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/validator.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/watcher/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/ws-session/src/main.js +0 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
var fs = require('fs');
|
|
2
|
+
var console = lib.logger;
|
|
3
|
+
|
|
4
|
+
var CmdHelper = require('./../helper');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @module gina/lib/cmd/audit/verify
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Verifies the tamper-evidence hash chain of a bundle's audit trail
|
|
11
|
+
* (#COMPLY2 slice 3). Walks the JSONL file and recomputes every record's
|
|
12
|
+
* `hash` (`HMAC-SHA256(secret, prevHash + ':' + canonicalV1(record))`);
|
|
13
|
+
* reports the FIRST break with its line and reason, or the intact totals.
|
|
14
|
+
*
|
|
15
|
+
* Offline command — reads the trail file directly, no daemon and no running
|
|
16
|
+
* bundle needed. The chain engine is `lib.audit.verifyChain` (the single
|
|
17
|
+
* canonical implementation, shared with the tests); this handler only
|
|
18
|
+
* resolves WHICH file and WHICH key.
|
|
19
|
+
*
|
|
20
|
+
* File resolution: `--file=</abs/path>` wins; otherwise the bundle's
|
|
21
|
+
* `config/settings.json > audit.file` is replayed exactly like the boot does
|
|
22
|
+
* (absolute as-is; relative against the project root; absent → the default
|
|
23
|
+
* `<project>/logs/audit-<bundle>-<env>.jsonl`).
|
|
24
|
+
*
|
|
25
|
+
* Key resolution: `settings.json > audit.chain.secret` (a `${secret:VAR}`
|
|
26
|
+
* placeholder is resolved from `process.env[VAR]` — config-load substitution
|
|
27
|
+
* does not run offline, and `${secret:GINA_*}` names can never resolve
|
|
28
|
+
* because the CLI sweeps GINA_* out of process.env), then `GINA_AUDIT_SECRET`
|
|
29
|
+
* through the framework env reader.
|
|
30
|
+
*
|
|
31
|
+
* Exit codes: `0` chain intact (warnings, if any, are printed — read them) ·
|
|
32
|
+
* `1` chain BROKEN · `2` usage/config error (no trail file, no key, bad --env).
|
|
33
|
+
*
|
|
34
|
+
* Usage:
|
|
35
|
+
* gina audit:verify <bundle> @<project>
|
|
36
|
+
* gina audit:verify <bundle> @<project> --env=prod
|
|
37
|
+
* gina audit:verify <bundle> @<project> --file=/var/log/audit-web-prod.jsonl
|
|
38
|
+
* gina audit:verify <bundle> @<project> --format=json
|
|
39
|
+
*
|
|
40
|
+
* @class Verify
|
|
41
|
+
* @constructor
|
|
42
|
+
* @param {object} opt - Parsed command-line options
|
|
43
|
+
* @param {object} opt.client - Socket client for terminal output
|
|
44
|
+
* @param {string[]} opt.argv - Full argv array
|
|
45
|
+
* @param {number} [opt.debugPort] - Node.js inspector port
|
|
46
|
+
* @param {boolean} [opt.debugBrkEnabled] - True when --inspect-brk is active
|
|
47
|
+
* @param {object} cmd - The cmd dispatcher object (lib/cmd/index.js)
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* $ gina audit:verify web @myproject --env=prod
|
|
51
|
+
* [ audit:verify ] /srv/myproject/logs/audit-web-prod.jsonl
|
|
52
|
+
* OK — chain intact: 1042 chained record(s), 17 pre-chain record(s)
|
|
53
|
+
*/
|
|
54
|
+
function Verify(opt, cmd) {
|
|
55
|
+
var self = {};
|
|
56
|
+
var local = { bundle: null, env: null, file: null, secret: null };
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Wires CmdHelper, parses the bundle positional, resolves env / trail
|
|
60
|
+
* file / signing key, then runs the verification.
|
|
61
|
+
*
|
|
62
|
+
* @inner
|
|
63
|
+
* @private
|
|
64
|
+
*/
|
|
65
|
+
var init = function() {
|
|
66
|
+
|
|
67
|
+
new CmdHelper(self, opt.client, { port: opt.debugPort, brkEnabled: opt.debugBrkEnabled });
|
|
68
|
+
if (!isCmdConfigured()) return false;
|
|
69
|
+
|
|
70
|
+
// ONE positional (the bundle). CmdHelper's positional cleanup only
|
|
71
|
+
// runs for `bundle:` tasks, so parse argv directly: everything after
|
|
72
|
+
// the task token that is neither `@<project>` nor a `--flag`.
|
|
73
|
+
var positionals = [];
|
|
74
|
+
for (var i = 3; i < opt.argv.length; ++i) {
|
|
75
|
+
if ( /^\@/.test(opt.argv[i]) || /^--/.test(opt.argv[i]) ) continue;
|
|
76
|
+
positionals.push(opt.argv[i]);
|
|
77
|
+
}
|
|
78
|
+
if ( positionals.length !== 1 ) {
|
|
79
|
+
console.error('audit:verify requires a bundle: gina audit:verify <bundle> @<project> [--env=<env>] [--file=</abs/path>] [--format=json]');
|
|
80
|
+
process.exit(2);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
local.bundle = positionals[0];
|
|
84
|
+
|
|
85
|
+
if ( self.projectName == null || typeof(self.projects[self.projectName]) == 'undefined' ) {
|
|
86
|
+
console.error('[ '+ self.projectName +' ] is not a registered project.');
|
|
87
|
+
process.exit(2);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if ( !resolveEnv() || !resolveFile() || !resolveSecret() ) {
|
|
92
|
+
return; // each resolver exits with code 2 on failure
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
run();
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Resolves the env: `--env` when given (validated against the project's
|
|
100
|
+
* env list — the CmdHelper `--env` override only fires for lifecycle
|
|
101
|
+
* tasks, so read `self.params` directly), else the project default.
|
|
102
|
+
*
|
|
103
|
+
* @inner
|
|
104
|
+
* @private
|
|
105
|
+
* @returns {boolean}
|
|
106
|
+
*/
|
|
107
|
+
var resolveEnv = function() {
|
|
108
|
+
var p = self.params || {};
|
|
109
|
+
if ( typeof(p.env) != 'undefined' ) {
|
|
110
|
+
if ( !Array.isArray(self.envs) || self.envs.indexOf(p.env) < 0 ) {
|
|
111
|
+
console.error('Environment `'+ p.env +'` not found in your project [ '+ self.projectName +' ]');
|
|
112
|
+
process.exit(2);
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
local.env = p.env;
|
|
116
|
+
} else {
|
|
117
|
+
local.env = self.projects[self.projectName].def_env;
|
|
118
|
+
}
|
|
119
|
+
return true;
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Resolves the trail file: `--file` (absolute) wins; otherwise replays the
|
|
124
|
+
* boot's derivation from the bundle's `config/settings.json > audit`.
|
|
125
|
+
*
|
|
126
|
+
* @inner
|
|
127
|
+
* @private
|
|
128
|
+
* @returns {boolean}
|
|
129
|
+
*/
|
|
130
|
+
var resolveFile = function() {
|
|
131
|
+
var p = self.params || {};
|
|
132
|
+
if ( typeof(p.file) != 'undefined' ) {
|
|
133
|
+
if ( typeof(p.file) != 'string' || !/^\//.test(p.file) ) {
|
|
134
|
+
console.error('--file must be an absolute path.');
|
|
135
|
+
process.exit(2);
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
local.file = p.file;
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
var projectPath = self.projects[self.projectName].path;
|
|
143
|
+
var srcEntry = ( self.bundlesByProject && self.bundlesByProject[self.projectName] )
|
|
144
|
+
? self.bundlesByProject[self.projectName][local.bundle]
|
|
145
|
+
: null;
|
|
146
|
+
if ( !srcEntry ) {
|
|
147
|
+
console.error('Bundle [ '+ local.bundle +' ] is not registered inside `@'+ self.projectName +'`.');
|
|
148
|
+
process.exit(2);
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
var auditSettings = readAuditSettings(projectPath, srcEntry.src);
|
|
153
|
+
if ( auditSettings && auditSettings.store ) {
|
|
154
|
+
console.error('Bundle [ '+ local.bundle +' ] uses the connector store backend (`audit.store`) — the chain requires the file backend, so there is no trail file to derive. Pass --file explicitly if a file trail exists elsewhere.');
|
|
155
|
+
process.exit(2);
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
var file = ( auditSettings && typeof(auditSettings.file) == 'string' && auditSettings.file ) ? auditSettings.file : null;
|
|
160
|
+
if ( !file || !/^\//.test(file) ) {
|
|
161
|
+
file = file
|
|
162
|
+
? projectPath + '/' + file
|
|
163
|
+
: projectPath + '/logs/audit-'+ local.bundle +'-'+ local.env +'.jsonl';
|
|
164
|
+
}
|
|
165
|
+
local.file = _(file, true).toString();
|
|
166
|
+
return true;
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Reads the bundle's `settings.json > audit` block — `requireJSON`, never
|
|
171
|
+
* `JSON.parse` (settings files routinely carry `//` comments). A missing
|
|
172
|
+
* or unreadable file falls through to `null` (the defaults still let the
|
|
173
|
+
* default trail path be derived).
|
|
174
|
+
*
|
|
175
|
+
* @inner
|
|
176
|
+
* @private
|
|
177
|
+
* @param {string} projectPath
|
|
178
|
+
* @param {string} srcRel - the bundle's `src` entry from manifest.json
|
|
179
|
+
* @returns {?object}
|
|
180
|
+
*/
|
|
181
|
+
var readAuditSettings = function(projectPath, srcRel) {
|
|
182
|
+
try {
|
|
183
|
+
var settingsPath = _(projectPath + '/' + srcRel + '/config/settings.json', true);
|
|
184
|
+
if ( !fs.existsSync(settingsPath.toString()) ) return null;
|
|
185
|
+
var settings = requireJSON(settingsPath);
|
|
186
|
+
return ( settings && typeof(settings.audit) == 'object' && settings.audit ) ? settings.audit : null;
|
|
187
|
+
} catch (err) {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Resolves the signing key: `audit.chain.secret` (literal, or a
|
|
194
|
+
* `${secret:VAR}` placeholder resolved from `process.env[VAR]`), then
|
|
195
|
+
* `GINA_AUDIT_SECRET` through the framework env reader (direct
|
|
196
|
+
* `process.env` fallback for non-CLI contexts).
|
|
197
|
+
*
|
|
198
|
+
* @inner
|
|
199
|
+
* @private
|
|
200
|
+
* @returns {boolean}
|
|
201
|
+
*/
|
|
202
|
+
var resolveSecret = function() {
|
|
203
|
+
var projectPath = self.projects[self.projectName].path;
|
|
204
|
+
var srcEntry = ( self.bundlesByProject && self.bundlesByProject[self.projectName] )
|
|
205
|
+
? self.bundlesByProject[self.projectName][local.bundle]
|
|
206
|
+
: null;
|
|
207
|
+
var auditSettings = srcEntry ? readAuditSettings(projectPath, srcEntry.src) : null;
|
|
208
|
+
|
|
209
|
+
var secret = ( auditSettings && auditSettings.chain && typeof(auditSettings.chain.secret) == 'string' && auditSettings.chain.secret )
|
|
210
|
+
? auditSettings.chain.secret
|
|
211
|
+
: null;
|
|
212
|
+
if ( secret ) {
|
|
213
|
+
var m = secret.match(/^\$\{secret:([^}]+)\}$/);
|
|
214
|
+
if ( m ) {
|
|
215
|
+
secret = process.env[m[1]] || null;
|
|
216
|
+
if ( !secret ) {
|
|
217
|
+
console.error('`audit.chain.secret` names `${secret:'+ m[1] +'}` but `'+ m[1] +'` is not set in this shell. Export it, or set GINA_AUDIT_SECRET. (Note: `${secret:GINA_*}` names can never resolve — the CLI sweeps GINA_* out of process.env.)');
|
|
218
|
+
process.exit(2);
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if ( !secret ) {
|
|
224
|
+
secret = ( typeof(getEnvVar) == 'function' && getEnvVar('GINA_AUDIT_SECRET') ) || process.env.GINA_AUDIT_SECRET || null;
|
|
225
|
+
}
|
|
226
|
+
if ( !secret ) {
|
|
227
|
+
console.error('No signing key found — set `settings.json > audit.chain.secret` for [ '+ local.bundle +' ], or export GINA_AUDIT_SECRET.');
|
|
228
|
+
process.exit(2);
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
local.secret = secret;
|
|
232
|
+
return true;
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Runs `lib.audit.verifyChain` and emits the report. Output goes through
|
|
237
|
+
* `fs.writeSync(1, ...)` — `process.exit` right after an async stdout
|
|
238
|
+
* write truncates on a pipe (the connector:infer lesson), and a verify
|
|
239
|
+
* verdict must never be lost mid-pipe.
|
|
240
|
+
*
|
|
241
|
+
* @inner
|
|
242
|
+
* @private
|
|
243
|
+
*/
|
|
244
|
+
var run = function() {
|
|
245
|
+
if ( !fs.existsSync(local.file) ) {
|
|
246
|
+
console.error('No trail found at '+ local.file +' — nothing to verify. (A missing trail is NOT a pass.)');
|
|
247
|
+
process.exit(2);
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
var result = lib.audit.verifyChain(local.file, local.secret);
|
|
252
|
+
var jsonMode = ( self.params && self.params.format === 'json' );
|
|
253
|
+
var out = '';
|
|
254
|
+
|
|
255
|
+
if ( jsonMode ) {
|
|
256
|
+
result.file = local.file;
|
|
257
|
+
out = JSON.stringify(result) + '\n';
|
|
258
|
+
} else {
|
|
259
|
+
out = '[ audit:verify ] '+ local.file +'\n';
|
|
260
|
+
if ( result.ok ) {
|
|
261
|
+
out += ( result.records === 0 && result.unchained === 0 )
|
|
262
|
+
? 'OK — empty trail (0 records)\n'
|
|
263
|
+
: 'OK — chain intact: '+ result.records +' chained record(s), '+ result.unchained +' pre-chain record(s)\n';
|
|
264
|
+
} else {
|
|
265
|
+
out += 'FAIL — break at line '+ result.breakAt.line +': '+ result.breakAt.reason +'\n';
|
|
266
|
+
out += ' '+ result.records +' record(s) verified before the break. Remediation: investigate, then rotate the file aside to re-baseline the chain.\n';
|
|
267
|
+
}
|
|
268
|
+
for (var w = 0; w < result.warnings.length; ++w) {
|
|
269
|
+
out += ' warning — line '+ result.warnings[w].line +': '+ result.warnings[w].type +'\n';
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
fs.writeSync(1, out);
|
|
274
|
+
end(result.ok ? 0 : 1);
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Terminates the command: closes the client socket when live, then exits.
|
|
279
|
+
*
|
|
280
|
+
* @inner
|
|
281
|
+
* @private
|
|
282
|
+
* @param {number} code
|
|
283
|
+
*/
|
|
284
|
+
var end = function(code) {
|
|
285
|
+
if ( opt.client && typeof(opt.client.emit) == 'function' ) {
|
|
286
|
+
try { opt.client.emit('end'); } catch (err) { /* offline mode has no live socket */ }
|
|
287
|
+
}
|
|
288
|
+
process.exit(code);
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
init();
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
module.exports = Verify;
|
|
@@ -733,6 +733,17 @@ function Initialize(opt) {
|
|
|
733
733
|
setEnvVar('GINA_HOST_V4', localUserSettings.host_v4);
|
|
734
734
|
}
|
|
735
735
|
}
|
|
736
|
+
// #B161 — bind_host was the only connection key WITHOUT a disk -> env
|
|
737
|
+
// read-back here, so the regeneration below (dic + createFileFromDataSync)
|
|
738
|
+
// reverted a value written by `gina framework:set --bind-host=` to the
|
|
739
|
+
// default on the very next CLI invocation. Mirror the host_v4 block
|
|
740
|
+
// above so the persisted value survives. The `${` guard skips the
|
|
741
|
+
// unresolved template placeholder a fresh/broken install may carry.
|
|
742
|
+
if ( !getEnvVar('GINA_BIND_HOST') && targetObj.existsSync() ) {
|
|
743
|
+
if ( typeof(localUserSettings.bind_host) != 'undefined' && String(localUserSettings.bind_host).indexOf('${') < 0 ) {
|
|
744
|
+
setEnvVar('GINA_BIND_HOST', localUserSettings.bind_host);
|
|
745
|
+
}
|
|
746
|
+
}
|
|
736
747
|
if ( !getEnvVar('GINA_HOSTNAME') && targetObj.existsSync() ) {
|
|
737
748
|
if ( typeof(localUserSettings.hostname) != 'undefined' ) {
|
|
738
749
|
setEnvVar('GINA_HOSTNAME', localUserSettings.hostname);
|
|
@@ -9,6 +9,8 @@ var EventEmitter = require('events').EventEmitter;
|
|
|
9
9
|
var e = new EventEmitter();
|
|
10
10
|
|
|
11
11
|
var CmdHelper = require('./../helper');
|
|
12
|
+
// #B160 — control-plane dial-host resolution (pure, no framework globals)
|
|
13
|
+
var netLocality = require(__dirname + '/../../net-locality');
|
|
12
14
|
var console = lib.logger;
|
|
13
15
|
var LoggerHelper = require( _(GINA_FRAMEWORK_DIR + '/lib/logger/src/helper.js', true) );
|
|
14
16
|
/**
|
|
@@ -99,7 +101,9 @@ function Tail(opt, cmd) {
|
|
|
99
101
|
var tail = function(opt, cmd, isResuming) {
|
|
100
102
|
|
|
101
103
|
var port = opt.mqPort || GINA_MQ_PORT || 8125;
|
|
102
|
-
|
|
104
|
+
// #B160 — the MQ listener binds `bind_host` (loopback by default):
|
|
105
|
+
// dial it when host_v4 is one of this machine's own addresses.
|
|
106
|
+
var host = netLocality.resolveDialHost(opt.hostV4 || GINA_HOST_V4 || '127.0.0.1', getEnvVar('GINA_BIND_HOST'));
|
|
103
107
|
var clientOptions = {
|
|
104
108
|
host : host,
|
|
105
109
|
port : port,
|
|
@@ -173,6 +173,13 @@ function Lib() {
|
|
|
173
173
|
// per-request require() can never grow a dead-`children` tail (#B32-residual).
|
|
174
174
|
// It also keeps a security gate out of the dev-mode hot-reload path entirely.
|
|
175
175
|
authzGate : require('./authz-gate'),
|
|
176
|
+
// #COMPLY3 — authentication hardening primitives (password hashing +
|
|
177
|
+
// verification, password policy, lockout, TOTP). require() — NOT _require —
|
|
178
|
+
// for the authzGate reason above: a security primitive stays out of the
|
|
179
|
+
// dev-mode hot-reload path entirely. It also holds module-scope state the
|
|
180
|
+
// hot-reload would discard on every dev request: the scrypt concurrency
|
|
181
|
+
// gauge and its FIFO queue (a discarded queue strands in-flight logins).
|
|
182
|
+
authn : require('./authn'),
|
|
176
183
|
// #COMPLY2 — the audit-trail primitive behind self.audit() and the authz
|
|
177
184
|
// auto-events. Holds the boot-adopted store (an open O_APPEND fd for the
|
|
178
185
|
// default file backend), the serialized write queue and the written/dropped
|
|
@@ -198,6 +205,12 @@ function Lib() {
|
|
|
198
205
|
// readPidfile) for the bundle:list / service:list / bundle:status /
|
|
199
206
|
// project:status CLI handlers. Pure (same contract as routing-introspect).
|
|
200
207
|
cmdStatusFormat : _require('./cmd-status-format'),
|
|
208
|
+
// #B160 — control-plane dial-host resolution: is host_v4 one of this
|
|
209
|
+
// machine's own interfaces, and which address should a CLI-side client
|
|
210
|
+
// dial (`bind_host` vs `host_v4`)? Pure + stateless (only reads
|
|
211
|
+
// os.networkInterfaces()), so the dev-mode-hot-reloadable _require is
|
|
212
|
+
// safe — same contract as routing-introspect above.
|
|
213
|
+
netLocality : _require('./net-locality'),
|
|
201
214
|
// Single source of truth for the connector driver → npm package + semver
|
|
202
215
|
// range mapping. Consumed by the connector:* CLI handlers (connector:add
|
|
203
216
|
// install hint + connector:add --install range resolution + connector:list
|
|
@@ -12,6 +12,8 @@ var helpers = null;
|
|
|
12
12
|
|
|
13
13
|
// #M22 — merge-eval fallback removed (sister fix to lib/merge/src/main.js direct json_clone require)
|
|
14
14
|
var merge = require(__dirname + '/../../../../merge');
|
|
15
|
+
// #B160 — control-plane dial-host resolution (pure, no framework globals)
|
|
16
|
+
var netLocality = require(__dirname + '/../../../../net-locality');
|
|
15
17
|
|
|
16
18
|
function FileContainer(opt, loggers) {
|
|
17
19
|
var self = {
|
|
@@ -55,6 +57,9 @@ function FileContainer(opt, loggers) {
|
|
|
55
57
|
|
|
56
58
|
opt.mqPort = settings.mq_port;
|
|
57
59
|
opt.hostV4 = settings.host_v4;
|
|
60
|
+
// #B160 — carry the daemon's bind address for the dial-host
|
|
61
|
+
// resolution in onPayload().
|
|
62
|
+
opt.bindHost = settings.bind_host;
|
|
58
63
|
// ---------- EO - hack for early calls
|
|
59
64
|
|
|
60
65
|
// handle server not started yet or server exited
|
|
@@ -153,7 +158,12 @@ function FileContainer(opt, loggers) {
|
|
|
153
158
|
function onPayload(opt, isResuming) {
|
|
154
159
|
// console.debug('mqFile options: ', JSON.stringify(opt, null, 2));
|
|
155
160
|
var port = opt.mqPort || getEnvVar('GINA_MQ_PORT') || 8125;// jshint ignore:line
|
|
156
|
-
|
|
161
|
+
// #B160 — the MQ listener binds `bind_host` (loopback by default):
|
|
162
|
+
// dial it when host_v4 is one of this machine's own addresses.
|
|
163
|
+
var host = netLocality.resolveDialHost(
|
|
164
|
+
opt.hostV4 || getEnvVar('GINA_HOST_V4') || '127.0.0.1',
|
|
165
|
+
opt.bindHost || getEnvVar('GINA_BIND_HOST')
|
|
166
|
+
);// jshint ignore:line
|
|
157
167
|
var clientOptions = {
|
|
158
168
|
host : host,
|
|
159
169
|
port : port,
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
// Imports
|
|
3
3
|
const net = require('net');
|
|
4
|
+
// #B160 — control-plane dial-host resolution (pure, no framework globals)
|
|
5
|
+
var netLocality = require(__dirname + '/../../../../net-locality');
|
|
4
6
|
// var fs = require('fs');
|
|
5
7
|
// var util = require('util');
|
|
6
8
|
|
|
@@ -42,6 +44,9 @@ function MQSpeaker(opt, loggers, cb) {
|
|
|
42
44
|
var _mqPort = ~~settings.mq_port;
|
|
43
45
|
opt.mqPort = (_mqPort > 0 && _mqPort < 65536) ? _mqPort : 8125;
|
|
44
46
|
opt.hostV4 = settings.host_v4;
|
|
47
|
+
// #B160 — carry the daemon's bind address so startMQSpeaker() can
|
|
48
|
+
// dial locally when host_v4 names one of this machine's interfaces.
|
|
49
|
+
opt.bindHost = settings.bind_host;
|
|
45
50
|
// ---------- EO - hack for early calls
|
|
46
51
|
|
|
47
52
|
return startMQSpeaker(opt, cb);
|
|
@@ -50,7 +55,9 @@ function MQSpeaker(opt, loggers, cb) {
|
|
|
50
55
|
|
|
51
56
|
function startMQSpeaker(opt, cb) {
|
|
52
57
|
var port = opt.mqPort || 8125;// jshint ignore:line
|
|
53
|
-
|
|
58
|
+
// #B160 — the MQ listener binds `bind_host` (loopback by default):
|
|
59
|
+
// dial it when host_v4 is one of this machine's own addresses.
|
|
60
|
+
var host = netLocality.resolveDialHost(opt.hostV4 || '127.0.0.1', opt.bindHost);// jshint ignore:line
|
|
54
61
|
var clientOptions = {
|
|
55
62
|
host : host,
|
|
56
63
|
port : port,
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "gina-lib-net-locality",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Control-plane dial-host resolution: decides whether `host_v4` names one of this machine's own interfaces and which address a CLI-side client should dial (`bind_host` vs `host_v4`).",
|
|
5
|
+
"authors": [
|
|
6
|
+
{
|
|
7
|
+
"name": "Martin-Luther ETOUMAN",
|
|
8
|
+
"email": "contact@gina.io"
|
|
9
|
+
}
|
|
10
|
+
],
|
|
11
|
+
"copyright": "Copyright (c) 2009-2026 Rhinostone <contact@gina.io>",
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": ">=0.10.22"
|
|
14
|
+
},
|
|
15
|
+
"main": "src/main",
|
|
16
|
+
"license": "MIT"
|
|
17
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gina — net-locality helpers (control-plane dial-host resolution).
|
|
3
|
+
*
|
|
4
|
+
* The framework daemon binds its control sockets — the command socket (8124)
|
|
5
|
+
* and the MQ listener (8125) — to `bind_host`, loopback by default, while
|
|
6
|
+
* `host_v4` is the address EXTERNAL clients use to reach this machine. The
|
|
7
|
+
* CLI-side clients (command socket dial, MQ speaker, MQ file container,
|
|
8
|
+
* `gina tail`) historically dialled `host_v4` — so whenever `host_v4` was set
|
|
9
|
+
* to a non-loopback address of this very machine (the common containerized
|
|
10
|
+
* shape, where it carries the container/LAN IP so siblings can reach the
|
|
11
|
+
* bundles), the co-located client dialled an address the daemon does not
|
|
12
|
+
* bind, and the control plane was unreachable from its own host.
|
|
13
|
+
*
|
|
14
|
+
* The resolution deliberately stays on the DIAL side: when `host_v4` names
|
|
15
|
+
* one of this machine's own interfaces, the daemon being dialled is local,
|
|
16
|
+
* so the client dials the address the daemon actually binds. The BIND side
|
|
17
|
+
* stays untouched — widening it remains a deliberate opt-in.
|
|
18
|
+
*
|
|
19
|
+
* Pure module: no framework globals, no state. `os.networkInterfaces()` is
|
|
20
|
+
* the only system dependency and is injectable for deterministic tests.
|
|
21
|
+
*
|
|
22
|
+
* @module gina/lib/net-locality
|
|
23
|
+
*/
|
|
24
|
+
'use strict';
|
|
25
|
+
|
|
26
|
+
var os = require('os');
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Normalizes an address for comparison: trims, lowercases, strips an
|
|
30
|
+
* IPv4-mapped IPv6 prefix (`::ffff:1.2.3.4` → `1.2.3.4`) and an IPv6 zone
|
|
31
|
+
* suffix (`fe80::1%en0` → `fe80::1`).
|
|
32
|
+
*
|
|
33
|
+
* @inner
|
|
34
|
+
* @private
|
|
35
|
+
* @param {string} host - Raw host string
|
|
36
|
+
* @returns {string} Normalized host
|
|
37
|
+
*/
|
|
38
|
+
var normalizeHost = function(host) {
|
|
39
|
+
var h = String(host).trim().toLowerCase();
|
|
40
|
+
if (h.indexOf('::ffff:') === 0 && h.indexOf('.') > -1) {
|
|
41
|
+
h = h.substring(7);
|
|
42
|
+
}
|
|
43
|
+
var zone = h.indexOf('%');
|
|
44
|
+
if (zone > -1) {
|
|
45
|
+
h = h.substring(0, zone);
|
|
46
|
+
}
|
|
47
|
+
return h;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* True when the (normalized) host is a loopback name or address:
|
|
52
|
+
* `localhost`, anything in `127.0.0.0/8`, or `::1`.
|
|
53
|
+
*
|
|
54
|
+
* @inner
|
|
55
|
+
* @private
|
|
56
|
+
* @param {string} h - Normalized host (see `normalizeHost`)
|
|
57
|
+
* @returns {boolean}
|
|
58
|
+
*/
|
|
59
|
+
var isLoopback = function(h) {
|
|
60
|
+
return ( h === 'localhost' || h === '::1' || /^127\./.test(h) );
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* True when the (normalized) host is a wildcard bind address (`0.0.0.0` or
|
|
65
|
+
* `::`) — an address that can be listened on but never meaningfully dialled.
|
|
66
|
+
*
|
|
67
|
+
* @inner
|
|
68
|
+
* @private
|
|
69
|
+
* @param {string} h - Normalized host (see `normalizeHost`)
|
|
70
|
+
* @returns {boolean}
|
|
71
|
+
*/
|
|
72
|
+
var isWildcard = function(h) {
|
|
73
|
+
return ( h === '0.0.0.0' || h === '::' );
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Tells whether `host` is an address assigned to one of this machine's own
|
|
78
|
+
* network interfaces (exact match after normalization). Loopback always
|
|
79
|
+
* qualifies. A hostname never matches — only literal addresses are compared,
|
|
80
|
+
* so `my-host.local` falls through to `false` by design. Any enumeration
|
|
81
|
+
* failure also returns `false` (fail-safe: callers keep today's unmodified
|
|
82
|
+
* dial behaviour).
|
|
83
|
+
*
|
|
84
|
+
* @param {string} host - Literal IP address to test
|
|
85
|
+
* @param {object} [interfaces] - `os.networkInterfaces()`-shaped map; used by
|
|
86
|
+
* tests for determinism. Defaults to the live `os.networkInterfaces()`.
|
|
87
|
+
* @returns {boolean} True when the address belongs to this machine
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* isLocalAddress('127.0.0.1'); // true
|
|
91
|
+
* isLocalAddress('192.0.2.1'); // false (TEST-NET, not a local iface)
|
|
92
|
+
* isLocalAddress('my-host.local'); // false (hostname, not an address)
|
|
93
|
+
*/
|
|
94
|
+
var isLocalAddress = function(host, interfaces) {
|
|
95
|
+
if ( typeof(host) !== 'string' || host === '' ) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
var h = normalizeHost(host);
|
|
99
|
+
if ( isLoopback(h) ) {
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
var ifaces = interfaces || os.networkInterfaces();
|
|
104
|
+
for (var name in ifaces) {
|
|
105
|
+
var addrs = ifaces[name];
|
|
106
|
+
if ( !Array.isArray(addrs) ) {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
for (var i = 0, len = addrs.length; i < len; i++) {
|
|
110
|
+
var a = addrs[i] && addrs[i].address;
|
|
111
|
+
if ( typeof(a) === 'string' && normalizeHost(a) === h ) {
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
} catch (err) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
return false;
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Resolves the host a control-plane CLIENT should dial.
|
|
124
|
+
*
|
|
125
|
+
* Rules, in order:
|
|
126
|
+
* 1. No usable `hostV4` → `127.0.0.1` (the historical fallback).
|
|
127
|
+
* 2. `hostV4` is loopback → returned unchanged (already dial-safe).
|
|
128
|
+
* 3. `hostV4` does NOT name one of this machine's interfaces (a hostname, a
|
|
129
|
+
* genuinely remote address, or interface enumeration failed) → returned
|
|
130
|
+
* unchanged: remote administration keeps working exactly as before.
|
|
131
|
+
* 4. `hostV4` names a local interface → the daemon is local, so dial what it
|
|
132
|
+
* binds: `bindHost` when it is a concrete non-wildcard address,
|
|
133
|
+
* `127.0.0.1` otherwise (a wildcard bind includes loopback).
|
|
134
|
+
*
|
|
135
|
+
* @param {string} hostV4 - The resolved client-facing host (`host_v4`)
|
|
136
|
+
* @param {string} [bindHost] - The daemon's `bind_host`, when known
|
|
137
|
+
* @param {object} [interfaces] - `os.networkInterfaces()`-shaped map; used by
|
|
138
|
+
* tests for determinism. Defaults to the live `os.networkInterfaces()`.
|
|
139
|
+
* @returns {string} The host to dial
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* // co-located daemon, LAN-facing host_v4 (the containerized shape)
|
|
143
|
+
* resolveDialHost('192.168.1.20', '127.0.0.1'); // '127.0.0.1' (when local)
|
|
144
|
+
* // operator widened the bind to a concrete address
|
|
145
|
+
* resolveDialHost('192.168.1.20', '192.168.1.20'); // '192.168.1.20'
|
|
146
|
+
* // wildcard bind still dials loopback
|
|
147
|
+
* resolveDialHost('192.168.1.20', '0.0.0.0'); // '127.0.0.1' (when local)
|
|
148
|
+
* // remote daemon: unchanged
|
|
149
|
+
* resolveDialHost('203.0.113.7', '127.0.0.1'); // '203.0.113.7'
|
|
150
|
+
*/
|
|
151
|
+
var resolveDialHost = function(hostV4, bindHost, interfaces) {
|
|
152
|
+
if ( typeof(hostV4) !== 'string' || hostV4 === '' ) {
|
|
153
|
+
return '127.0.0.1';
|
|
154
|
+
}
|
|
155
|
+
var h = normalizeHost(hostV4);
|
|
156
|
+
if ( isLoopback(h) ) {
|
|
157
|
+
return hostV4;
|
|
158
|
+
}
|
|
159
|
+
if ( !isLocalAddress(h, interfaces) ) {
|
|
160
|
+
return hostV4;
|
|
161
|
+
}
|
|
162
|
+
if ( typeof(bindHost) === 'string' && bindHost !== '' ) {
|
|
163
|
+
var b = normalizeHost(bindHost);
|
|
164
|
+
if ( !isWildcard(b) ) {
|
|
165
|
+
return bindHost;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return '127.0.0.1';
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
module.exports = {
|
|
172
|
+
isLocalAddress : isLocalAddress,
|
|
173
|
+
resolveDialHost : resolveDialHost
|
|
174
|
+
};
|
|
@@ -356,8 +356,21 @@ function NunjucksFilters(conf) {
|
|
|
356
356
|
// latch/global, byte-identical.
|
|
357
357
|
url.isProxyHost = isProxyHost;
|
|
358
358
|
if (isProxyHost) {
|
|
359
|
+
// #B168 — hold getRoute's own resolution: with no per-request slot and
|
|
360
|
+
// no worker global, the override below must not replace a usable
|
|
361
|
+
// envConf-derived value with an unset one
|
|
362
|
+
var _routeProxyHostname = url.proxy_hostname;
|
|
359
363
|
url.proxy_hostname = (isGFFCtx) ? window.location.protocol +'//'+ document.location.hostname : ( (ctx.req && ctx.req._ginaProxyHostname) || process.gina.PROXY_HOSTNAME );
|
|
360
364
|
url.proxy_host = url.hostname.replace(/(https|http)\:\/\//, '');
|
|
365
|
+
if ( !url.proxy_hostname ) {
|
|
366
|
+
url.proxy_hostname = _routeProxyHostname;
|
|
367
|
+
if ( !url.proxy_hostname ) {
|
|
368
|
+
// #B168 — nothing resolvable anywhere: degrade to the route's
|
|
369
|
+
// direct hostname; toUrl() keys on isProxyHost, so leaving it
|
|
370
|
+
// true would stringify the unset value into the emitted URL
|
|
371
|
+
url.isProxyHost = false;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
361
374
|
}
|
|
362
375
|
url = url.toUrl();
|
|
363
376
|
|