gina 0.7.0 → 0.7.1
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 +39 -0
- package/README.md +45 -61
- package/ROADMAP.md +3 -2
- package/bin/cli +5 -2
- package/bin/gina +10 -25
- package/framework/v0.7.1/VERSION +1 -0
- package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +21 -8
- package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/js/gina.js +8 -11
- package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +160 -160
- package/framework/v0.7.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.7.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.7.0 → v0.7.1}/core/config.js +10 -1
- package/framework/{v0.7.0 → v0.7.1}/core/controller/controller.js +67 -15
- package/framework/{v0.7.0 → v0.7.1}/core/router.js +68 -8
- package/framework/{v0.7.0 → v0.7.1}/core/server.isaac.js +183 -45
- package/framework/{v0.7.0 → v0.7.1}/core/server.js +173 -55
- package/framework/{v0.7.0 → v0.7.1}/helpers/context.js +93 -32
- package/framework/{v0.7.0 → v0.7.1}/helpers/path.js +61 -43
- package/framework/{v0.7.0 → v0.7.1}/helpers/task.js +47 -35
- package/framework/v0.7.1/lib/admin/src/main.js +451 -0
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/add.js +24 -0
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/copy.js +14 -0
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/help.txt +11 -0
- package/framework/v0.7.1/lib/cmd/bundle/inc/boot-lines.js +263 -0
- package/framework/v0.7.1/lib/cmd/bundle/inc/name.js +70 -0
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/remove.js +8 -2
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/rename.js +14 -0
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/start.js +47 -12
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/stop.js +64 -8
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/env/remove.js +7 -2
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/add.js +37 -2
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/build.js +20 -5
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/dot.js +10 -4
- package/framework/v0.7.1/lib/cmd/framework/inc/ps-titles.js +113 -0
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/init.js +7 -2
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/link.js +10 -2
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/open.js +30 -6
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/restart.js +24 -69
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/start.js +6 -24
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/status.js +44 -25
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/tail.js +1 -1
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/helper.js +56 -13
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/inspector/help.txt +2 -1
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/inspector/open.js +93 -30
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/minion/kill.js +52 -25
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/port/list.js +15 -6
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/port/reset.js +11 -2
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/project/add.js +50 -1
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/project/help.txt +8 -8
- package/framework/v0.7.1/lib/cmd/project/inc/name.js +71 -0
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/project/remove.js +5 -1
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/project/rename.js +12 -0
- package/framework/v0.7.1/lib/cmd/project/restart.js +126 -0
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/project/restore.js +19 -0
- package/framework/v0.7.1/lib/cmd/project/start.js +125 -0
- package/framework/v0.7.1/lib/cmd/project/stop.js +98 -0
- package/framework/{v0.7.0 → v0.7.1}/lib/cmd/protocol/set.js +7 -2
- package/framework/{v0.7.0 → v0.7.1}/lib/inherits/src/main.js +8 -11
- package/framework/{v0.7.0 → v0.7.1}/lib/maintenance/src/main.js +3 -2
- package/framework/{v0.7.0 → v0.7.1}/lib/metrics/src/main.js +30 -6
- package/framework/{v0.7.0 → v0.7.1}/lib/shell.js +58 -25
- package/framework/{v0.7.0 → v0.7.1}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +13 -13
- package/package.json +4 -4
- package/schema/app.json +3 -3
- package/script/post_install.js +20 -2
- package/script/pre_install.js +31 -6
- package/utils/helper.js +21 -9
- package/framework/v0.7.0/VERSION +0 -1
- package/framework/v0.7.0/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.7.0/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/v0.7.0/lib/admin/src/main.js +0 -217
- package/framework/v0.7.0/lib/cmd/project/restart.js +0 -85
- package/framework/v0.7.0/lib/cmd/project/start.js +0 -85
- package/framework/v0.7.0/lib/cmd/project/stop.js +0 -66
- /package/framework/{v0.7.0 → v0.7.1}/AUTHORS +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/LICENSE +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/html/static.html +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/config.requirements-anchor.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/couchbase/lib/storage-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/duckdb/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/duckdb/lib/connector.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/param-redact.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/redis/lib/kv-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/settle-once.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/sqlite/lib/kv-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/content.encoding +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/controller/controller.render-xml.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/controller/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/controller/inline-script.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/dev/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/gna.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/locales/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/locales/currency.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/locales/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/mime.types +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/model/entity.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/model/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/model/template/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/server.express.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/server.isaac.rapid-reset.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/server.route-candidates.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/status.codes +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/_gitignore +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/conf/env.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/conf/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/helpers/console.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/helpers/data/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/helpers/data/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/helpers/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/helpers/json/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/helpers/json/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/helpers/prototypes.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/helpers/text.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/admin/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/archiver/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/archiver/build.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/archiver/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/async/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/async/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/audit/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/audit-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/authn/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/authn/src/lockout.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/authn/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/authn/src/totp.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cache/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cache/build.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cache/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/audit/arguments.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/audit/help.txt +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/audit/verify.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/env/inc/name.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/scope/inc/name.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/storage/arguments.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/storage/gc.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/storage/help.txt +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/storage/stats.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/storage/verify.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/collection/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/collection/build.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/collection/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/conf-view/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/conf-view/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/config.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cron/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cron/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/domain/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/domain/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/dto/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/duration/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/duration/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/generator/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/i18n/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/idempotency/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/idempotency/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/image-build/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/inherits/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/inherits/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/instrument/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/job/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/job/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/job-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/kv/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/kv/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/kv-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/loading-state/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/loading-state/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/logger/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/logger/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/logger/src/redact.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/maintenance/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/math/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/merge/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/merge/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/message-validator/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/message-validator/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/metrics/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/model.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/money/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/money/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/multipart/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/multipart/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/net-locality/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/net-locality/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/priority/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/priority/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/proc.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/push/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/push/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/rate-limit/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/rate-limit/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/routing/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/routing/build.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/routing/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/secrets/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/secrets/src/backends/exec.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/secrets/src/backends/file.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/secrets/src/declaration.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/secrets/src/env-file.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/secrets/src/sources.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/security-headers-emitter/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/security-headers-emitter/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/session-lifetime/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/session-lifetime/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/session-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/sqlite-driver.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/sri/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/sri/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/state.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/storage/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/storage/src/local-cas.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/storage/src/local-stream.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/storage/src/local.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/storage/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/storage/src/meta-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/storage/src/s3.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/storage/src/util.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/storage-store.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/url/README.md +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/url/index.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/url/routing.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/uuid/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/validator.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/watcher/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.7.0 → v0.7.1}/lib/ws-session/src/main.js +0 -0
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the gina package.
|
|
3
|
+
* Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
|
|
4
|
+
*
|
|
5
|
+
* For the full copyright and license information, please view the LICENSE
|
|
6
|
+
* file that was distributed with this source code.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @module gina/lib/admin
|
|
11
|
+
*
|
|
12
|
+
* Admin /_gina/* IP-allowlist gate (#S7). Single source of truth for the
|
|
13
|
+
* access check on the admin-grade /_gina/* endpoints (`/_gina/info`,
|
|
14
|
+
* `/_gina/cache/stats`, `/_gina/cache/clear`, `/_gina/storage/*`,
|
|
15
|
+
* `/_gina/release/*`, `/_gina/maintenance`; `/_gina/metrics` has its own list
|
|
16
|
+
* in lib/metrics, which applies the same #B709 rule). Both server engines
|
|
17
|
+
* (`server.js` and `server.isaac.js`) previously carried a byte-identical copy
|
|
18
|
+
* of this helper; this module is now the single source and both engines call
|
|
19
|
+
* `lib.admin.isClientAllowed(req)`.
|
|
20
|
+
*
|
|
21
|
+
* The allowlist is resolved from `process.gina._adminAllowList`, which
|
|
22
|
+
* `gna.js` populates at bundle init from `app.json` `admin.allowFrom`
|
|
23
|
+
* (defaults to loopback `['127.0.0.1', '::1']`). Sibling of
|
|
24
|
+
* `lib.metrics.isClientAllowed` on a separate axis — admin endpoints expose
|
|
25
|
+
* process state (memory, uptime, HTTP/2 session counters, cache contents)
|
|
26
|
+
* and are gated separately from Prometheus scrapes.
|
|
27
|
+
*
|
|
28
|
+
* Also the home of the cross-origin WRITE guard (#B384) that fronts the same
|
|
29
|
+
* family. The two are complementary and neither subsumes the other: the IP
|
|
30
|
+
* allowlist answers "may this address talk to admin endpoints at all", while
|
|
31
|
+
* {@link isCrossOriginWrite} answers "did this state-changing request actually
|
|
32
|
+
* originate from the operator, or from a page that merely borrowed their
|
|
33
|
+
* browser's ambient IP". Kept as a SEPARATE function rather than folded into
|
|
34
|
+
* `isClientAllowed` so the six admin GET endpoints keep their existing
|
|
35
|
+
* semantics and the name never over-promises.
|
|
36
|
+
*
|
|
37
|
+
* #B709 — a loopback caller is admitted only when it connects DIRECTLY. The
|
|
38
|
+
* default list is loopback, and loopback is also the address a reverse proxy on
|
|
39
|
+
* the bundle's own host connects from, so an address-only gate admitted every
|
|
40
|
+
* client such a proxy forwarded. {@link isClientAllowed} therefore refuses a
|
|
41
|
+
* loopback caller whose request carries a proxy signal — the classifier is
|
|
42
|
+
* lib/maintenance's `isProxiedRequest`, the one the maintenance bypass list
|
|
43
|
+
* already uses, so the two gates can never disagree about what "proxied" means.
|
|
44
|
+
* The engines take that classification once per `/_gina/*` request from the
|
|
45
|
+
* pristine headers ({@link stampProxied}): isaac rewrites an h1 `Host` port-less
|
|
46
|
+
* before handing the request to `server.js`, and a live read after that rewrite
|
|
47
|
+
* would misclassify every direct call. The engines also match the family on
|
|
48
|
+
* {@link controlPath} rather than on the raw url, so a nested endpoint path, the
|
|
49
|
+
* endpoint path in a query string, another letter case or an empty leading
|
|
50
|
+
* segment never reaches a handler.
|
|
51
|
+
*
|
|
52
|
+
* Registered as a PLAIN `require` in `lib/index.js` (not `_require`): no
|
|
53
|
+
* instance/singleton state worth hot-reloading — same #B32-residual precedent as
|
|
54
|
+
* merge / uuid / Collection. Its one piece of module state is the once-per-process
|
|
55
|
+
* flag of the #B709 refusal warning; a reload only re-arms that warning.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* // from an engine handler (lib is the framework lib registry)
|
|
59
|
+
* if (!lib.admin.isClientAllowed(request)) {
|
|
60
|
+
* response.statusCode = 403;
|
|
61
|
+
* return response.end(JSON.stringify({ error: 'forbidden' }));
|
|
62
|
+
* }
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The shared proxy classifier (#B709). Relative require: lib/admin is loaded by
|
|
67
|
+
* plain `require` from `lib/index.js` and directly by the tests, never through the
|
|
68
|
+
* `lib/…` bare-module path.
|
|
69
|
+
* @inner
|
|
70
|
+
*/
|
|
71
|
+
var maintenance = require('../../maintenance/src/main');
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Default allowlist used when `admin.allowFrom` is unset — loopback only.
|
|
75
|
+
* @constant {string[]}
|
|
76
|
+
*/
|
|
77
|
+
var DEFAULT_ALLOW_LIST = ['127.0.0.1', '::1'];
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Name of the per-request stamp holding the proxy classification of a
|
|
81
|
+
* `/_gina/*` request, taken from its pristine headers (#B709).
|
|
82
|
+
* @constant {string}
|
|
83
|
+
*/
|
|
84
|
+
var PROXIED_STAMP = '_ginaAdminProxied';
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Which gates have already logged a relayed-loopback refusal in this process,
|
|
88
|
+
* keyed by the list they read (`admin.allowFrom`, `metrics.allowFrom`).
|
|
89
|
+
* @inner
|
|
90
|
+
* @type {Object.<string, boolean>}
|
|
91
|
+
*/
|
|
92
|
+
var relayedWarned = Object.create(null);
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Decide whether a request's client IP is in an explicit allowlist. Inner
|
|
96
|
+
* seam exposed for branch testing without mutating `process.gina` state.
|
|
97
|
+
*
|
|
98
|
+
* Reads the client IP from `req.socket.remoteAddress` only — never trusts
|
|
99
|
+
* `X-Forwarded-For` (reverse proxies could spoof it). Normalises
|
|
100
|
+
* `::ffff:IPv4` (IPv6-mapped IPv4) → `IPv4` so listing `127.0.0.1` matches
|
|
101
|
+
* both forms. An empty list (`[]`) denies everyone (explicit lockdown).
|
|
102
|
+
*
|
|
103
|
+
* @inner
|
|
104
|
+
* @param {http.IncomingMessage|http2.Http2ServerRequest} req
|
|
105
|
+
* @param {string[]} list the allowlist to test against
|
|
106
|
+
* @returns {boolean} true if the client IP is in `list`
|
|
107
|
+
* @example
|
|
108
|
+
* _isAllowedWithList({ socket: { remoteAddress: '127.0.0.1' } }, ['127.0.0.1']); // true
|
|
109
|
+
* _isAllowedWithList({ socket: { remoteAddress: '10.0.0.1' } }, []); // false
|
|
110
|
+
*/
|
|
111
|
+
function _isAllowedWithList(req, list) {
|
|
112
|
+
if (list.length === 0) return false;
|
|
113
|
+
var ip = (req.socket && req.socket.remoteAddress)
|
|
114
|
+
|| (req.connection && req.connection.remoteAddress)
|
|
115
|
+
|| '';
|
|
116
|
+
if (ip.indexOf('::ffff:') === 0) ip = ip.slice(7);
|
|
117
|
+
return list.indexOf(ip) >= 0;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* IP-allowlist check for the admin-grade /_gina/* endpoints.
|
|
122
|
+
*
|
|
123
|
+
* Resolves the allowlist from `process.gina._adminAllowList` (set by
|
|
124
|
+
* `gna.js` from `app.json` admin.allowFrom), falling back to loopback-only
|
|
125
|
+
* when the global is missing (init not yet fired — the safest default).
|
|
126
|
+
*
|
|
127
|
+
* #B709 — a caller admitted by the list is still refused when it is a loopback
|
|
128
|
+
* address and its request carries a proxy signal ({@link isRelayedLoopback}): a
|
|
129
|
+
* reverse proxy on the bundle's own host connects from loopback, so without this
|
|
130
|
+
* the default list admitted every client that proxy forwarded. An explicitly
|
|
131
|
+
* listed NON-loopback address keeps admitting relayed requests — listing a proxy
|
|
132
|
+
* on another host is the documented opt-in. The first such refusal is logged
|
|
133
|
+
* once per process.
|
|
134
|
+
*
|
|
135
|
+
* @param {http.IncomingMessage|http2.Http2ServerRequest} req
|
|
136
|
+
* @returns {boolean} true if the client IP is allowed, false otherwise
|
|
137
|
+
* @example
|
|
138
|
+
* if (!lib.admin.isClientAllowed(request)) { return self.throwError(403); }
|
|
139
|
+
*/
|
|
140
|
+
function isClientAllowed(req) {
|
|
141
|
+
var list = (typeof process.gina === 'object' && process.gina && Array.isArray(process.gina._adminAllowList))
|
|
142
|
+
? process.gina._adminAllowList
|
|
143
|
+
: DEFAULT_ALLOW_LIST;
|
|
144
|
+
if ( !_isAllowedWithList(req, list) ) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
if ( isRelayedLoopback(req) ) {
|
|
148
|
+
warnRelayedOnce(req, 'admin.allowFrom');
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Whether an address is a loopback address: `::1`, or any address of the IPv4
|
|
156
|
+
* loopback block `127.0.0.0/8`, in its plain or IPv6-mapped (`::ffff:`) form.
|
|
157
|
+
*
|
|
158
|
+
* @inner
|
|
159
|
+
* @param {string} ip - a socket's remote address
|
|
160
|
+
* @returns {boolean}
|
|
161
|
+
* @example
|
|
162
|
+
* _isLoopbackAddress('127.0.0.1'); // true
|
|
163
|
+
* _isLoopbackAddress('::ffff:127.0.0.2'); // true
|
|
164
|
+
* _isLoopbackAddress('10.0.0.5'); // false
|
|
165
|
+
*/
|
|
166
|
+
function _isLoopbackAddress(ip) {
|
|
167
|
+
if ( typeof(ip) != 'string' || ip === '' ) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
if ( ip.indexOf('::ffff:') === 0 ) {
|
|
171
|
+
ip = ip.slice(7);
|
|
172
|
+
}
|
|
173
|
+
return ( ip === '::1' || /^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(ip) );
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Classify a request as proxied from its headers as they are NOW — lib/maintenance's
|
|
178
|
+
* `isProxiedRequest`, honouring `server.proxy.requireForwardedHeaders` (#B152). Fails
|
|
179
|
+
* toward "proxied" for a malformed request.
|
|
180
|
+
*
|
|
181
|
+
* @inner
|
|
182
|
+
* @param {object} req
|
|
183
|
+
* @returns {boolean}
|
|
184
|
+
*/
|
|
185
|
+
function _classifyProxied(req) {
|
|
186
|
+
var requireForwarded = ( typeof(process.gina) == 'object' && process.gina !== null
|
|
187
|
+
&& process.gina._proxyRequireForwarded === true );
|
|
188
|
+
return maintenance.isProxiedRequest(req, requireForwarded);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Take the proxy classification of a request ONCE, from its headers as they are
|
|
193
|
+
* at the call, and keep it on the request (`request._ginaAdminProxied`). The
|
|
194
|
+
* engines call it at the top of their request handling for every `/_gina/*`
|
|
195
|
+
* url, before anything rewrites a header: isaac rewrites an h1 `Host`
|
|
196
|
+
* port-less before it hands the request to `server.js`, and the port-less-Host
|
|
197
|
+
* heuristic would then read every direct caller of a `server.js`-only handler
|
|
198
|
+
* (`/_gina/storage/*`) as proxied. First-seer: a later call returns the stamp
|
|
199
|
+
* already there.
|
|
200
|
+
*
|
|
201
|
+
* @param {http.IncomingMessage|http2.Http2ServerRequest} req
|
|
202
|
+
* @returns {boolean} the stamped classification (`true` for a malformed request)
|
|
203
|
+
* @example
|
|
204
|
+
* if ( request.url.indexOf('/_gina/') > -1 ) { lib.admin.stampProxied(request); }
|
|
205
|
+
*/
|
|
206
|
+
function stampProxied(req) {
|
|
207
|
+
if ( typeof(req) != 'object' || req === null ) {
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
if ( typeof(req[PROXIED_STAMP]) != 'boolean' ) {
|
|
211
|
+
req[PROXIED_STAMP] = _classifyProxied(req);
|
|
212
|
+
}
|
|
213
|
+
return req[PROXIED_STAMP];
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Whether a request is a loopback caller relayed by a proxy on this host: its
|
|
218
|
+
* socket address is loopback and it carries a proxy signal — the stamp when the
|
|
219
|
+
* engine took one ({@link stampProxied}), else a live classification (Express,
|
|
220
|
+
* tests, req-less callers). The admin and metrics gates refuse such a request.
|
|
221
|
+
*
|
|
222
|
+
* A proxy that forwards `Host` with its port and adds no forwarding header is
|
|
223
|
+
* byte-identical to a direct client and is NOT detected — the residual every IP
|
|
224
|
+
* allowlist shares; the docs say to call the bundle's port directly and to block
|
|
225
|
+
* `/_gina/` at the edge.
|
|
226
|
+
*
|
|
227
|
+
* @param {http.IncomingMessage|http2.Http2ServerRequest} req
|
|
228
|
+
* @returns {boolean}
|
|
229
|
+
* @example
|
|
230
|
+
* isRelayedLoopback({ socket: { remoteAddress: '127.0.0.1' }, headers: { host: 'example.com' } }); // true
|
|
231
|
+
* isRelayedLoopback({ socket: { remoteAddress: '127.0.0.1' }, headers: { host: '127.0.0.1:3100' } }); // false
|
|
232
|
+
* isRelayedLoopback({ socket: { remoteAddress: '10.0.0.5' }, headers: { 'x-forwarded-for': '1.2.3.4' } }); // false
|
|
233
|
+
*/
|
|
234
|
+
function isRelayedLoopback(req) {
|
|
235
|
+
if ( typeof(req) != 'object' || req === null ) {
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
var ip = (req.socket && req.socket.remoteAddress)
|
|
239
|
+
|| (req.connection && req.connection.remoteAddress)
|
|
240
|
+
|| '';
|
|
241
|
+
if ( !_isLoopbackAddress(ip) ) {
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
if ( typeof(req[PROXIED_STAMP]) == 'boolean' ) {
|
|
245
|
+
return req[PROXIED_STAMP];
|
|
246
|
+
}
|
|
247
|
+
return _classifyProxied(req);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Log the first relayed-loopback refusal of a gate, once per process — never per
|
|
252
|
+
* request, never at boot (the loopback default applies to every bundle, so a boot
|
|
253
|
+
* line about it would be noise; the refusal is the actionable moment). Names the
|
|
254
|
+
* path without its query.
|
|
255
|
+
*
|
|
256
|
+
* @param {object} req - the refused request
|
|
257
|
+
* @param {string} axis - the list the gate reads: `admin.allowFrom` or `metrics.allowFrom`
|
|
258
|
+
* @returns {void}
|
|
259
|
+
* @example
|
|
260
|
+
* if ( allowed && lib.admin.isRelayedLoopback(req) ) { lib.admin.warnRelayedOnce(req, 'metrics.allowFrom'); allowed = false; }
|
|
261
|
+
*/
|
|
262
|
+
function warnRelayedOnce(req, axis) {
|
|
263
|
+
if ( relayedWarned[axis] === true ) {
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
relayedWarned[axis] = true;
|
|
267
|
+
var url = ( req && typeof(req.originalUrl) == 'string' ) ? req.originalUrl
|
|
268
|
+
: ( req && typeof(req.url) == 'string' ) ? req.url
|
|
269
|
+
: '';
|
|
270
|
+
console.warn('[admin] refused a request to `' + url.split('?')[0] + '` relayed by a proxy on this host: '
|
|
271
|
+
+ '`app.json > ' + axis + '` admits a loopback caller only when it connects directly. '
|
|
272
|
+
+ 'Call the bundle\'s own port from the host or the pod, or list the address of a proxy running on another host. '
|
|
273
|
+
+ 'See https://gina.io/docs/reference/app#admin — logged once per process.');
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Test seam: re-arm the once-per-process refusal warnings.
|
|
278
|
+
* @inner
|
|
279
|
+
* @returns {void}
|
|
280
|
+
*/
|
|
281
|
+
function _resetRelayedWarnings() {
|
|
282
|
+
relayedWarned = Object.create(null);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* The query-free path a `/_gina/*` control endpoint is matched on (#B709): the
|
|
287
|
+
* url's path when it starts with `/_gina/`, or — for the bundle's OWN webroot —
|
|
288
|
+
* `<webroot>_gina/…` mapped to `/_gina/…`; anything else yields `''`. Case is kept,
|
|
289
|
+
* so `/_GINA/…` yields `''`; an empty leading segment (`//_gina/…`), another prefix
|
|
290
|
+
* and an absolute-form target yield `''` too. A nested endpoint path is returned
|
|
291
|
+
* whole, so an exact compare against `/_gina/<endpoint>` cannot match its tail.
|
|
292
|
+
*
|
|
293
|
+
* @param {string} url - the request url (`request.originalUrl || request.url`)
|
|
294
|
+
* @param {string} [webroot] - the bundle's webroot (`/web/`; normalised if needed)
|
|
295
|
+
* @returns {string} the control path, or `''`
|
|
296
|
+
* @example
|
|
297
|
+
* controlPath('/_gina/cache/clear?bundle=web'); // '/_gina/cache/clear'
|
|
298
|
+
* controlPath('/web/_gina/info', '/web/'); // '/_gina/info'
|
|
299
|
+
* controlPath('/zzz/_gina/info', '/web/'); // ''
|
|
300
|
+
* controlPath('/?next=/_gina/maintenance'); // ''
|
|
301
|
+
* controlPath('/_gina/health/check/_gina/maintenance'); // '/_gina/health/check/_gina/maintenance'
|
|
302
|
+
*/
|
|
303
|
+
function controlPath(url, webroot) {
|
|
304
|
+
if ( typeof(url) != 'string' ) {
|
|
305
|
+
return '';
|
|
306
|
+
}
|
|
307
|
+
var p = url.split('?')[0];
|
|
308
|
+
if ( p.indexOf('/_gina/') === 0 ) {
|
|
309
|
+
return p;
|
|
310
|
+
}
|
|
311
|
+
if ( typeof(webroot) == 'string' && webroot !== '' && webroot !== '/' ) {
|
|
312
|
+
var w = ( webroot.charAt(0) === '/' ) ? webroot : '/' + webroot;
|
|
313
|
+
if ( w.charAt(w.length - 1) !== '/' ) {
|
|
314
|
+
w += '/';
|
|
315
|
+
}
|
|
316
|
+
if ( p.indexOf(w + '_gina/') === 0 ) {
|
|
317
|
+
return p.slice(w.length - 1);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return '';
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Request methods that cannot mutate state (RFC 9110 §9.2.1). Mirrors the set
|
|
325
|
+
* in `core/controller/controller.js` — a cross-origin GET is not a CSRF vector,
|
|
326
|
+
* and refusing one would break the Inspector's deliberately cross-origin
|
|
327
|
+
* GET/SSE channels (`/_gina/agent`, `/_gina/logs`, `/_gina/indexes`), where
|
|
328
|
+
* `core/server.js` documents that "cross-origin is the norm here".
|
|
329
|
+
* @constant {Object.<string, boolean>}
|
|
330
|
+
*/
|
|
331
|
+
var SAFE_HTTP_METHODS = { GET: true, HEAD: true, OPTIONS: true, TRACE: true };
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Decide whether a request method is SAFE (non-mutating).
|
|
335
|
+
*
|
|
336
|
+
* @param {string} method - the HTTP method
|
|
337
|
+
* @returns {boolean} true when the method cannot mutate state
|
|
338
|
+
* @example
|
|
339
|
+
* isSafeMethod('get'); // true
|
|
340
|
+
* isSafeMethod('POST'); // false
|
|
341
|
+
* isSafeMethod(null); // false
|
|
342
|
+
*/
|
|
343
|
+
function isSafeMethod(method) {
|
|
344
|
+
return SAFE_HTTP_METHODS[ String(method || '').toUpperCase() ] === true;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Detect a browser-driven CROSS-ORIGIN WRITE to the `/_gina/*` control family
|
|
349
|
+
* (#B384).
|
|
350
|
+
*
|
|
351
|
+
* These endpoints authenticate with an AMBIENT credential — the client's IP,
|
|
352
|
+
* via {@link isClientAllowed} — and a browser attaches that automatically to
|
|
353
|
+
* every request a page makes. That is precisely the precondition for CSRF: an
|
|
354
|
+
* operator browsing from an allowlisted address (loopback by DEFAULT, i.e. the
|
|
355
|
+
* machine running the bundle) can be lured to a page that silently writes to
|
|
356
|
+
* `/_gina/storage/gc`, `/_gina/cache/clear`, `/_gina/release/rebuild` or
|
|
357
|
+
* `/_gina/maintenance`. The first three take their entire input from the QUERY
|
|
358
|
+
* STRING and read no body at all, so the attack needs no `fetch` and no CORS
|
|
359
|
+
* reasoning — a plain auto-submitting `<form>` suffices, and browsers have
|
|
360
|
+
* always permitted a form to POST cross-origin.
|
|
361
|
+
*
|
|
362
|
+
* Two signals, in order of trustworthiness:
|
|
363
|
+
*
|
|
364
|
+
* 1. `Sec-Fetch-Site` — computed by the browser and a FORBIDDEN header name,
|
|
365
|
+
* so page script cannot forge it. It is also independent of how a reverse
|
|
366
|
+
* proxy rewrites `Host`, which is why it is preferred. `same-origin`
|
|
367
|
+
* passes; `none` passes (a user-initiated navigation — typed URL or
|
|
368
|
+
* bookmark — is not a forged request); `same-site` and `cross-site` are
|
|
369
|
+
* REFUSED, since a sibling subdomain is still a different origin and can
|
|
370
|
+
* still forge.
|
|
371
|
+
* 2. `Origin` compared against the authority the client actually connected
|
|
372
|
+
* to — the fallback for browsers predating Fetch Metadata. Built from
|
|
373
|
+
* `:authority` (HTTP/2) or `Host` (HTTP/1.1) ONLY, NEVER from
|
|
374
|
+
* `X-Forwarded-Host` or any other forwarded header: #B367 established
|
|
375
|
+
* those are attacker-controlled, and a guard comparing against a value the
|
|
376
|
+
* attacker supplies is no guard. `Origin: null` (sandboxed iframe,
|
|
377
|
+
* `file://` page) is refused — the #CSRF3 precedent.
|
|
378
|
+
*
|
|
379
|
+
* NO browser signal at all ⇒ ALLOWED. CSRF attacks ambient browser
|
|
380
|
+
* credentials; a client sending neither header is not a browser (curl, the
|
|
381
|
+
* gina CLI's own probes, a deploy script), so refusing it would break every
|
|
382
|
+
* documented operator workflow while stopping nothing.
|
|
383
|
+
*
|
|
384
|
+
* ⚠️ Residual, deliberately pinned: a browser old enough to send NEITHER
|
|
385
|
+
* `Sec-Fetch-Site` NOR `Origin` on a POST would pass. Every current browser
|
|
386
|
+
* sends `Origin` on cross-origin POSTs, so this is a legacy-only gap — and a
|
|
387
|
+
* narrower one than the IP allowlist already fronting these endpoints.
|
|
388
|
+
*
|
|
389
|
+
* ⚠️ Second residual: a reverse proxy that REWRITES `Host` to an internal
|
|
390
|
+
* upstream name desynchronises the fallback comparison, which would refuse a
|
|
391
|
+
* legitimate same-origin write from a pre-Fetch-Metadata browser. Modern
|
|
392
|
+
* browsers are unaffected (signal 1 never consults `Host`), and these
|
|
393
|
+
* endpoints are IP-gated on `req.socket.remoteAddress`, which behind a proxy
|
|
394
|
+
* is the PROXY's address: a proxy on another host must be listed explicitly,
|
|
395
|
+
* and a proxy on the bundle's own host (loopback) is refused whenever its
|
|
396
|
+
* request carries a proxy signal (#B709 — before that fix the default
|
|
397
|
+
* loopback list admitted it, so this "must have opted in" premise was false
|
|
398
|
+
* for exactly that deployment).
|
|
399
|
+
*
|
|
400
|
+
* @param {http.IncomingMessage|http2.Http2ServerRequest} req
|
|
401
|
+
* @returns {boolean} true when the request is a browser-driven cross-origin
|
|
402
|
+
* write and must be refused
|
|
403
|
+
* @example
|
|
404
|
+
* isCrossOriginWrite({ headers: { 'sec-fetch-site': 'same-origin' } }); // false
|
|
405
|
+
* isCrossOriginWrite({ headers: { 'sec-fetch-site': 'cross-site' } }); // true
|
|
406
|
+
* isCrossOriginWrite({ headers: {} }); // false (curl)
|
|
407
|
+
* isCrossOriginWrite({ headers: { origin: 'http://evil.tld', host: 'app.tld' } }); // true
|
|
408
|
+
* isCrossOriginWrite({ headers: { origin: 'http://app.tld', host: 'app.tld' } }); // false
|
|
409
|
+
*/
|
|
410
|
+
function isCrossOriginWrite(req) {
|
|
411
|
+
if ( typeof(req) != 'object' || req === null ) {
|
|
412
|
+
return true; // malformed ⇒ fail CLOSED
|
|
413
|
+
}
|
|
414
|
+
var headers = req.headers || {};
|
|
415
|
+
|
|
416
|
+
var site = headers['sec-fetch-site'];
|
|
417
|
+
if ( typeof(site) == 'string' && site.trim() !== '' ) {
|
|
418
|
+
site = site.trim().toLowerCase();
|
|
419
|
+
return !( site === 'same-origin' || site === 'none' );
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
var origin = headers['origin'];
|
|
423
|
+
if ( typeof(origin) != 'string' || origin.trim() === '' ) {
|
|
424
|
+
return false; // no browser signal ⇒ not a browser ⇒ not CSRF
|
|
425
|
+
}
|
|
426
|
+
origin = origin.trim();
|
|
427
|
+
if ( origin.toLowerCase() === 'null' ) {
|
|
428
|
+
return true; // sandboxed iframe / file:// — #CSRF3 precedent
|
|
429
|
+
}
|
|
430
|
+
var authority = headers[':authority'] || headers['host'] || '';
|
|
431
|
+
if ( typeof(authority) != 'string' || authority === '' ) {
|
|
432
|
+
return true; // nothing trustworthy to compare against ⇒ fail CLOSED
|
|
433
|
+
}
|
|
434
|
+
var originHost = origin.replace(/^[a-z0-9+.\-]+:\/\//i, '');
|
|
435
|
+
return ( originHost.toLowerCase() !== authority.toLowerCase() );
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
module.exports = {
|
|
439
|
+
isClientAllowed : isClientAllowed,
|
|
440
|
+
isCrossOriginWrite : isCrossOriginWrite,
|
|
441
|
+
isSafeMethod : isSafeMethod,
|
|
442
|
+
isRelayedLoopback : isRelayedLoopback,
|
|
443
|
+
stampProxied : stampProxied,
|
|
444
|
+
controlPath : controlPath,
|
|
445
|
+
warnRelayedOnce : warnRelayedOnce,
|
|
446
|
+
_isAllowedWithList : _isAllowedWithList,
|
|
447
|
+
_resetRelayedWarnings : _resetRelayedWarnings,
|
|
448
|
+
DEFAULT_ALLOW_LIST : DEFAULT_ALLOW_LIST,
|
|
449
|
+
SAFE_HTTP_METHODS : SAFE_HTTP_METHODS,
|
|
450
|
+
PROXIED_STAMP : PROXIED_STAMP
|
|
451
|
+
};
|
|
@@ -6,6 +6,7 @@ var rl = readline.createInterface({ input: process.stdin, output: proce
|
|
|
6
6
|
var CmdHelper = require('./../helper');
|
|
7
7
|
var console = lib.logger;
|
|
8
8
|
var scan = require('../port/inc/scan');
|
|
9
|
+
var bundleNameRule = require('./inc/name');
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
/**
|
|
@@ -51,8 +52,17 @@ function Add(opt, cmd) {
|
|
|
51
52
|
/**
|
|
52
53
|
* Parses --start-port-from option, validates project/bundle args, and starts addition.
|
|
53
54
|
*
|
|
55
|
+
* Every name of the list that the project's manifest does not hold yet must pass the
|
|
56
|
+
* bundle-name rule (`inc/name.js`), checked for the whole list before the first bundle
|
|
57
|
+
* is added, so a refused name leaves nothing written (#B665). A name the manifest
|
|
58
|
+
* already holds keeps working (`--import`, `--replace`).
|
|
59
|
+
*
|
|
54
60
|
* @inner
|
|
55
61
|
* @private
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* // gina bundle:add api 'a$b' @myproject
|
|
65
|
+
* // → '"a$b" is not a valid bundle name: …', exit 1, `api` not added either
|
|
56
66
|
*/
|
|
57
67
|
var init = function() {
|
|
58
68
|
|
|
@@ -125,6 +135,20 @@ function Add(opt, cmd) {
|
|
|
125
135
|
// }
|
|
126
136
|
|
|
127
137
|
if ( isDefined('project', self.projectName) ) {
|
|
138
|
+
// #B665 — every NEW bundle name must pass the bundle-name rule (`inc/name.js`),
|
|
139
|
+
// checked for the whole list before the first bundle is added: addBundles()
|
|
140
|
+
// checks only a name's first character, one bundle at a time, after the
|
|
141
|
+
// bundles before it are written. A name the manifest already holds, as an own
|
|
142
|
+
// key, keeps working.
|
|
143
|
+
for (let n = 0, nLen = self.bundles.length; n < nLen; n++) {
|
|
144
|
+
let candidate = self.bundles[n];
|
|
145
|
+
let registered = !!(self.projectData && self.projectData.bundles)
|
|
146
|
+
&& Object.prototype.hasOwnProperty.call(self.projectData.bundles, candidate);
|
|
147
|
+
if ( !registered && !bundleNameRule.isValidBundleName(candidate) ) {
|
|
148
|
+
console.error( bundleNameRule.describeInvalidBundleName(candidate) );
|
|
149
|
+
return process.exit(1)
|
|
150
|
+
}
|
|
151
|
+
}
|
|
128
152
|
addBundles(0);
|
|
129
153
|
} else {
|
|
130
154
|
//console.error('[ '+ self.projectName+' ] is not an existing project');
|
|
@@ -4,6 +4,7 @@ var console = lib.logger;
|
|
|
4
4
|
var CmdHelper = require('./../helper');
|
|
5
5
|
var scan = require('./../port/inc/scan');
|
|
6
6
|
var nameRewrite = require('./inc/name-rewrite');
|
|
7
|
+
var bundleNameRule = require('./inc/name');
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* @module gina/lib/cmd/bundle/copy
|
|
@@ -355,6 +356,9 @@ function Copy(opt, cmd) {
|
|
|
355
356
|
* ports, copies the source tree, rewrites the name footprint, allocates the
|
|
356
357
|
* port matrix, and registers the manifest entry.
|
|
357
358
|
*
|
|
359
|
+
* A destination the manifest does not hold yet must pass the bundle-name rule
|
|
360
|
+
* (`inc/name.js`), before the dry-run report and before anything is written (#B665).
|
|
361
|
+
*
|
|
358
362
|
* @inner
|
|
359
363
|
* @private
|
|
360
364
|
*/
|
|
@@ -378,6 +382,16 @@ function Copy(opt, cmd) {
|
|
|
378
382
|
process.exit(1);
|
|
379
383
|
return;
|
|
380
384
|
}
|
|
385
|
+
// #B665 — the whole new name must pass the bundle-name rule (`inc/name.js`):
|
|
386
|
+
// isValidName() checks only its first character. A name the manifest already
|
|
387
|
+
// holds, as an own key (a destination overwritten under --force), keeps working.
|
|
388
|
+
var destRegistered = !!(self.projectData && self.projectData.bundles)
|
|
389
|
+
&& Object.prototype.hasOwnProperty.call(self.projectData.bundles, dest);
|
|
390
|
+
if ( !destRegistered && !bundleNameRule.isValidBundleName(dest) ) {
|
|
391
|
+
console.error( bundleNameRule.describeInvalidBundleName(dest) );
|
|
392
|
+
process.exit(1);
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
381
395
|
|
|
382
396
|
// source must exist (registered + on disk)
|
|
383
397
|
var srcEntry = (self.bundlesByProject && self.bundlesByProject[project])
|
|
@@ -14,6 +14,11 @@
|
|
|
14
14
|
Or
|
|
15
15
|
$ gina bundle:add <bundle_name> @<project_name> --start-port-from=<port_number>
|
|
16
16
|
|
|
17
|
+
A bundle name is made of letters, digits, `_`, `.` and `-`, and starts with a
|
|
18
|
+
lowercase letter, a digit, `_` or `.`. `.`, `..` and the name of a property every
|
|
19
|
+
object inherits, such as `constructor`, are refused. A name registered before this
|
|
20
|
+
rule existed keeps working.
|
|
21
|
+
|
|
17
22
|
|
|
18
23
|
Excluding specific ports from the scan
|
|
19
24
|
----------
|
|
@@ -33,6 +38,8 @@
|
|
|
33
38
|
----------
|
|
34
39
|
$ gina bundle:add <bundle_name_1> <bundle_name_2> <bundle_name_3> @<project_name>
|
|
35
40
|
|
|
41
|
+
Every name is checked before the first bundle is added.
|
|
42
|
+
|
|
36
43
|
|
|
37
44
|
When the bundle already exists
|
|
38
45
|
----------
|
|
@@ -62,6 +69,8 @@
|
|
|
62
69
|
|
|
63
70
|
$ gina bundle:copy <source_bundle_name> <new_bundle_name> @<project_name>
|
|
64
71
|
|
|
72
|
+
The new name follows the naming rule of `bundle:add`.
|
|
73
|
+
|
|
65
74
|
Alias
|
|
66
75
|
----------
|
|
67
76
|
$ gina bundle:cp <source_bundle_name> <new_bundle_name> @<project_name>
|
|
@@ -92,6 +101,8 @@
|
|
|
92
101
|
|
|
93
102
|
$ gina bundle:rename <old_bundle_name> <new_bundle_name> @<project_name>
|
|
94
103
|
|
|
104
|
+
The new name follows the naming rule of `bundle:add`.
|
|
105
|
+
|
|
95
106
|
Preview without writing anything
|
|
96
107
|
----------
|
|
97
108
|
Lists every file the name rewrite would touch so coincidental matches can be
|