@synopackageland/cli 0.8.0 → 0.9.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 +124 -0
- package/README.md +26 -4
- package/dist/add.js +4 -17
- package/dist/authorization-sdk.d.ts +0 -1
- package/dist/authorization-sdk.js +0 -1
- package/dist/build-spk/gateway.js +2 -2
- package/dist/build-spk/notices.js +12 -8
- package/dist/capability-overlays.d.ts +15 -0
- package/dist/capability-overlays.js +18 -0
- package/dist/cli-version.d.ts +2 -0
- package/dist/cli-version.js +3 -0
- package/dist/cli.js +3 -1
- package/dist/error-registry.js +12 -4
- package/dist/info.js +2 -1
- package/dist/init.js +52 -58
- package/dist/reproducible.js +1 -1
- package/dist/runtime/delegate-contract.d.ts +15 -0
- package/dist/runtime/delegate-contract.js +2 -0
- package/dist/runtime/executor-build.d.ts +15 -1
- package/dist/runtime/executor-build.js +42 -11
- package/dist/runtime/executor-digests.json +13 -0
- package/dist/runtime/executor-inspect.d.ts +1 -0
- package/dist/runtime/executor-inspect.js +5 -2
- package/dist/runtime/executor-policy.d.ts +3 -1
- package/dist/runtime/executor-policy.js +7 -2
- package/dist/runtime/executor-source.d.ts +21 -0
- package/dist/runtime/executor-source.js +35 -0
- package/dist/runtime/executor-tasks.d.ts +5 -2
- package/dist/runtime/executor-tasks.js +6 -4
- package/dist/runtime/sdk-source.d.ts +31 -0
- package/dist/runtime/sdk-source.js +92 -0
- package/dist/standalone/api-permissions.d.ts +4 -1
- package/dist/standalone/api-permissions.js +10 -18
- package/dist/standalone/build.d.ts +1 -0
- package/dist/standalone/build.js +11 -4
- package/dist/standalone/daemon.js +2 -2
- package/dist/standalone/dsm-window.js +2 -2
- package/dist/standalone/manifest.d.ts +5 -2
- package/dist/standalone/manifest.js +9 -3
- package/dist/standalone/root-window.d.ts +1 -1
- package/dist/standalone/root-window.js +0 -1
- package/dist/standalone/sdk-check.d.ts +9 -0
- package/dist/standalone/sdk-check.js +43 -0
- package/dist/standalone/spk.js +1 -1
- package/dist/template-paths.d.ts +7 -2
- package/dist/template-paths.js +18 -6
- package/package.json +13 -3
- package/dist/templates/_executor/README.md +0 -318
- package/dist/templates/_executor/anchor.go +0 -156
- package/dist/templates/_executor/anchor_test.go +0 -161
- package/dist/templates/_executor/apppriv_review_test.go +0 -28
- package/dist/templates/_executor/auth_presence_review_test.go +0 -38
- package/dist/templates/_executor/cancel_contract_test.go +0 -236
- package/dist/templates/_executor/cmd/lifecycle/main.go +0 -42
- package/dist/templates/_executor/cookie_review_test.go +0 -27
- package/dist/templates/_executor/copy.go +0 -64
- package/dist/templates/_executor/copy_test.go +0 -88
- package/dist/templates/_executor/digest_review_test.go +0 -120
- package/dist/templates/_executor/directories.go +0 -40
- package/dist/templates/_executor/dsm.go +0 -369
- package/dist/templates/_executor/dsm_test.go +0 -290
- package/dist/templates/_executor/executor.go +0 -735
- package/dist/templates/_executor/executor_test.go +0 -314
- package/dist/templates/_executor/go.mod +0 -5
- package/dist/templates/_executor/identity.go +0 -74
- package/dist/templates/_executor/identity_kernel_linux_test.go +0 -60
- package/dist/templates/_executor/identity_linux.go +0 -82
- package/dist/templates/_executor/identity_security_test.go +0 -43
- package/dist/templates/_executor/internal/lifecycle/lifecycle.go +0 -95
- package/dist/templates/_executor/internal/lifecycle/lifecycle_test.go +0 -232
- package/dist/templates/_executor/internal/taskscript/boot.sh +0 -31
- package/dist/templates/_executor/internal/taskscript/cmd/main.go +0 -19
- package/dist/templates/_executor/internal/taskscript/control.sh +0 -31
- package/dist/templates/_executor/internal/taskscript/tasks.go +0 -44
- package/dist/templates/_executor/json_review_test.go +0 -40
- package/dist/templates/_executor/lifecycle_test.go +0 -97
- package/dist/templates/_executor/link_linux.go +0 -28
- package/dist/templates/_executor/long_running_test.go +0 -530
- package/dist/templates/_executor/main.go +0 -576
- package/dist/templates/_executor/managed.go +0 -117
- package/dist/templates/_executor/managed_test.go +0 -137
- package/dist/templates/_executor/move_linux.go +0 -490
- package/dist/templates/_executor/move_linux_test.go +0 -460
- package/dist/templates/_executor/move_validation.go +0 -46
- package/dist/templates/_executor/move_validation_test.go +0 -187
- package/dist/templates/_executor/operations.go +0 -926
- package/dist/templates/_executor/path_test.go +0 -35
- package/dist/templates/_executor/pid.go +0 -37
- package/dist/templates/_executor/pid_test.go +0 -113
- package/dist/templates/_executor/platform_linux.go +0 -187
- package/dist/templates/_executor/platform_linux_test.go +0 -191
- package/dist/templates/_executor/platform_other.go +0 -76
- package/dist/templates/_executor/process.go +0 -142
- package/dist/templates/_executor/purge_log.go +0 -18
- package/dist/templates/_executor/records.go +0 -242
- package/dist/templates/_executor/scope_cancel_contract_test.go +0 -91
- package/dist/templates/_executor/scope_client.go +0 -37
- package/dist/templates/_executor/scope_contract.go +0 -12
- package/dist/templates/_executor/selected_scope.go +0 -146
- package/dist/templates/_executor/selected_scope_test.go +0 -186
- package/dist/templates/_executor/socket_linux_test.go +0 -46
- package/dist/templates/_executor/status_disabled_test.go +0 -33
- package/dist/templates/_executor/store.go +0 -91
- package/dist/templates/_executor/supervise.go +0 -109
- package/dist/templates/_executor/supervise_test.go +0 -130
- package/dist/templates/_executor/task_race_review_test.go +0 -47
- package/dist/templates/_executor/tasks.go +0 -320
- package/dist/templates/_executor/tasks_dsm71_test.go +0 -114
- package/dist/templates/_executor/tasks_review_test.go +0 -43
- package/dist/templates/_executor/tasks_test.go +0 -223
- package/dist/templates/_executor/testdata/evidence/cleanup.json +0 -24
- package/dist/templates/_executor/testdata/evidence/final-smoke.jsonl +0 -9
- package/dist/templates/_executor/testdata/evidence/kernel-acl.json +0 -6
- package/dist/templates/_executor/testdata/evidence/linux-tests.log +0 -123
- package/dist/templates/_executor/testdata/evidence/live.jsonl +0 -23
- package/dist/templates/_executor/testdata/evidence/storage.json +0 -90
- package/dist/templates/_executor/testdata/evidence/validation.json +0 -55
- package/dist/templates/_executor/testdata/live_probe.py +0 -98
- package/dist/templates/_executor/upgrade_watch_test.go +0 -244
- package/dist/templates/_executor/watch.go +0 -164
- package/dist/templates/_executor/watch_test.go +0 -291
- package/dist/templates/_executor/write_review_linux_test.go +0 -87
- package/dist/templates/_shared/AGENTS.md +0 -146
- package/dist/templates/_shared/CLAUDE.md +0 -1
- package/dist/templates/_shared/third-party-notices.mjs +0 -51
- package/dist/templates/binary/LICENSES/GO-LICENSE +0 -27
- package/dist/templates/binary/LICENSES/GO-PATENTS +0 -22
- package/dist/templates/binary/dsm-package.yaml +0 -46
- package/dist/templates/binary/example/main.go +0 -16
- package/dist/templates/binary/gitignore +0 -2
- package/dist/templates/binary/i18n/messages/de.json +0 -4
- package/dist/templates/binary/i18n/messages/en.json +0 -4
- package/dist/templates/binary/i18n/messages/es.json +0 -4
- package/dist/templates/binary/i18n/messages/fr.json +0 -4
- package/dist/templates/binary/i18n/messages/it.json +0 -4
- package/dist/templates/binary/i18n/messages/ja.json +0 -4
- package/dist/templates/binary/i18n/messages/ko.json +0 -4
- package/dist/templates/binary/i18n/messages/zh-CN.json +0 -4
- package/dist/templates/binary/i18n/messages/zh-TW.json +0 -4
- package/dist/templates/binary/ui/app.css +0 -4
- package/dist/templates/binary/ui/app.js +0 -32
- package/dist/templates/compose/compose.yaml +0 -8
- package/dist/templates/compose/synology-app.yaml +0 -16
- package/dist/templates/native-authorization/AuthorizationGate.vue +0 -91
- package/dist/templates/native-authorization/i18n/de.json +0 -37
- package/dist/templates/native-authorization/i18n/en.json +0 -37
- package/dist/templates/native-authorization/i18n/es.json +0 -37
- package/dist/templates/native-authorization/i18n/fr.json +0 -37
- package/dist/templates/native-authorization/i18n/index.ts +0 -15
- package/dist/templates/native-authorization/i18n/it.json +0 -37
- package/dist/templates/native-authorization/i18n/ja.json +0 -37
- package/dist/templates/native-authorization/i18n/ko.json +0 -37
- package/dist/templates/native-authorization/i18n/zh-CN.json +0 -37
- package/dist/templates/native-authorization/i18n/zh-TW.json +0 -37
- package/dist/templates/native-go/README.md +0 -459
- package/dist/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +0 -61
- package/dist/templates/native-go/backend/cmd/app/main.go +0 -95
- package/dist/templates/native-go/backend/cmd/background-worker/main.go +0 -38
- package/dist/templates/native-go/backend/go.mod +0 -9
- package/dist/templates/native-go/backend/go.sum +0 -4
- package/dist/templates/native-go/backend/internal/api/cgi_framing_test.go +0 -32
- package/dist/templates/native-go/backend/internal/api/cookie_review_test.go +0 -28
- package/dist/templates/native-go/backend/internal/api/deadline_test.go +0 -114
- package/dist/templates/native-go/backend/internal/api/dsm-session.go +0 -54
- package/dist/templates/native-go/backend/internal/api/dsm-session_test.go +0 -51
- package/dist/templates/native-go/backend/internal/api/entry_test.go +0 -47
- package/dist/templates/native-go/backend/internal/api/errors.go +0 -47
- package/dist/templates/native-go/backend/internal/api/permissions.go +0 -161
- package/dist/templates/native-go/backend/internal/api/permissions.json +0 -5
- package/dist/templates/native-go/backend/internal/api/permissions_test.go +0 -113
- package/dist/templates/native-go/backend/internal/api/policy_fixture_test.go +0 -8
- package/dist/templates/native-go/backend/internal/api/registry.go +0 -142
- package/dist/templates/native-go/backend/internal/api/registry_test.go +0 -344
- package/dist/templates/native-go/backend/internal/api/resource_limits_test.go +0 -87
- package/dist/templates/native-go/backend/internal/api/sdk-permissions.json +0 -59
- package/dist/templates/native-go/backend/internal/api/sdk_policy_test.go +0 -31
- package/dist/templates/native-go/backend/internal/api/server.go +0 -305
- package/dist/templates/native-go/backend/internal/api/testdata/permissions-cases.json +0 -172
- package/dist/templates/native-go/backend/internal/app/background.go +0 -249
- package/dist/templates/native-go/backend/internal/app/background_none.go +0 -8
- package/dist/templates/native-go/backend/internal/app/background_owner.go +0 -38
- package/dist/templates/native-go/backend/internal/app/background_owner_test.go +0 -163
- package/dist/templates/native-go/backend/internal/app/background_schedule.go +0 -69
- package/dist/templates/native-go/backend/internal/app/background_schedule_test.go +0 -62
- package/dist/templates/native-go/backend/internal/app/background_test.go +0 -320
- package/dist/templates/native-go/backend/internal/app/delegate_config.go +0 -57
- package/dist/templates/native-go/backend/internal/app/delegate_config_test.go +0 -28
- package/dist/templates/native-go/backend/internal/app/delegate_none.go +0 -5
- package/dist/templates/native-go/backend/internal/app/identity.go +0 -20
- package/dist/templates/native-go/backend/internal/app/identity_test.go +0 -15
- package/dist/templates/native-go/backend/internal/app/migrations.go +0 -41
- package/dist/templates/native-go/backend/internal/app/migrations_test.go +0 -41
- package/dist/templates/native-go/backend/internal/app/portal.go +0 -30
- package/dist/templates/native-go/backend/internal/app/portal_test.go +0 -55
- package/dist/templates/native-go/backend/internal/app/root_none.go +0 -9
- package/dist/templates/native-go/backend/internal/app/routes.go +0 -137
- package/dist/templates/native-go/backend/internal/app/routes_test.go +0 -165
- package/dist/templates/native-go/backend/internal/app/session_files.go +0 -9
- package/dist/templates/native-go/backend/internal/app/session_files_test.go +0 -14
- package/dist/templates/native-go/backend/internal/app/shared_folder.go +0 -144
- package/dist/templates/native-go/backend/internal/app/shared_folder_test.go +0 -158
- package/dist/templates/native-go/backend/internal/background/access.go +0 -57
- package/dist/templates/native-go/backend/internal/background/lock_test.go +0 -131
- package/dist/templates/native-go/backend/internal/background/owner_test.go +0 -118
- package/dist/templates/native-go/backend/internal/background/runner.go +0 -185
- package/dist/templates/native-go/backend/internal/background/runner_test.go +0 -209
- package/dist/templates/native-go/backend/internal/background/schedule.go +0 -336
- package/dist/templates/native-go/backend/internal/background/schedule_test.go +0 -368
- package/dist/templates/native-go/backend/internal/background/store.go +0 -825
- package/dist/templates/native-go/backend/internal/background/store_test.go +0 -365
- package/dist/templates/native-go/backend/internal/datamigrate/migrate.go +0 -191
- package/dist/templates/native-go/backend/internal/datamigrate/migrate_test.go +0 -177
- package/dist/templates/native-go/backend/internal/dsm/admin.go +0 -76
- package/dist/templates/native-go/backend/internal/dsm/admin_linux.go +0 -110
- package/dist/templates/native-go/backend/internal/dsm/admin_linux_test.go +0 -105
- package/dist/templates/native-go/backend/internal/dsm/admin_other.go +0 -15
- package/dist/templates/native-go/backend/internal/dsm/admin_test.go +0 -67
- package/dist/templates/native-go/backend/internal/dsm/apppriv.go +0 -30
- package/dist/templates/native-go/backend/internal/dsm/auth.go +0 -94
- package/dist/templates/native-go/backend/internal/dsm/auth_test.go +0 -159
- package/dist/templates/native-go/backend/internal/dsm/bridge_file.go +0 -75
- package/dist/templates/native-go/backend/internal/dsm/bridge_file_test.go +0 -57
- package/dist/templates/native-go/backend/internal/dsm/entry.go +0 -177
- package/dist/templates/native-go/backend/internal/dsm/entry_test.go +0 -315
- package/dist/templates/native-go/backend/internal/dsm/native/admin-aarch64.elf +0 -0
- package/dist/templates/native-go/backend/internal/dsm/native/admin-armv7.elf +0 -0
- package/dist/templates/native-go/backend/internal/dsm/native/admin-x86_64.elf +0 -0
- package/dist/templates/native-go/backend/internal/dsm/native/admin_check.c +0 -28
- package/dist/templates/native-go/backend/internal/dsm/native/apppriv-aarch64.elf +0 -0
- package/dist/templates/native-go/backend/internal/dsm/native/apppriv-armv7.elf +0 -0
- package/dist/templates/native-go/backend/internal/dsm/native/apppriv-x86_64.elf +0 -0
- package/dist/templates/native-go/backend/internal/dsm/native/apppriv_check.c +0 -33
- package/dist/templates/native-go/backend/internal/dsm/native/build.sh +0 -18
- package/dist/templates/native-go/backend/internal/dsm/native/licenses/GLIBC-NOTICES.txt +0 -400
- package/dist/templates/native-go/backend/internal/dsm/native/licenses/LGPL-2.1.txt +0 -501
- package/dist/templates/native-go/backend/internal/dsm/native/licenses/SOURCE.txt +0 -5
- package/dist/templates/native-go/backend/internal/dsm/native/licenses/ZIG-MIT.txt +0 -21
- package/dist/templates/native-go/backend/internal/dsm/native/provenance.json +0 -18
- package/dist/templates/native-go/backend/internal/filestation/browse_test.go +0 -67
- package/dist/templates/native-go/backend/internal/filestation/check_permission.go +0 -71
- package/dist/templates/native-go/backend/internal/filestation/check_permission_test.go +0 -77
- package/dist/templates/native-go/backend/internal/filestation/client.go +0 -337
- package/dist/templates/native-go/backend/internal/filestation/client_test.go +0 -155
- package/dist/templates/native-go/backend/internal/filestation/doc.go +0 -4
- package/dist/templates/native-go/backend/internal/filestation/download_dsm71_test.go +0 -82
- package/dist/templates/native-go/backend/internal/filestation/http.go +0 -70
- package/dist/templates/native-go/backend/internal/filestation/http_test.go +0 -188
- package/dist/templates/native-go/backend/internal/filestation/operations_test.go +0 -206
- package/dist/templates/native-go/backend/internal/filestation/read_file_test.go +0 -89
- package/dist/templates/native-go/backend/internal/filestation/sdk_policy_test.go +0 -39
- package/dist/templates/native-go/backend/internal/filestation/service.go +0 -254
- package/dist/templates/native-go/backend/internal/filestation/service_test.go +0 -74
- package/dist/templates/native-go/backend/internal/filestation/upload_stream.go +0 -76
- package/dist/templates/native-go/backend/internal/filestation/upload_stream_test.go +0 -77
- package/dist/templates/native-go/backend/internal/filestation/write.go +0 -32
- package/dist/templates/native-go/backend/internal/filestation/write_test.go +0 -124
- package/dist/templates/native-go/backend/internal/identity/README.md +0 -59
- package/dist/templates/native-go/backend/internal/identity/dsm.go +0 -115
- package/dist/templates/native-go/backend/internal/identity/http.go +0 -291
- package/dist/templates/native-go/backend/internal/identity/identity_test.go +0 -530
- package/dist/templates/native-go/backend/internal/identity/service.go +0 -159
- package/dist/templates/native-go/backend/internal/identity/store.go +0 -109
- package/dist/templates/native-go/backend/internal/jsonlimits/limits.go +0 -48
- package/dist/templates/native-go/backend/internal/jsonlimits/limits_test.go +0 -52
- package/dist/templates/native-go/backend/internal/portal/portal.go +0 -138
- package/dist/templates/native-go/backend/internal/portal/portal_test.go +0 -89
- package/dist/templates/native-go/dsm-package.yaml +0 -71
- package/dist/templates/native-go/gitignore +0 -1
- package/dist/templates/native-go/i18n/glossary.json +0 -663
- package/dist/templates/native-go/i18n/messages/de.json +0 -29
- package/dist/templates/native-go/i18n/messages/en.json +0 -29
- package/dist/templates/native-go/i18n/messages/es.json +0 -29
- package/dist/templates/native-go/i18n/messages/fr.json +0 -29
- package/dist/templates/native-go/i18n/messages/it.json +0 -29
- package/dist/templates/native-go/i18n/messages/ja.json +0 -29
- package/dist/templates/native-go/i18n/messages/ko.json +0 -29
- package/dist/templates/native-go/i18n/messages/zh-CN.json +0 -29
- package/dist/templates/native-go/i18n/messages/zh-TW.json +0 -29
- package/dist/templates/native-go/ui/app.css +0 -45
- package/dist/templates/native-go/ui/app.js +0 -111
- package/dist/templates/native-go-delegate/DELEGATE.md +0 -263
- package/dist/templates/native-go-delegate/backend/cmd/background-worker/main.go +0 -48
- package/dist/templates/native-go-delegate/backend/internal/app/delegate.go +0 -25
- package/dist/templates/native-go-delegate/backend/internal/app/delegate_on.go +0 -5
- package/dist/templates/native-go-delegate/backend/internal/app/delegate_routes_test.go +0 -31
- package/dist/templates/native-go-delegate/backend/internal/background/delegate_review_test.go +0 -174
- package/dist/templates/native-go-delegate/backend/internal/background/delegated.go +0 -277
- package/dist/templates/native-go-delegate/backend/internal/background/delegated_moves.go +0 -270
- package/dist/templates/native-go-delegate/backend/internal/background/delegated_test.go +0 -34
- package/dist/templates/native-go-delegate/backend/internal/delegate/admission_recovery_test.go +0 -410
- package/dist/templates/native-go-delegate/backend/internal/delegate/busy_review_test.go +0 -15
- package/dist/templates/native-go-delegate/backend/internal/delegate/cancel_contract_test.go +0 -95
- package/dist/templates/native-go-delegate/backend/internal/delegate/client.go +0 -151
- package/dist/templates/native-go-delegate/backend/internal/delegate/client_test.go +0 -214
- package/dist/templates/native-go-delegate/backend/internal/delegate/destination.go +0 -110
- package/dist/templates/native-go-delegate/backend/internal/delegate/destination_state.go +0 -117
- package/dist/templates/native-go-delegate/backend/internal/delegate/destination_state_test.go +0 -60
- package/dist/templates/native-go-delegate/backend/internal/delegate/destination_test.go +0 -116
- package/dist/templates/native-go-delegate/backend/internal/delegate/example.go +0 -81
- package/dist/templates/native-go-delegate/backend/internal/delegate/example_test.go +0 -91
- package/dist/templates/native-go-delegate/backend/internal/delegate/executor_contract_test.go +0 -511
- package/dist/templates/native-go-delegate/backend/internal/delegate/files.go +0 -132
- package/dist/templates/native-go-delegate/backend/internal/delegate/long_running_routes.go +0 -92
- package/dist/templates/native-go-delegate/backend/internal/delegate/long_running_routes_test.go +0 -99
- package/dist/templates/native-go-delegate/backend/internal/delegate/move.go +0 -348
- package/dist/templates/native-go-delegate/backend/internal/delegate/move_test.go +0 -351
- package/dist/templates/native-go-delegate/backend/internal/delegate/operations_list.go +0 -65
- package/dist/templates/native-go-delegate/backend/internal/delegate/operations_list_test.go +0 -114
- package/dist/templates/native-go-delegate/backend/internal/delegate/retry.go +0 -106
- package/dist/templates/native-go-delegate/backend/internal/delegate/retry_test.go +0 -143
- package/dist/templates/native-go-delegate/backend/internal/delegate/service.go +0 -364
- package/dist/templates/native-go-delegate/backend/internal/delegate/service_test.go +0 -318
- package/dist/templates/native-go-delegate/backend/internal/delegate/staging.go +0 -121
- package/dist/templates/native-go-delegate/backend/internal/delegate/status_disabled_test.go +0 -51
- package/dist/templates/native-go-delegate/backend/internal/delegate/testdata/executor_contract.txt +0 -112
- package/dist/templates/native-go-delegate/backend/internal/delegate/transient_contract_test.go +0 -137
- package/dist/templates/native-go-delegate/backend/internal/delegate/wait_cancel_test.go +0 -101
- package/dist/templates/native-go-delegate/backend/internal/delegate/worker.go +0 -225
- package/dist/templates/native-go-delegate/backend/internal/filestation/files.go +0 -43
- package/dist/templates/native-go-delegate/backend/internal/filestation/files_test.go +0 -59
- package/dist/templates/native-go-delegate/frontend/src/CapabilityPanels.vue +0 -37
- package/dist/templates/native-go-delegate/frontend/src/delegate/BackgroundSavePanel.vue +0 -113
- package/dist/templates/native-go-delegate/frontend/src/delegate/DelegatePanel.vue +0 -70
- package/dist/templates/native-go-delegate/frontend/src/delegate/copy.ts +0 -8
- package/dist/templates/native-go-delegate/frontend/src/delegate/i18n/waiting.json +0 -11
- package/dist/templates/native-go-delegate/frontend/test/background-save.test.ts +0 -121
- package/dist/templates/native-go-delegate/frontend/test/delegate.test.ts +0 -145
- package/dist/templates/native-go-delegate/frontend/test/scope-settings.test.ts +0 -49
- package/dist/templates/native-go-delegate/test-frontend.sh +0 -12
- package/dist/templates/native-go-delegate/test.sh +0 -18
- package/dist/templates/native-go-jobs/BACKGROUND.md +0 -108
- package/dist/templates/native-go-jobs/backend/internal/app/background_on.go +0 -7
- package/dist/templates/native-go-jobs/backend/internal/app/background_routes_test.go +0 -90
- package/dist/templates/native-go-jobs/frontend/src/background/BackgroundPanel.vue +0 -170
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/de.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/en.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/es.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/fr.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/it.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/ja.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/ko.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/zh-CN.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n/zh-TW.json +0 -75
- package/dist/templates/native-go-jobs/frontend/src/background/i18n.ts +0 -19
- package/dist/templates/native-go-jobs/frontend/src/background/picker-provider.ts +0 -12
- package/dist/templates/native-go-jobs/frontend/src/background/request-key.ts +0 -5
- package/dist/templates/native-go-jobs/frontend/test/background.test.ts +0 -205
- package/dist/templates/native-go-root-ops/backend/internal/app/executor.go +0 -140
- package/dist/templates/native-go-root-ops/backend/internal/app/executor_test.go +0 -117
- package/dist/templates/native-go-root-ops/root/whoami.sh +0 -3
- package/dist/templates/native-go-vue/README.md +0 -47
- package/dist/templates/native-go-vue/frontend/DESIGN.md +0 -61
- package/dist/templates/native-go-vue/frontend/package-lock.json +0 -2530
- package/dist/templates/native-go-vue/frontend/package.json +0 -6
- package/dist/templates/native-go-vue/frontend/src/App.vue +0 -96
- package/dist/templates/native-go-vue/frontend/src/CapabilityPanels.vue +0 -6
- package/dist/templates/native-go-vue/frontend/src/context.ts +0 -78
- package/dist/templates/native-go-vue/frontend/src/delegate/ExecutorSettings.vue +0 -70
- package/dist/templates/native-go-vue/frontend/src/delegate/catalogs.ts +0 -11
- package/dist/templates/native-go-vue/frontend/src/delegate/copy.test.ts +0 -12
- package/dist/templates/native-go-vue/frontend/src/delegate/copy.ts +0 -4
- package/dist/templates/native-go-vue/frontend/src/delegate/executor-settings.test.ts +0 -23
- package/dist/templates/native-go-vue/frontend/src/delegate/executor-setup.ts +0 -24
- package/dist/templates/native-go-vue/frontend/src/delegate/facade.test.ts +0 -100
- package/dist/templates/native-go-vue/frontend/src/delegate/facade.ts +0 -85
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/de.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/en.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/es.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/fr.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/it.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/ja.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/ko.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/de.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/en.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/es.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/fr.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/it.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/ja.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/ko.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-CN.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-TW.json +0 -42
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/zh-CN.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/i18n/zh-TW.json +0 -47
- package/dist/templates/native-go-vue/frontend/src/delegate/long-running.ts +0 -57
- package/dist/templates/native-go-vue/frontend/src/delegate/save-copy.test.ts +0 -12
- package/dist/templates/native-go-vue/frontend/src/delegate/save-copy.ts +0 -24
- package/dist/templates/native-go-vue/frontend/src/delegate/scoped-picker.test.ts +0 -12
- package/dist/templates/native-go-vue/frontend/src/delegate/scoped-picker.ts +0 -21
- package/dist/templates/native-go-vue/frontend/src/files/FileBrowser.vue +0 -131
- package/dist/templates/native-go-vue/frontend/src/files/FilesPage.vue +0 -35
- package/dist/templates/native-go-vue/frontend/src/files/files.test.ts +0 -100
- package/dist/templates/native-go-vue/frontend/src/files/provider.test.ts +0 -48
- package/dist/templates/native-go-vue/frontend/src/files/transfers.test.ts +0 -27
- package/dist/templates/native-go-vue/frontend/src/files/transfers.ts +0 -25
- package/dist/templates/native-go-vue/frontend/src/i18n/de.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n/en.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n/es.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n/fr.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n/it.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n/ja.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n/ko.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n/zh-CN.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n/zh-TW.json +0 -20
- package/dist/templates/native-go-vue/frontend/src/i18n.ts +0 -13
- package/dist/templates/native-go-vue/frontend/src/identity/DESIGN.md +0 -46
- package/dist/templates/native-go-vue/frontend/src/identity/LoginPage.vue +0 -78
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/de.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/en.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/es.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/fr.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/it.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/ja.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/ko.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/zh-CN.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n/zh-TW.json +0 -27
- package/dist/templates/native-go-vue/frontend/src/identity/i18n.ts +0 -14
- package/dist/templates/native-go-vue/frontend/src/identity/login.test.ts +0 -32
- package/dist/templates/native-go-vue/frontend/src/identity/session.test.ts +0 -33
- package/dist/templates/native-go-vue/frontend/src/identity/session.ts +0 -74
- package/dist/templates/native-go-vue/frontend/src/main.ts +0 -32
- package/dist/templates/native-go-vue/frontend/src/nas/NasPicker.vue +0 -42
- package/dist/templates/native-go-vue/frontend/src/nas/contract.ts +0 -12
- package/dist/templates/native-go-vue/frontend/src/nas/destination.test.ts +0 -48
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/de.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/en.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/es.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/fr.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/it.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/ja.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/ko.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/zh-CN.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n/files/zh-TW.json +0 -41
- package/dist/templates/native-go-vue/frontend/src/nas/i18n.ts +0 -2
- package/dist/templates/native-go-vue/frontend/src/nas/locale.ts +0 -24
- package/dist/templates/native-go-vue/frontend/src/nas/provider.ts +0 -50
- package/dist/templates/native-go-vue/frontend/src/nas/use-request.ts +0 -18
- package/dist/templates/native-go-vue/frontend/src/portal/PortalSettings.vue +0 -39
- package/dist/templates/native-go-vue/frontend/src/shell/AppShell.vue +0 -48
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/de.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/en.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/es.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/fr.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/it.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/ja.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/ko.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/zh-CN.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n/zh-TW.json +0 -4
- package/dist/templates/native-go-vue/frontend/src/shell/i18n.ts +0 -17
- package/dist/templates/native-go-vue/frontend/src/shell/pages.ts +0 -15
- package/dist/templates/native-go-vue/frontend/src/style.css +0 -27
- package/dist/templates/native-go-vue/frontend/test/apps.test.ts +0 -57
- package/dist/templates/native-go-vue/frontend/test/native-controls.test.ts +0 -27
- package/dist/templates/native-go-vue/frontend/test/portal-settings.test.ts +0 -71
- package/dist/templates/native-go-vue/frontend/test/shell-i18n.test.ts +0 -50
- package/dist/templates/native-go-vue/frontend/test/shell-ui.test.ts +0 -20
- package/dist/templates/native-go-vue/frontend/test/shell.test.ts +0 -30
- package/dist/templates/native-go-vue/frontend/tsconfig.json +0 -1
- package/dist/templates/native-go-vue/frontend/vite.config.ts +0 -10
- package/dist/templates/native-go-vue/gitignore +0 -2
- package/templates/_daemon/fixture_linux_test.go +0 -15
- package/templates/_daemon/fixture_other_test.go +0 -7
- package/templates/_daemon/go.mod +0 -5
- package/templates/_daemon/main.go +0 -611
- package/templates/_daemon/main_test.go +0 -315
- package/templates/_daemon/process_linux.go +0 -55
- package/templates/_daemon/process_linux_test.go +0 -161
- package/templates/_daemon/process_other.go +0 -14
- package/templates/_daemon/testdata/child.go +0 -44
- package/templates/_executor/README.md +0 -318
- package/templates/_executor/anchor.go +0 -156
- package/templates/_executor/anchor_test.go +0 -161
- package/templates/_executor/apppriv_review_test.go +0 -28
- package/templates/_executor/auth_presence_review_test.go +0 -38
- package/templates/_executor/cancel_contract_test.go +0 -236
- package/templates/_executor/cmd/lifecycle/main.go +0 -42
- package/templates/_executor/cookie_review_test.go +0 -27
- package/templates/_executor/copy.go +0 -64
- package/templates/_executor/copy_test.go +0 -88
- package/templates/_executor/digest_review_test.go +0 -120
- package/templates/_executor/directories.go +0 -40
- package/templates/_executor/dsm.go +0 -369
- package/templates/_executor/dsm_test.go +0 -290
- package/templates/_executor/executor.go +0 -735
- package/templates/_executor/executor_test.go +0 -314
- package/templates/_executor/go.mod +0 -5
- package/templates/_executor/identity.go +0 -74
- package/templates/_executor/identity_kernel_linux_test.go +0 -60
- package/templates/_executor/identity_linux.go +0 -82
- package/templates/_executor/identity_security_test.go +0 -43
- package/templates/_executor/internal/lifecycle/lifecycle.go +0 -95
- package/templates/_executor/internal/lifecycle/lifecycle_test.go +0 -232
- package/templates/_executor/internal/taskscript/boot.sh +0 -31
- package/templates/_executor/internal/taskscript/cmd/main.go +0 -19
- package/templates/_executor/internal/taskscript/control.sh +0 -31
- package/templates/_executor/internal/taskscript/tasks.go +0 -44
- package/templates/_executor/json_review_test.go +0 -40
- package/templates/_executor/lifecycle_test.go +0 -97
- package/templates/_executor/link_linux.go +0 -28
- package/templates/_executor/long_running_test.go +0 -530
- package/templates/_executor/main.go +0 -576
- package/templates/_executor/managed.go +0 -117
- package/templates/_executor/managed_test.go +0 -137
- package/templates/_executor/move_linux.go +0 -490
- package/templates/_executor/move_linux_test.go +0 -460
- package/templates/_executor/move_validation.go +0 -46
- package/templates/_executor/move_validation_test.go +0 -187
- package/templates/_executor/operations.go +0 -926
- package/templates/_executor/path_test.go +0 -35
- package/templates/_executor/pid.go +0 -37
- package/templates/_executor/pid_test.go +0 -113
- package/templates/_executor/platform_linux.go +0 -187
- package/templates/_executor/platform_linux_test.go +0 -191
- package/templates/_executor/platform_other.go +0 -76
- package/templates/_executor/process.go +0 -142
- package/templates/_executor/purge_log.go +0 -18
- package/templates/_executor/records.go +0 -242
- package/templates/_executor/scope_cancel_contract_test.go +0 -91
- package/templates/_executor/scope_client.go +0 -37
- package/templates/_executor/scope_contract.go +0 -12
- package/templates/_executor/selected_scope.go +0 -146
- package/templates/_executor/selected_scope_test.go +0 -186
- package/templates/_executor/socket_linux_test.go +0 -46
- package/templates/_executor/status_disabled_test.go +0 -33
- package/templates/_executor/store.go +0 -91
- package/templates/_executor/supervise.go +0 -109
- package/templates/_executor/supervise_test.go +0 -130
- package/templates/_executor/task_race_review_test.go +0 -47
- package/templates/_executor/tasks.go +0 -320
- package/templates/_executor/tasks_dsm71_test.go +0 -114
- package/templates/_executor/tasks_review_test.go +0 -43
- package/templates/_executor/tasks_test.go +0 -223
- package/templates/_executor/testdata/evidence/cleanup.json +0 -24
- package/templates/_executor/testdata/evidence/final-smoke.jsonl +0 -9
- package/templates/_executor/testdata/evidence/kernel-acl.json +0 -6
- package/templates/_executor/testdata/evidence/linux-tests.log +0 -123
- package/templates/_executor/testdata/evidence/live.jsonl +0 -23
- package/templates/_executor/testdata/evidence/storage.json +0 -90
- package/templates/_executor/testdata/evidence/validation.json +0 -55
- package/templates/_executor/testdata/live_probe.py +0 -98
- package/templates/_executor/upgrade_watch_test.go +0 -244
- package/templates/_executor/watch.go +0 -164
- package/templates/_executor/watch_test.go +0 -291
- package/templates/_executor/write_review_linux_test.go +0 -87
- package/templates/_gateway/auth.go +0 -101
- package/templates/_gateway/auth_test.go +0 -216
- package/templates/_gateway/cgi.go +0 -133
- package/templates/_gateway/cgi_test.go +0 -156
- package/templates/_gateway/csrf.go +0 -73
- package/templates/_gateway/csrf_test.go +0 -155
- package/templates/_gateway/directory.go +0 -108
- package/templates/_gateway/directory_test.go +0 -202
- package/templates/_gateway/gateway.go +0 -412
- package/templates/_gateway/gateway_test.go +0 -676
- package/templates/_gateway/go.mod +0 -5
- package/templates/_gateway/groups.go +0 -66
- package/templates/_gateway/main.go +0 -45
- package/templates/_shared/AGENTS.md +0 -146
- package/templates/_shared/CLAUDE.md +0 -1
- package/templates/_shared/GO-LICENSE +0 -27
- package/templates/_shared/GO-PATENTS +0 -22
- package/templates/_shared/LICENSES/TEMPLATE.txt +0 -21
- package/templates/_shared/third-party-notices.mjs +0 -51
- package/templates/binary/LICENSES/GO-LICENSE +0 -27
- package/templates/binary/LICENSES/GO-PATENTS +0 -22
- package/templates/binary/dsm-package.yaml +0 -46
- package/templates/binary/example/main.go +0 -16
- package/templates/binary/gitignore +0 -2
- package/templates/binary/i18n/messages/de.json +0 -4
- package/templates/binary/i18n/messages/en.json +0 -4
- package/templates/binary/i18n/messages/es.json +0 -4
- package/templates/binary/i18n/messages/fr.json +0 -4
- package/templates/binary/i18n/messages/it.json +0 -4
- package/templates/binary/i18n/messages/ja.json +0 -4
- package/templates/binary/i18n/messages/ko.json +0 -4
- package/templates/binary/i18n/messages/zh-CN.json +0 -4
- package/templates/binary/i18n/messages/zh-TW.json +0 -4
- package/templates/binary/ui/app.css +0 -4
- package/templates/binary/ui/app.js +0 -32
- package/templates/compose/compose.yaml +0 -8
- package/templates/compose/synology-app.yaml +0 -16
- package/templates/native-authorization/AuthorizationGate.vue +0 -91
- package/templates/native-authorization/i18n/de.json +0 -37
- package/templates/native-authorization/i18n/en.json +0 -37
- package/templates/native-authorization/i18n/es.json +0 -37
- package/templates/native-authorization/i18n/fr.json +0 -37
- package/templates/native-authorization/i18n/index.ts +0 -15
- package/templates/native-authorization/i18n/it.json +0 -37
- package/templates/native-authorization/i18n/ja.json +0 -37
- package/templates/native-authorization/i18n/ko.json +0 -37
- package/templates/native-authorization/i18n/zh-CN.json +0 -37
- package/templates/native-authorization/i18n/zh-TW.json +0 -37
- package/templates/native-go/README.md +0 -459
- package/templates/native-go/backend/THIRD_PARTY_NOTICES.txt +0 -61
- package/templates/native-go/backend/cmd/app/main.go +0 -95
- package/templates/native-go/backend/cmd/background-worker/main.go +0 -38
- package/templates/native-go/backend/go.mod +0 -9
- package/templates/native-go/backend/go.sum +0 -4
- package/templates/native-go/backend/internal/api/cgi_framing_test.go +0 -32
- package/templates/native-go/backend/internal/api/cookie_review_test.go +0 -28
- package/templates/native-go/backend/internal/api/deadline_test.go +0 -114
- package/templates/native-go/backend/internal/api/dsm-session.go +0 -54
- package/templates/native-go/backend/internal/api/dsm-session_test.go +0 -51
- package/templates/native-go/backend/internal/api/entry_test.go +0 -47
- package/templates/native-go/backend/internal/api/errors.go +0 -47
- package/templates/native-go/backend/internal/api/permissions.go +0 -161
- package/templates/native-go/backend/internal/api/permissions.json +0 -5
- package/templates/native-go/backend/internal/api/permissions_test.go +0 -113
- package/templates/native-go/backend/internal/api/policy_fixture_test.go +0 -8
- package/templates/native-go/backend/internal/api/registry.go +0 -142
- package/templates/native-go/backend/internal/api/registry_test.go +0 -344
- package/templates/native-go/backend/internal/api/resource_limits_test.go +0 -87
- package/templates/native-go/backend/internal/api/sdk-permissions.json +0 -59
- package/templates/native-go/backend/internal/api/sdk_policy_test.go +0 -31
- package/templates/native-go/backend/internal/api/server.go +0 -305
- package/templates/native-go/backend/internal/api/testdata/permissions-cases.json +0 -172
- package/templates/native-go/backend/internal/app/background.go +0 -249
- package/templates/native-go/backend/internal/app/background_none.go +0 -8
- package/templates/native-go/backend/internal/app/background_owner.go +0 -38
- package/templates/native-go/backend/internal/app/background_owner_test.go +0 -163
- package/templates/native-go/backend/internal/app/background_schedule.go +0 -69
- package/templates/native-go/backend/internal/app/background_schedule_test.go +0 -62
- package/templates/native-go/backend/internal/app/background_test.go +0 -320
- package/templates/native-go/backend/internal/app/delegate_config.go +0 -57
- package/templates/native-go/backend/internal/app/delegate_config_test.go +0 -28
- package/templates/native-go/backend/internal/app/delegate_none.go +0 -5
- package/templates/native-go/backend/internal/app/identity.go +0 -20
- package/templates/native-go/backend/internal/app/identity_test.go +0 -15
- package/templates/native-go/backend/internal/app/migrations.go +0 -41
- package/templates/native-go/backend/internal/app/migrations_test.go +0 -41
- package/templates/native-go/backend/internal/app/portal.go +0 -30
- package/templates/native-go/backend/internal/app/portal_test.go +0 -55
- package/templates/native-go/backend/internal/app/root_none.go +0 -9
- package/templates/native-go/backend/internal/app/routes.go +0 -137
- package/templates/native-go/backend/internal/app/routes_test.go +0 -165
- package/templates/native-go/backend/internal/app/session_files.go +0 -9
- package/templates/native-go/backend/internal/app/session_files_test.go +0 -14
- package/templates/native-go/backend/internal/app/shared_folder.go +0 -144
- package/templates/native-go/backend/internal/app/shared_folder_test.go +0 -158
- package/templates/native-go/backend/internal/background/access.go +0 -57
- package/templates/native-go/backend/internal/background/lock_test.go +0 -131
- package/templates/native-go/backend/internal/background/owner_test.go +0 -118
- package/templates/native-go/backend/internal/background/runner.go +0 -185
- package/templates/native-go/backend/internal/background/runner_test.go +0 -209
- package/templates/native-go/backend/internal/background/schedule.go +0 -336
- package/templates/native-go/backend/internal/background/schedule_test.go +0 -368
- package/templates/native-go/backend/internal/background/store.go +0 -825
- package/templates/native-go/backend/internal/background/store_test.go +0 -365
- package/templates/native-go/backend/internal/datamigrate/migrate.go +0 -191
- package/templates/native-go/backend/internal/datamigrate/migrate_test.go +0 -177
- package/templates/native-go/backend/internal/dsm/admin.go +0 -76
- package/templates/native-go/backend/internal/dsm/admin_linux.go +0 -110
- package/templates/native-go/backend/internal/dsm/admin_linux_test.go +0 -105
- package/templates/native-go/backend/internal/dsm/admin_other.go +0 -15
- package/templates/native-go/backend/internal/dsm/admin_test.go +0 -67
- package/templates/native-go/backend/internal/dsm/apppriv.go +0 -30
- package/templates/native-go/backend/internal/dsm/auth.go +0 -94
- package/templates/native-go/backend/internal/dsm/auth_test.go +0 -159
- package/templates/native-go/backend/internal/dsm/bridge_file.go +0 -75
- package/templates/native-go/backend/internal/dsm/bridge_file_test.go +0 -57
- package/templates/native-go/backend/internal/dsm/entry.go +0 -177
- package/templates/native-go/backend/internal/dsm/entry_test.go +0 -315
- package/templates/native-go/backend/internal/dsm/native/admin-aarch64.elf +0 -0
- package/templates/native-go/backend/internal/dsm/native/admin-armv7.elf +0 -0
- package/templates/native-go/backend/internal/dsm/native/admin-x86_64.elf +0 -0
- package/templates/native-go/backend/internal/dsm/native/admin_check.c +0 -28
- package/templates/native-go/backend/internal/dsm/native/apppriv-aarch64.elf +0 -0
- package/templates/native-go/backend/internal/dsm/native/apppriv-armv7.elf +0 -0
- package/templates/native-go/backend/internal/dsm/native/apppriv-x86_64.elf +0 -0
- package/templates/native-go/backend/internal/dsm/native/apppriv_check.c +0 -33
- package/templates/native-go/backend/internal/dsm/native/build.sh +0 -18
- package/templates/native-go/backend/internal/dsm/native/licenses/GLIBC-NOTICES.txt +0 -400
- package/templates/native-go/backend/internal/dsm/native/licenses/LGPL-2.1.txt +0 -501
- package/templates/native-go/backend/internal/dsm/native/licenses/SOURCE.txt +0 -5
- package/templates/native-go/backend/internal/dsm/native/licenses/ZIG-MIT.txt +0 -21
- package/templates/native-go/backend/internal/dsm/native/provenance.json +0 -18
- package/templates/native-go/backend/internal/filestation/browse_test.go +0 -67
- package/templates/native-go/backend/internal/filestation/check_permission.go +0 -71
- package/templates/native-go/backend/internal/filestation/check_permission_test.go +0 -77
- package/templates/native-go/backend/internal/filestation/client.go +0 -337
- package/templates/native-go/backend/internal/filestation/client_test.go +0 -155
- package/templates/native-go/backend/internal/filestation/doc.go +0 -4
- package/templates/native-go/backend/internal/filestation/download_dsm71_test.go +0 -82
- package/templates/native-go/backend/internal/filestation/http.go +0 -70
- package/templates/native-go/backend/internal/filestation/http_test.go +0 -188
- package/templates/native-go/backend/internal/filestation/operations_test.go +0 -206
- package/templates/native-go/backend/internal/filestation/read_file_test.go +0 -89
- package/templates/native-go/backend/internal/filestation/sdk_policy_test.go +0 -39
- package/templates/native-go/backend/internal/filestation/service.go +0 -254
- package/templates/native-go/backend/internal/filestation/service_test.go +0 -74
- package/templates/native-go/backend/internal/filestation/upload_stream.go +0 -76
- package/templates/native-go/backend/internal/filestation/upload_stream_test.go +0 -77
- package/templates/native-go/backend/internal/filestation/write.go +0 -32
- package/templates/native-go/backend/internal/filestation/write_test.go +0 -124
- package/templates/native-go/backend/internal/identity/README.md +0 -59
- package/templates/native-go/backend/internal/identity/dsm.go +0 -115
- package/templates/native-go/backend/internal/identity/http.go +0 -291
- package/templates/native-go/backend/internal/identity/identity_test.go +0 -530
- package/templates/native-go/backend/internal/identity/service.go +0 -159
- package/templates/native-go/backend/internal/identity/store.go +0 -109
- package/templates/native-go/backend/internal/jsonlimits/limits.go +0 -48
- package/templates/native-go/backend/internal/jsonlimits/limits_test.go +0 -52
- package/templates/native-go/backend/internal/portal/portal.go +0 -138
- package/templates/native-go/backend/internal/portal/portal_test.go +0 -89
- package/templates/native-go/dsm-package.yaml +0 -71
- package/templates/native-go/gitignore +0 -1
- package/templates/native-go/i18n/glossary.json +0 -663
- package/templates/native-go/i18n/messages/de.json +0 -29
- package/templates/native-go/i18n/messages/en.json +0 -29
- package/templates/native-go/i18n/messages/es.json +0 -29
- package/templates/native-go/i18n/messages/fr.json +0 -29
- package/templates/native-go/i18n/messages/it.json +0 -29
- package/templates/native-go/i18n/messages/ja.json +0 -29
- package/templates/native-go/i18n/messages/ko.json +0 -29
- package/templates/native-go/i18n/messages/zh-CN.json +0 -29
- package/templates/native-go/i18n/messages/zh-TW.json +0 -29
- package/templates/native-go/ui/app.css +0 -45
- package/templates/native-go/ui/app.js +0 -111
- package/templates/native-go-delegate/DELEGATE.md +0 -263
- package/templates/native-go-delegate/backend/cmd/background-worker/main.go +0 -48
- package/templates/native-go-delegate/backend/internal/app/delegate.go +0 -25
- package/templates/native-go-delegate/backend/internal/app/delegate_on.go +0 -5
- package/templates/native-go-delegate/backend/internal/app/delegate_routes_test.go +0 -31
- package/templates/native-go-delegate/backend/internal/background/delegate_review_test.go +0 -174
- package/templates/native-go-delegate/backend/internal/background/delegated.go +0 -277
- package/templates/native-go-delegate/backend/internal/background/delegated_moves.go +0 -270
- package/templates/native-go-delegate/backend/internal/background/delegated_test.go +0 -34
- package/templates/native-go-delegate/backend/internal/delegate/admission_recovery_test.go +0 -410
- package/templates/native-go-delegate/backend/internal/delegate/busy_review_test.go +0 -15
- package/templates/native-go-delegate/backend/internal/delegate/cancel_contract_test.go +0 -95
- package/templates/native-go-delegate/backend/internal/delegate/client.go +0 -151
- package/templates/native-go-delegate/backend/internal/delegate/client_test.go +0 -214
- package/templates/native-go-delegate/backend/internal/delegate/destination.go +0 -110
- package/templates/native-go-delegate/backend/internal/delegate/destination_state.go +0 -117
- package/templates/native-go-delegate/backend/internal/delegate/destination_state_test.go +0 -60
- package/templates/native-go-delegate/backend/internal/delegate/destination_test.go +0 -116
- package/templates/native-go-delegate/backend/internal/delegate/example.go +0 -81
- package/templates/native-go-delegate/backend/internal/delegate/example_test.go +0 -91
- package/templates/native-go-delegate/backend/internal/delegate/executor_contract_test.go +0 -511
- package/templates/native-go-delegate/backend/internal/delegate/files.go +0 -132
- package/templates/native-go-delegate/backend/internal/delegate/long_running_routes.go +0 -92
- package/templates/native-go-delegate/backend/internal/delegate/long_running_routes_test.go +0 -99
- package/templates/native-go-delegate/backend/internal/delegate/move.go +0 -348
- package/templates/native-go-delegate/backend/internal/delegate/move_test.go +0 -351
- package/templates/native-go-delegate/backend/internal/delegate/operations_list.go +0 -65
- package/templates/native-go-delegate/backend/internal/delegate/operations_list_test.go +0 -114
- package/templates/native-go-delegate/backend/internal/delegate/retry.go +0 -106
- package/templates/native-go-delegate/backend/internal/delegate/retry_test.go +0 -143
- package/templates/native-go-delegate/backend/internal/delegate/service.go +0 -364
- package/templates/native-go-delegate/backend/internal/delegate/service_test.go +0 -318
- package/templates/native-go-delegate/backend/internal/delegate/staging.go +0 -121
- package/templates/native-go-delegate/backend/internal/delegate/status_disabled_test.go +0 -51
- package/templates/native-go-delegate/backend/internal/delegate/testdata/executor_contract.txt +0 -112
- package/templates/native-go-delegate/backend/internal/delegate/transient_contract_test.go +0 -137
- package/templates/native-go-delegate/backend/internal/delegate/wait_cancel_test.go +0 -101
- package/templates/native-go-delegate/backend/internal/delegate/worker.go +0 -225
- package/templates/native-go-delegate/backend/internal/filestation/files.go +0 -43
- package/templates/native-go-delegate/backend/internal/filestation/files_test.go +0 -59
- package/templates/native-go-delegate/frontend/src/CapabilityPanels.vue +0 -37
- package/templates/native-go-delegate/frontend/src/delegate/BackgroundSavePanel.vue +0 -113
- package/templates/native-go-delegate/frontend/src/delegate/DelegatePanel.vue +0 -70
- package/templates/native-go-delegate/frontend/src/delegate/copy.ts +0 -8
- package/templates/native-go-delegate/frontend/src/delegate/i18n/waiting.json +0 -11
- package/templates/native-go-delegate/frontend/test/background-save.test.ts +0 -121
- package/templates/native-go-delegate/frontend/test/delegate.test.ts +0 -145
- package/templates/native-go-delegate/frontend/test/scope-settings.test.ts +0 -49
- package/templates/native-go-delegate/test-frontend.sh +0 -12
- package/templates/native-go-delegate/test.sh +0 -18
- package/templates/native-go-jobs/BACKGROUND.md +0 -108
- package/templates/native-go-jobs/backend/internal/app/background_on.go +0 -7
- package/templates/native-go-jobs/backend/internal/app/background_routes_test.go +0 -90
- package/templates/native-go-jobs/frontend/src/background/BackgroundPanel.vue +0 -170
- package/templates/native-go-jobs/frontend/src/background/i18n/de.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n/en.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n/es.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n/fr.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n/it.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n/ja.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n/ko.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n/zh-CN.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n/zh-TW.json +0 -75
- package/templates/native-go-jobs/frontend/src/background/i18n.ts +0 -19
- package/templates/native-go-jobs/frontend/src/background/picker-provider.ts +0 -12
- package/templates/native-go-jobs/frontend/src/background/request-key.ts +0 -5
- package/templates/native-go-jobs/frontend/test/background.test.ts +0 -205
- package/templates/native-go-root-ops/backend/internal/app/executor.go +0 -140
- package/templates/native-go-root-ops/backend/internal/app/executor_test.go +0 -117
- package/templates/native-go-root-ops/root/whoami.sh +0 -3
- package/templates/native-go-vue/README.md +0 -47
- package/templates/native-go-vue/frontend/DESIGN.md +0 -61
- package/templates/native-go-vue/frontend/package-lock.json +0 -2530
- package/templates/native-go-vue/frontend/package.json +0 -6
- package/templates/native-go-vue/frontend/src/App.vue +0 -96
- package/templates/native-go-vue/frontend/src/CapabilityPanels.vue +0 -6
- package/templates/native-go-vue/frontend/src/context.ts +0 -78
- package/templates/native-go-vue/frontend/src/delegate/ExecutorSettings.vue +0 -70
- package/templates/native-go-vue/frontend/src/delegate/catalogs.ts +0 -11
- package/templates/native-go-vue/frontend/src/delegate/copy.test.ts +0 -12
- package/templates/native-go-vue/frontend/src/delegate/copy.ts +0 -4
- package/templates/native-go-vue/frontend/src/delegate/executor-settings.test.ts +0 -23
- package/templates/native-go-vue/frontend/src/delegate/executor-setup.ts +0 -24
- package/templates/native-go-vue/frontend/src/delegate/facade.test.ts +0 -100
- package/templates/native-go-vue/frontend/src/delegate/facade.ts +0 -85
- package/templates/native-go-vue/frontend/src/delegate/i18n/de.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/i18n/en.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/i18n/es.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/i18n/fr.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/i18n/it.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/i18n/ja.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/i18n/ko.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/de.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/en.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/es.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/fr.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/it.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/ja.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/ko.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-CN.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/save/zh-TW.json +0 -42
- package/templates/native-go-vue/frontend/src/delegate/i18n/zh-CN.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/i18n/zh-TW.json +0 -47
- package/templates/native-go-vue/frontend/src/delegate/long-running.ts +0 -57
- package/templates/native-go-vue/frontend/src/delegate/save-copy.test.ts +0 -12
- package/templates/native-go-vue/frontend/src/delegate/save-copy.ts +0 -24
- package/templates/native-go-vue/frontend/src/delegate/scoped-picker.test.ts +0 -12
- package/templates/native-go-vue/frontend/src/delegate/scoped-picker.ts +0 -21
- package/templates/native-go-vue/frontend/src/files/FileBrowser.vue +0 -131
- package/templates/native-go-vue/frontend/src/files/FilesPage.vue +0 -35
- package/templates/native-go-vue/frontend/src/files/files.test.ts +0 -100
- package/templates/native-go-vue/frontend/src/files/provider.test.ts +0 -48
- package/templates/native-go-vue/frontend/src/files/transfers.test.ts +0 -27
- package/templates/native-go-vue/frontend/src/files/transfers.ts +0 -25
- package/templates/native-go-vue/frontend/src/i18n/de.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n/en.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n/es.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n/fr.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n/it.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n/ja.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n/ko.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n/zh-CN.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n/zh-TW.json +0 -20
- package/templates/native-go-vue/frontend/src/i18n.ts +0 -13
- package/templates/native-go-vue/frontend/src/identity/DESIGN.md +0 -46
- package/templates/native-go-vue/frontend/src/identity/LoginPage.vue +0 -78
- package/templates/native-go-vue/frontend/src/identity/i18n/de.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n/en.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n/es.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n/fr.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n/it.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n/ja.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n/ko.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n/zh-CN.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n/zh-TW.json +0 -27
- package/templates/native-go-vue/frontend/src/identity/i18n.ts +0 -14
- package/templates/native-go-vue/frontend/src/identity/login.test.ts +0 -32
- package/templates/native-go-vue/frontend/src/identity/session.test.ts +0 -33
- package/templates/native-go-vue/frontend/src/identity/session.ts +0 -74
- package/templates/native-go-vue/frontend/src/main.ts +0 -32
- package/templates/native-go-vue/frontend/src/nas/NasPicker.vue +0 -42
- package/templates/native-go-vue/frontend/src/nas/contract.ts +0 -12
- package/templates/native-go-vue/frontend/src/nas/destination.test.ts +0 -48
- package/templates/native-go-vue/frontend/src/nas/i18n/files/de.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n/files/en.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n/files/es.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n/files/fr.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n/files/it.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n/files/ja.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n/files/ko.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n/files/zh-CN.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n/files/zh-TW.json +0 -41
- package/templates/native-go-vue/frontend/src/nas/i18n.ts +0 -2
- package/templates/native-go-vue/frontend/src/nas/locale.ts +0 -24
- package/templates/native-go-vue/frontend/src/nas/provider.ts +0 -50
- package/templates/native-go-vue/frontend/src/nas/use-request.ts +0 -18
- package/templates/native-go-vue/frontend/src/portal/PortalSettings.vue +0 -39
- package/templates/native-go-vue/frontend/src/shell/AppShell.vue +0 -48
- package/templates/native-go-vue/frontend/src/shell/i18n/de.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n/en.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n/es.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n/fr.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n/it.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n/ja.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n/ko.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n/zh-CN.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n/zh-TW.json +0 -4
- package/templates/native-go-vue/frontend/src/shell/i18n.ts +0 -17
- package/templates/native-go-vue/frontend/src/shell/pages.ts +0 -15
- package/templates/native-go-vue/frontend/src/style.css +0 -27
- package/templates/native-go-vue/frontend/test/apps.test.ts +0 -57
- package/templates/native-go-vue/frontend/test/native-controls.test.ts +0 -27
- package/templates/native-go-vue/frontend/test/portal-settings.test.ts +0 -71
- package/templates/native-go-vue/frontend/test/shell-i18n.test.ts +0 -50
- package/templates/native-go-vue/frontend/test/shell-ui.test.ts +0 -20
- package/templates/native-go-vue/frontend/test/shell.test.ts +0 -30
- package/templates/native-go-vue/frontend/tsconfig.json +0 -1
- package/templates/native-go-vue/frontend/vite.config.ts +0 -10
- package/templates/native-go-vue/gitignore +0 -2
- /package/{dist/templates/_daemon → assets/go/daemon}/fixture_linux_test.go +0 -0
- /package/{dist/templates/_daemon → assets/go/daemon}/fixture_other_test.go +0 -0
- /package/{dist/templates/_daemon → assets/go/daemon}/go.mod +0 -0
- /package/{dist/templates/_daemon → assets/go/daemon}/main.go +0 -0
- /package/{dist/templates/_daemon → assets/go/daemon}/main_test.go +0 -0
- /package/{dist/templates/_daemon → assets/go/daemon}/process_linux.go +0 -0
- /package/{dist/templates/_daemon → assets/go/daemon}/process_linux_test.go +0 -0
- /package/{dist/templates/_daemon → assets/go/daemon}/process_other.go +0 -0
- /package/{dist/templates/_daemon → assets/go/daemon}/testdata/child.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/auth.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/auth_test.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/cgi.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/cgi_test.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/csrf.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/csrf_test.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/directory.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/directory_test.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/gateway.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/gateway_test.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/go.mod +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/groups.go +0 -0
- /package/{dist/templates/_gateway → assets/go/gateway}/main.go +0 -0
- /package/{dist/templates/_shared → assets/licenses}/GO-LICENSE +0 -0
- /package/{dist/templates/_shared → assets/licenses}/GO-PATENTS +0 -0
- /package/{dist/templates/_shared/LICENSES → assets/licenses}/TEMPLATE.txt +0 -0
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
// Package app holds this package's business operations. Add a route here and
|
|
2
|
-
// register its handler here. App permissions live in internal/api/permissions.json; SDK capability routes
|
|
3
|
-
// use the immutable SDK policy.
|
|
4
|
-
// unlisted methods require membership in DSM's administrators group.
|
|
5
|
-
//
|
|
6
|
-
//line dsmapp/internal/app/routes.go:1
|
|
7
|
-
package app
|
|
8
|
-
|
|
9
|
-
import (
|
|
10
|
-
"bytes"
|
|
11
|
-
"context"
|
|
12
|
-
"encoding/json"
|
|
13
|
-
"errors"
|
|
14
|
-
"io/fs"
|
|
15
|
-
"os"
|
|
16
|
-
"path/filepath"
|
|
17
|
-
"runtime"
|
|
18
|
-
"time"
|
|
19
|
-
"unicode/utf8"
|
|
20
|
-
|
|
21
|
-
"dsmapp/internal/api"
|
|
22
|
-
"dsmapp/internal/filestation"
|
|
23
|
-
)
|
|
24
|
-
|
|
25
|
-
// Config is fixed at build time and startup, never taken from a request.
|
|
26
|
-
type Config struct {
|
|
27
|
-
DelegateScope string
|
|
28
|
-
DelegateOperationsJSON, DelegateDestinationsJSON, DelegateLifetime string
|
|
29
|
-
ExecutorDigest, PolicyDigest string
|
|
30
|
-
|
|
31
|
-
// SessionFiles is the interactive File Station adapter; nil keeps legacy refusal.
|
|
32
|
-
SessionFiles *filestation.Service
|
|
33
|
-
PackageID string
|
|
34
|
-
Version string
|
|
35
|
-
// DataDir is the package's persistent, package-owned directory
|
|
36
|
-
// (/var/packages/<package>/var). It survives upgrades.
|
|
37
|
-
DataDir string
|
|
38
|
-
// VolumeRoot is where /volumeN lives; empty means "/". Tests set it.
|
|
39
|
-
VolumeRoot string
|
|
40
|
-
// Portal serves portal.status; PortalConfig overrides DSM's saved
|
|
41
|
-
// AppPortal.json path in tests.
|
|
42
|
-
Portal bool
|
|
43
|
-
PortalConfig string
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
func Routes(cfg Config) []api.Route {
|
|
47
|
-
routes := cfg.delegateRoutes()
|
|
48
|
-
routes = append(routes, []api.Route{
|
|
49
|
-
api.Handle("app.status", cfg.status),
|
|
50
|
-
api.Handle("greeting.get", cfg.getGreeting),
|
|
51
|
-
api.Handle("greeting.set", cfg.setGreeting),
|
|
52
|
-
}...)
|
|
53
|
-
routes = append(routes, cfg.SessionFiles.Routes()...)
|
|
54
|
-
routes = append(routes, cfg.backgroundRoutes()...)
|
|
55
|
-
routes = append(routes, cfg.portalRoutes()...)
|
|
56
|
-
return append(routes, cfg.rootRoutes()...)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
func (cfg Config) status(_ context.Context, caller api.Caller, _ json.RawMessage) (any, error) {
|
|
60
|
-
return cfg.withSharedFolders(map[string]any{
|
|
61
|
-
"package": cfg.PackageID,
|
|
62
|
-
"version": cfg.Version,
|
|
63
|
-
"user": caller.User(),
|
|
64
|
-
"admin": caller.Admin(),
|
|
65
|
-
"process": map[string]int{"uid": os.Getuid(), "gid": os.Getgid()},
|
|
66
|
-
"go_version": runtime.Version(),
|
|
67
|
-
"platform": runtime.GOOS + "/" + runtime.GOARCH,
|
|
68
|
-
"time": time.Now().UTC().Format(time.RFC3339),
|
|
69
|
-
}), nil
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
type greeting struct {
|
|
73
|
-
Text string `json:"text"`
|
|
74
|
-
UpdatedBy string `json:"updated_by,omitempty"`
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
func (cfg Config) greetingPath() string { return filepath.Join(cfg.DataDir, "greeting.json") }
|
|
78
|
-
|
|
79
|
-
func (cfg Config) getGreeting(context.Context, api.Caller, json.RawMessage) (any, error) {
|
|
80
|
-
data, err := os.ReadFile(cfg.greetingPath())
|
|
81
|
-
if errors.Is(err, fs.ErrNotExist) {
|
|
82
|
-
return greeting{Text: "Hello"}, nil
|
|
83
|
-
}
|
|
84
|
-
if err != nil {
|
|
85
|
-
return nil, err
|
|
86
|
-
}
|
|
87
|
-
var g greeting
|
|
88
|
-
return g, json.Unmarshal(data, &g)
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
func (cfg Config) setGreeting(_ context.Context, caller api.Caller, params json.RawMessage) (any, error) {
|
|
92
|
-
var in struct {
|
|
93
|
-
Text string `json:"text"`
|
|
94
|
-
}
|
|
95
|
-
if err := decodeParams(params, &in); err != nil {
|
|
96
|
-
return nil, err
|
|
97
|
-
}
|
|
98
|
-
if n := utf8.RuneCountInString(in.Text); n < 1 || n > 200 {
|
|
99
|
-
return nil, api.BadRequest("text must be 1 to 200 characters")
|
|
100
|
-
}
|
|
101
|
-
g := greeting{Text: in.Text, UpdatedBy: caller.User()}
|
|
102
|
-
data, err := json.Marshal(g)
|
|
103
|
-
if err != nil {
|
|
104
|
-
return nil, err
|
|
105
|
-
}
|
|
106
|
-
return g, writeFileAtomic(cfg.greetingPath(), data)
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// decodeParams decodes params strictly: unknown fields are an error.
|
|
110
|
-
func decodeParams(params json.RawMessage, into any) error {
|
|
111
|
-
if len(params) == 0 {
|
|
112
|
-
params = json.RawMessage(`{}`)
|
|
113
|
-
}
|
|
114
|
-
dec := json.NewDecoder(bytes.NewReader(params))
|
|
115
|
-
dec.DisallowUnknownFields()
|
|
116
|
-
if err := dec.Decode(into); err != nil {
|
|
117
|
-
return api.BadRequest("invalid params: " + err.Error())
|
|
118
|
-
}
|
|
119
|
-
return nil
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// writeFileAtomic replaces path in one rename, so readers never see half a file.
|
|
123
|
-
func writeFileAtomic(path string, data []byte) error {
|
|
124
|
-
tmp, err := os.CreateTemp(filepath.Dir(path), ".tmp-*")
|
|
125
|
-
if err != nil {
|
|
126
|
-
return err
|
|
127
|
-
}
|
|
128
|
-
defer os.Remove(tmp.Name())
|
|
129
|
-
if _, err := tmp.Write(data); err != nil {
|
|
130
|
-
tmp.Close()
|
|
131
|
-
return err
|
|
132
|
-
}
|
|
133
|
-
if err := tmp.Close(); err != nil {
|
|
134
|
-
return err
|
|
135
|
-
}
|
|
136
|
-
return os.Rename(tmp.Name(), path)
|
|
137
|
-
}
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
package app
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"encoding/json"
|
|
5
|
-
"net/http"
|
|
6
|
-
"net/http/httptest"
|
|
7
|
-
"os"
|
|
8
|
-
"strings"
|
|
9
|
-
"testing"
|
|
10
|
-
|
|
11
|
-
"dsmapp/internal/api"
|
|
12
|
-
)
|
|
13
|
-
|
|
14
|
-
type stubAuth struct {
|
|
15
|
-
identity api.Identity
|
|
16
|
-
err error
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
func (s stubAuth) Authenticate(*http.Request) (api.Identity, error) { return s.identity, s.err }
|
|
20
|
-
|
|
21
|
-
func testConfig(t *testing.T) Config {
|
|
22
|
-
return Config{PackageID: "HelloGo", Version: "0.1.0-0001", DataDir: t.TempDir()}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// call returns the envelope's error code ("" on success) and the envelope.
|
|
26
|
-
func call(t *testing.T, cfg Config, auth api.Authenticator, method, params string, permissionJSON ...[]byte) (string, map[string]any) {
|
|
27
|
-
t.Helper()
|
|
28
|
-
previous := lookupSubmitterUID
|
|
29
|
-
lookupSubmitterUID = func(string) string { return "1024" }
|
|
30
|
-
defer func() { lookupSubmitterUID = previous }()
|
|
31
|
-
srv, err := api.NewServer(auth, Routes(cfg)...)
|
|
32
|
-
if len(permissionJSON) != 0 {
|
|
33
|
-
srv, err = api.NewServerWithPermissions(auth, permissionJSON[0], Routes(cfg)...)
|
|
34
|
-
}
|
|
35
|
-
if err != nil {
|
|
36
|
-
t.Fatal(err)
|
|
37
|
-
}
|
|
38
|
-
body := `{"method":"` + method + `","params":` + params + `}`
|
|
39
|
-
req := httptest.NewRequest(http.MethodPost, "/api.cgi", strings.NewReader(body))
|
|
40
|
-
req.Header.Set("Content-Type", "application/json")
|
|
41
|
-
rec := httptest.NewRecorder()
|
|
42
|
-
srv.ServeHTTP(rec, req)
|
|
43
|
-
var out map[string]any
|
|
44
|
-
if err := json.Unmarshal(rec.Body.Bytes(), &out); err != nil {
|
|
45
|
-
t.Fatalf("not JSON: %s", rec.Body.String())
|
|
46
|
-
}
|
|
47
|
-
if rec.Code != http.StatusOK {
|
|
48
|
-
t.Fatalf("HTTP %d: DSM replaces non-200 CGI bodies", rec.Code)
|
|
49
|
-
}
|
|
50
|
-
code := ""
|
|
51
|
-
if e, ok := out["error"].(map[string]any); ok {
|
|
52
|
-
code, _ = e["code"].(string)
|
|
53
|
-
}
|
|
54
|
-
return code, out
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
var (
|
|
58
|
-
alice = stubAuth{identity: api.Identity{User: "alice", Admin: true}}
|
|
59
|
-
bob = stubAuth{identity: api.Identity{User: "bob"}}
|
|
60
|
-
nobody = stubAuth{err: api.ErrNoSession}
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
// sampleParams holds valid params for every route, so the denial test below
|
|
64
|
-
// proves the refusal came from the policy and not from bad input.
|
|
65
|
-
var sampleParams = map[string]string{
|
|
66
|
-
"app.status": `{}`,
|
|
67
|
-
"greeting.get": `{}`,
|
|
68
|
-
"greeting.set": `{"text":"Hi"}`,
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
func TestEveryRouteHasSampleParamsAndNoneIsPublic(t *testing.T) {
|
|
72
|
-
routes := Routes(testConfig(t))
|
|
73
|
-
if len(routes) != len(sampleParams) {
|
|
74
|
-
t.Fatalf("%d routes but %d sample params: add the new route to sampleParams", len(routes), len(sampleParams))
|
|
75
|
-
}
|
|
76
|
-
for _, r := range routes {
|
|
77
|
-
if _, ok := sampleParams[r.Method()]; !ok {
|
|
78
|
-
t.Errorf("route %s has no sample params", r.Method())
|
|
79
|
-
}
|
|
80
|
-
if r.Public() {
|
|
81
|
-
t.Errorf("route %s is public; this template ships none", r.Method())
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
func TestEveryRouteRefusesCallersWithoutASessionAndChangesNothing(t *testing.T) {
|
|
87
|
-
for _, r := range Routes(testConfig(t)) {
|
|
88
|
-
cfg := testConfig(t)
|
|
89
|
-
code, _ := call(t, cfg, nobody, r.Method(), sampleParams[r.Method()])
|
|
90
|
-
if code != "session_required" {
|
|
91
|
-
t.Errorf("%s: %q, want session_required", r.Method(), code)
|
|
92
|
-
}
|
|
93
|
-
assertDataDirEmpty(t, cfg)
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
func TestAdministratorRoutesRefuseOrdinaryUsersAndChangeNothing(t *testing.T) {
|
|
98
|
-
for _, r := range Routes(testConfig(t)) {
|
|
99
|
-
if !r.AdminOnly() {
|
|
100
|
-
continue
|
|
101
|
-
}
|
|
102
|
-
cfg := testConfig(t)
|
|
103
|
-
code, _ := call(t, cfg, bob, r.Method(), sampleParams[r.Method()])
|
|
104
|
-
if code != "admin_required" {
|
|
105
|
-
t.Errorf("%s: %q, want admin_required", r.Method(), code)
|
|
106
|
-
}
|
|
107
|
-
assertDataDirEmpty(t, cfg)
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
func TestEveryRouteSucceedsForAnAdmin(t *testing.T) {
|
|
112
|
-
for _, r := range Routes(testConfig(t)) {
|
|
113
|
-
code, out := call(t, testConfig(t), alice, r.Method(), sampleParams[r.Method()])
|
|
114
|
-
want := ""
|
|
115
|
-
if strings.HasPrefix(r.Method(), "jobs.") {
|
|
116
|
-
want = "unavailable"
|
|
117
|
-
}
|
|
118
|
-
if code != want {
|
|
119
|
-
t.Errorf("%s: %q %v", r.Method(), code, out)
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
func TestStatusReportsPackageAndCaller(t *testing.T) {
|
|
125
|
-
code, out := call(t, testConfig(t), alice, "app.status", `{}`)
|
|
126
|
-
data := out["data"].(map[string]any)
|
|
127
|
-
if code != "" || data["package"] != "HelloGo" || data["version"] != "0.1.0-0001" || data["user"] != "alice" || data["admin"] != true {
|
|
128
|
-
t.Fatalf("got %q %v", code, out)
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
func TestGreetingDefaultsAndAdminCanChangeIt(t *testing.T) {
|
|
133
|
-
cfg := testConfig(t)
|
|
134
|
-
_, out := call(t, cfg, alice, "greeting.get", `{}`)
|
|
135
|
-
if got := out["data"].(map[string]any)["text"]; got != "Hello" {
|
|
136
|
-
t.Fatalf("default greeting = %v", got)
|
|
137
|
-
}
|
|
138
|
-
if code, out := call(t, cfg, alice, "greeting.set", `{"text":"Hi from DSM"}`); code != "" {
|
|
139
|
-
t.Fatalf("set: %q %v", code, out)
|
|
140
|
-
}
|
|
141
|
-
_, out = call(t, cfg, alice, "greeting.get", `{}`)
|
|
142
|
-
data := out["data"].(map[string]any)
|
|
143
|
-
if data["text"] != "Hi from DSM" || data["updated_by"] != "alice" {
|
|
144
|
-
t.Fatalf("after set: %v", data)
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
func TestGreetingSetValidatesText(t *testing.T) {
|
|
149
|
-
for _, params := range []string{`{}`, `{"text":""}`, `{"text":"` + strings.Repeat("x", 201) + `"}`, `{"text":7}`, `{"text":"ok","extra":1}`} {
|
|
150
|
-
cfg := testConfig(t)
|
|
151
|
-
code, _ := call(t, cfg, alice, "greeting.set", params)
|
|
152
|
-
if code != "bad_request" {
|
|
153
|
-
t.Errorf("%s: %q, want bad_request", params, code)
|
|
154
|
-
}
|
|
155
|
-
assertDataDirEmpty(t, cfg)
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
func assertDataDirEmpty(t *testing.T, cfg Config) {
|
|
160
|
-
t.Helper()
|
|
161
|
-
entries, err := os.ReadDir(cfg.DataDir)
|
|
162
|
-
if err != nil || len(entries) != 0 {
|
|
163
|
-
t.Fatalf("data dir changed: %v %v", entries, err)
|
|
164
|
-
}
|
|
165
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
package app
|
|
2
|
-
|
|
3
|
-
// FileStationSession selects the interactive File Station adapter using the caller’s DSM session.
|
|
4
|
-
const FileStationSession = "session"
|
|
5
|
-
|
|
6
|
-
// SessionFilesEnabled accepts only the fixed build-time session setting.
|
|
7
|
-
func SessionFilesEnabled(fileStation string) bool {
|
|
8
|
-
return fileStation == FileStationSession
|
|
9
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
package app
|
|
2
|
-
|
|
3
|
-
import "testing"
|
|
4
|
-
|
|
5
|
-
func TestSessionFilesEnabledByTrustedBuildSetting(t *testing.T) {
|
|
6
|
-
for _, tc := range []struct {
|
|
7
|
-
value string
|
|
8
|
-
want bool
|
|
9
|
-
}{{"", false}, {"session", true}, {"yes", false}} {
|
|
10
|
-
if got := SessionFilesEnabled(tc.value); got != tc.want {
|
|
11
|
-
t.Errorf("%q: got %v, want %v", tc.value, got, tc.want)
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
}
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
package app
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"encoding/json"
|
|
5
|
-
"errors"
|
|
6
|
-
"fmt"
|
|
7
|
-
"io/fs"
|
|
8
|
-
"os"
|
|
9
|
-
"path/filepath"
|
|
10
|
-
"sort"
|
|
11
|
-
"strings"
|
|
12
|
-
"syscall"
|
|
13
|
-
)
|
|
14
|
-
|
|
15
|
-
// The install wizard stores the chosen Shared Folder's *name* in
|
|
16
|
-
// <DataDir>/config.json (see dsm-package.yaml install.sharedFolder). The path
|
|
17
|
-
// is resolved on every call, so a Shared Folder moved to another volume keeps
|
|
18
|
-
// working. config.json is written by the package's postinst/postupgrade, not
|
|
19
|
-
// by the app.
|
|
20
|
-
|
|
21
|
-
var (
|
|
22
|
-
ErrSharedFolderNotFound = errors.New("shared folder not found on any volume")
|
|
23
|
-
ErrSharedFolderAmbiguous = errors.New("shared folder name matches more than one volume")
|
|
24
|
-
)
|
|
25
|
-
|
|
26
|
-
// SharedFolder says where one configured Shared Folder is right now and what
|
|
27
|
-
// the package account may do there.
|
|
28
|
-
type SharedFolder struct {
|
|
29
|
-
Key string `json:"key"`
|
|
30
|
-
Name string `json:"name"`
|
|
31
|
-
Path string `json:"path,omitempty"`
|
|
32
|
-
Exists bool `json:"exists"`
|
|
33
|
-
Readable bool `json:"readable"`
|
|
34
|
-
Writable bool `json:"writable"`
|
|
35
|
-
Error string `json:"error,omitempty"`
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
func validShareName(name string) bool {
|
|
39
|
-
return name != "" && !strings.ContainsAny(name, "/\\\x00") && !strings.Contains(name, "..") &&
|
|
40
|
-
!strings.HasPrefix(name, "@") && !strings.HasPrefix(name, ".")
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// ReadSharedFolders returns the Shared Folder names the installer stored, by
|
|
44
|
-
// key. A package without config.json has none.
|
|
45
|
-
func ReadSharedFolders(dataDir string) (map[string]string, error) {
|
|
46
|
-
data, err := os.ReadFile(filepath.Join(dataDir, "config.json"))
|
|
47
|
-
if errors.Is(err, fs.ErrNotExist) {
|
|
48
|
-
return nil, nil
|
|
49
|
-
}
|
|
50
|
-
if err != nil {
|
|
51
|
-
return nil, err
|
|
52
|
-
}
|
|
53
|
-
var cfg struct {
|
|
54
|
-
Schema int `json:"schema"`
|
|
55
|
-
SharedFolders map[string]string `json:"shared_folders"`
|
|
56
|
-
}
|
|
57
|
-
if err := json.Unmarshal(data, &cfg); err != nil {
|
|
58
|
-
return nil, fmt.Errorf("config.json: %w", err)
|
|
59
|
-
}
|
|
60
|
-
if cfg.Schema != 1 {
|
|
61
|
-
return nil, fmt.Errorf("config.json: unsupported schema %d", cfg.Schema)
|
|
62
|
-
}
|
|
63
|
-
for key, name := range cfg.SharedFolders {
|
|
64
|
-
if !validShareName(name) {
|
|
65
|
-
return nil, fmt.Errorf("config.json: invalid shared folder name for %q", key)
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return cfg.SharedFolders, nil
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// ResolveSharedFolder finds /volumeN/<name> under root ("/" on a NAS).
|
|
72
|
-
func ResolveSharedFolder(root, name string) (string, error) {
|
|
73
|
-
if !validShareName(name) {
|
|
74
|
-
return "", fmt.Errorf("invalid shared folder name %q", name)
|
|
75
|
-
}
|
|
76
|
-
volumes, err := filepath.Glob(filepath.Join(root, "volume[0-9]*"))
|
|
77
|
-
if err != nil {
|
|
78
|
-
return "", err
|
|
79
|
-
}
|
|
80
|
-
var found []string
|
|
81
|
-
for _, volume := range volumes {
|
|
82
|
-
path := filepath.Join(volume, name)
|
|
83
|
-
if info, err := os.Stat(path); err == nil && info.IsDir() {
|
|
84
|
-
found = append(found, path)
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
switch len(found) {
|
|
88
|
-
case 0:
|
|
89
|
-
return "", ErrSharedFolderNotFound
|
|
90
|
-
case 1:
|
|
91
|
-
return found[0], nil
|
|
92
|
-
}
|
|
93
|
-
return "", ErrSharedFolderAmbiguous
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
const (
|
|
97
|
-
accessRead = 0x4 // R_OK
|
|
98
|
-
accessWrite = 0x2 // W_OK
|
|
99
|
-
accessExec = 0x1 // X_OK
|
|
100
|
-
)
|
|
101
|
-
|
|
102
|
-
// SharedFolders reports every configured Shared Folder, sorted by key. The
|
|
103
|
-
// error is a corrupt config.json.
|
|
104
|
-
func (cfg Config) SharedFolders() ([]SharedFolder, error) {
|
|
105
|
-
names, err := ReadSharedFolders(cfg.DataDir)
|
|
106
|
-
if err != nil {
|
|
107
|
-
return nil, err
|
|
108
|
-
}
|
|
109
|
-
root := cfg.VolumeRoot
|
|
110
|
-
if root == "" {
|
|
111
|
-
root = "/"
|
|
112
|
-
}
|
|
113
|
-
keys := make([]string, 0, len(names))
|
|
114
|
-
for key := range names {
|
|
115
|
-
keys = append(keys, key)
|
|
116
|
-
}
|
|
117
|
-
sort.Strings(keys)
|
|
118
|
-
folders := make([]SharedFolder, 0, len(keys))
|
|
119
|
-
for _, key := range keys {
|
|
120
|
-
folder := SharedFolder{Key: key, Name: names[key]}
|
|
121
|
-
path, err := ResolveSharedFolder(root, folder.Name)
|
|
122
|
-
if err != nil {
|
|
123
|
-
folder.Error = err.Error()
|
|
124
|
-
} else {
|
|
125
|
-
folder.Path, folder.Exists = path, true
|
|
126
|
-
folder.Readable = syscall.Access(path, accessRead|accessExec) == nil
|
|
127
|
-
folder.Writable = syscall.Access(path, accessWrite|accessExec) == nil
|
|
128
|
-
}
|
|
129
|
-
folders = append(folders, folder)
|
|
130
|
-
}
|
|
131
|
-
return folders, nil
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
// withSharedFolders adds the configured Shared Folders to an app.status
|
|
135
|
-
// answer; a package that configures none is answered exactly as before.
|
|
136
|
-
func (cfg Config) withSharedFolders(status map[string]any) map[string]any {
|
|
137
|
-
folders, err := cfg.SharedFolders()
|
|
138
|
-
if err != nil {
|
|
139
|
-
status["shared_folders_error"] = err.Error()
|
|
140
|
-
} else if len(folders) > 0 {
|
|
141
|
-
status["shared_folders"] = folders
|
|
142
|
-
}
|
|
143
|
-
return status
|
|
144
|
-
}
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
package app
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"errors"
|
|
5
|
-
"os"
|
|
6
|
-
"path/filepath"
|
|
7
|
-
"testing"
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
func writeConfig(t *testing.T, dir, body string) {
|
|
11
|
-
t.Helper()
|
|
12
|
-
if err := os.WriteFile(filepath.Join(dir, "config.json"), []byte(body), 0o600); err != nil {
|
|
13
|
-
t.Fatal(err)
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
func TestReadSharedFoldersWithoutConfigIsEmpty(t *testing.T) {
|
|
18
|
-
got, err := ReadSharedFolders(t.TempDir())
|
|
19
|
-
if err != nil || len(got) != 0 {
|
|
20
|
-
t.Fatalf("got %v %v", got, err)
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
func TestReadSharedFoldersReturnsNamesByKey(t *testing.T) {
|
|
25
|
-
dir := t.TempDir()
|
|
26
|
-
writeConfig(t, dir, `{"schema":1,"shared_folders":{"media":"Family Photos"}}`)
|
|
27
|
-
got, err := ReadSharedFolders(dir)
|
|
28
|
-
if err != nil || got["media"] != "Family Photos" || len(got) != 1 {
|
|
29
|
-
t.Fatalf("got %v %v", got, err)
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
func TestReadSharedFoldersRefusesUnknownSchemaAndBadNames(t *testing.T) {
|
|
34
|
-
for _, body := range []string{
|
|
35
|
-
`{"schema":2,"shared_folders":{"media":"x"}}`,
|
|
36
|
-
`{"schema":1,"shared_folders":{"media":"a/b"}}`,
|
|
37
|
-
`{"schema":1,"shared_folders":{"media":".."}}`,
|
|
38
|
-
`{"schema":1,"shared_folders":{"media":"@appdata"}}`,
|
|
39
|
-
`{"schema":1,"shared_folders":{"media":""}}`,
|
|
40
|
-
`not json`,
|
|
41
|
-
} {
|
|
42
|
-
dir := t.TempDir()
|
|
43
|
-
writeConfig(t, dir, body)
|
|
44
|
-
if _, err := ReadSharedFolders(dir); err == nil {
|
|
45
|
-
t.Errorf("%s: want an error", body)
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
func TestResolveSharedFolderFindsTheNameOnItsVolume(t *testing.T) {
|
|
51
|
-
root := t.TempDir()
|
|
52
|
-
for _, d := range []string{"volume1/other", "volume2/Photos", "volume2/@appdata"} {
|
|
53
|
-
if err := os.MkdirAll(filepath.Join(root, d), 0o755); err != nil {
|
|
54
|
-
t.Fatal(err)
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
got, err := ResolveSharedFolder(root, "Photos")
|
|
58
|
-
if err != nil || got != filepath.Join(root, "volume2", "Photos") {
|
|
59
|
-
t.Fatalf("got %q %v", got, err)
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
func TestResolveSharedFolderFollowsAMovedShare(t *testing.T) {
|
|
64
|
-
root := t.TempDir()
|
|
65
|
-
os.MkdirAll(filepath.Join(root, "volume1", "Photos"), 0o755)
|
|
66
|
-
first, _ := ResolveSharedFolder(root, "Photos")
|
|
67
|
-
os.Rename(filepath.Join(root, "volume1", "Photos"), filepath.Join(root, "Photos.tmp"))
|
|
68
|
-
os.MkdirAll(filepath.Join(root, "volume2"), 0o755)
|
|
69
|
-
os.Rename(filepath.Join(root, "Photos.tmp"), filepath.Join(root, "volume2", "Photos"))
|
|
70
|
-
second, err := ResolveSharedFolder(root, "Photos")
|
|
71
|
-
if err != nil || first == second || second != filepath.Join(root, "volume2", "Photos") {
|
|
72
|
-
t.Fatalf("%q -> %q %v", first, second, err)
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
func TestResolveSharedFolderErrors(t *testing.T) {
|
|
77
|
-
root := t.TempDir()
|
|
78
|
-
if _, err := ResolveSharedFolder(root, "Missing"); !errors.Is(err, ErrSharedFolderNotFound) {
|
|
79
|
-
t.Fatalf("missing: %v", err)
|
|
80
|
-
}
|
|
81
|
-
os.MkdirAll(filepath.Join(root, "volume1", "Dup"), 0o755)
|
|
82
|
-
os.MkdirAll(filepath.Join(root, "volume2", "Dup"), 0o755)
|
|
83
|
-
if _, err := ResolveSharedFolder(root, "Dup"); !errors.Is(err, ErrSharedFolderAmbiguous) {
|
|
84
|
-
t.Fatalf("ambiguous: %v", err)
|
|
85
|
-
}
|
|
86
|
-
for _, bad := range []string{"", "..", "a/b", "@appdata", ".x"} {
|
|
87
|
-
if _, err := ResolveSharedFolder(root, bad); err == nil {
|
|
88
|
-
t.Errorf("%q: want an error", bad)
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
func TestResolveSharedFolderIgnoresAFileOfThatName(t *testing.T) {
|
|
94
|
-
root := t.TempDir()
|
|
95
|
-
os.MkdirAll(filepath.Join(root, "volume1"), 0o755)
|
|
96
|
-
os.WriteFile(filepath.Join(root, "volume1", "Notes"), nil, 0o644)
|
|
97
|
-
if _, err := ResolveSharedFolder(root, "Notes"); !errors.Is(err, ErrSharedFolderNotFound) {
|
|
98
|
-
t.Fatalf("got %v", err)
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
func TestStatusOmitsSharedFoldersWhenNoneConfigured(t *testing.T) {
|
|
103
|
-
_, out := call(t, testConfig(t), alice, "app.status", `{}`)
|
|
104
|
-
if _, present := out["data"].(map[string]any)["shared_folders"]; present {
|
|
105
|
-
t.Fatalf("unexpected shared_folders: %v", out)
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
func TestStatusReportsEachConfiguredSharedFolder(t *testing.T) {
|
|
110
|
-
cfg := testConfig(t)
|
|
111
|
-
cfg.VolumeRoot = t.TempDir()
|
|
112
|
-
os.MkdirAll(filepath.Join(cfg.VolumeRoot, "volume1", "Photos"), 0o755)
|
|
113
|
-
writeConfig(t, cfg.DataDir, `{"schema":1,"shared_folders":{"media":"Photos","gone":"Missing"}}`)
|
|
114
|
-
_, out := call(t, cfg, alice, "app.status", `{}`)
|
|
115
|
-
rows := out["data"].(map[string]any)["shared_folders"].([]any)
|
|
116
|
-
if len(rows) != 2 {
|
|
117
|
-
t.Fatalf("rows: %v", rows)
|
|
118
|
-
}
|
|
119
|
-
byKey := map[string]map[string]any{}
|
|
120
|
-
for _, r := range rows {
|
|
121
|
-
m := r.(map[string]any)
|
|
122
|
-
byKey[m["key"].(string)] = m
|
|
123
|
-
}
|
|
124
|
-
media, gone := byKey["media"], byKey["gone"]
|
|
125
|
-
if media["name"] != "Photos" || media["exists"] != true || media["readable"] != true || media["writable"] != true || media["path"] != filepath.Join(cfg.VolumeRoot, "volume1", "Photos") {
|
|
126
|
-
t.Fatalf("media: %v", media)
|
|
127
|
-
}
|
|
128
|
-
if gone["exists"] != false || gone["readable"] != false || gone["writable"] != false || gone["error"] == nil || gone["path"] != nil {
|
|
129
|
-
t.Fatalf("gone: %v", gone)
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
func TestStatusReportsAFolderThePackageAccountCannotWrite(t *testing.T) {
|
|
134
|
-
if os.Geteuid() == 0 {
|
|
135
|
-
t.Skip("root ignores directory modes")
|
|
136
|
-
}
|
|
137
|
-
cfg := testConfig(t)
|
|
138
|
-
cfg.VolumeRoot = t.TempDir()
|
|
139
|
-
dir := filepath.Join(cfg.VolumeRoot, "volume1", "Locked")
|
|
140
|
-
os.MkdirAll(dir, 0o755)
|
|
141
|
-
os.Chmod(dir, 0o555)
|
|
142
|
-
t.Cleanup(func() { os.Chmod(dir, 0o755) })
|
|
143
|
-
writeConfig(t, cfg.DataDir, `{"schema":1,"shared_folders":{"media":"Locked"}}`)
|
|
144
|
-
_, out := call(t, cfg, alice, "app.status", `{}`)
|
|
145
|
-
row := out["data"].(map[string]any)["shared_folders"].([]any)[0].(map[string]any)
|
|
146
|
-
if row["exists"] != true || row["readable"] != true || row["writable"] != false {
|
|
147
|
-
t.Fatalf("row: %v", row)
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
func TestStatusReportsACorruptConfigWithoutFailing(t *testing.T) {
|
|
152
|
-
cfg := testConfig(t)
|
|
153
|
-
writeConfig(t, cfg.DataDir, `not json`)
|
|
154
|
-
code, out := call(t, cfg, alice, "app.status", `{}`)
|
|
155
|
-
if code != "" || out["data"].(map[string]any)["shared_folders_error"] == nil {
|
|
156
|
-
t.Fatalf("%q %v", code, out)
|
|
157
|
-
}
|
|
158
|
-
}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
package background
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"strconv"
|
|
5
|
-
"time"
|
|
6
|
-
)
|
|
7
|
-
|
|
8
|
-
// Valid requires a resolved, non-root numeric UID. Unknown legacy owners remain
|
|
9
|
-
// visible only to administrators.
|
|
10
|
-
func (o Submitter) Valid() bool {
|
|
11
|
-
uid, err := strconv.ParseUint(o.UID, 10, 32)
|
|
12
|
-
return o.User != "" && err == nil && uid > 0 && strconv.FormatUint(uid, 10) == o.UID
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// Access is constructed only by the authenticated backend, never JSON params.
|
|
16
|
-
type Access struct {
|
|
17
|
-
Owner Submitter
|
|
18
|
-
Admin bool
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
func (a Access) sees(job Job) bool {
|
|
22
|
-
return !job.PurgeRequested && (a.Admin || (a.Owner.Valid() && job.Submitter == a.Owner))
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
type PurgeAudit struct {
|
|
26
|
-
Owner Submitter `json:"owner"`
|
|
27
|
-
Actor string `json:"actor"`
|
|
28
|
-
At time.Time `json:"at"`
|
|
29
|
-
Removed int `json:"removed"`
|
|
30
|
-
Draining int `json:"draining"`
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// ownerUsage centralizes admission accounting for the package-private spool.
|
|
34
|
-
func (j *journal) ownerUsage(owner Submitter) (pending int, bytes int64) {
|
|
35
|
-
for _, job := range j.Jobs {
|
|
36
|
-
if job.Submitter != owner {
|
|
37
|
-
continue
|
|
38
|
-
}
|
|
39
|
-
if !job.State.terminal() {
|
|
40
|
-
pending++
|
|
41
|
-
bytes += int64(job.InputBytes + resultReserve)
|
|
42
|
-
} else {
|
|
43
|
-
if job.CopyRetained {
|
|
44
|
-
bytes += int64(job.InputBytes)
|
|
45
|
-
}
|
|
46
|
-
if job.Result != nil {
|
|
47
|
-
bytes += resultReserve
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
for _, sc := range j.Schedules {
|
|
52
|
-
if sc.Owner == owner {
|
|
53
|
-
bytes += int64(sc.InputBytes)
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return
|
|
57
|
-
}
|