From 84c901f77a9afedc57ebe64a4b7374f5a4e2cd8b Mon Sep 17 00:00:00 2001 From: Guillaume ARM Date: Mon, 15 Jun 2026 01:44:03 +0200 Subject: [PATCH] fix(postinstall): configure default sandbox url --- packages/index.json | 2 +- packages/trapos-core/ccpm.json | 2 +- programs/trapos-postinstall.lua | 27 ++++++++++ tests/postinstall.lua | 92 +++++++++++++++++++++++++++++++++ 4 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 tests/postinstall.lua diff --git a/packages/index.json b/packages/index.json index a05b04d..17cb9fb 100644 --- a/packages/index.json +++ b/packages/index.json @@ -1,6 +1,6 @@ { "packages": { - "trapos-core": "0.6.1", + "trapos-core": "0.6.2", "trapos-test": "0.2.1", "trapos-boot": "0.3.3", "trapos-net": "0.3.0", diff --git a/packages/trapos-core/ccpm.json b/packages/trapos-core/ccpm.json index 325bfae..8782fa2 100644 --- a/packages/trapos-core/ccpm.json +++ b/packages/trapos-core/ccpm.json @@ -1,6 +1,6 @@ { "name": "trapos-core", - "version": "0.6.1", + "version": "0.6.2", "description": "TrapOS base: package manager, event loop, upgrade and event tools", "dependencies": [], "files": [ diff --git a/programs/trapos-postinstall.lua b/programs/trapos-postinstall.lua index c19efa5..9c3bf26 100644 --- a/programs/trapos-postinstall.lua +++ b/programs/trapos-postinstall.lua @@ -1,5 +1,13 @@ local createVersion = require('/apis/libversion'); +local DEFAULT_SANDBOX_URL = 'wss://trapos.trapcloud.fr'; +local SANDBOX_URL_SETTING = 'sandbox.url'; +local SANDBOX_PASSWORD_SETTING = 'sandbox.password'; + +local function isBlank(value) + return type(value) ~= 'string' or value == ''; +end + local function printUsage() print('trapos-postinstall usage:'); print(); @@ -36,6 +44,15 @@ local function readManifestVersion() end local version = readManifestVersion(); +local configuredSandboxUrl = false; + +if isBlank(settings.get(SANDBOX_URL_SETTING)) then + settings.set(SANDBOX_URL_SETTING, DEFAULT_SANDBOX_URL); + settings.save(); + configuredSandboxUrl = true; +end + +local hasSandboxPassword = not isBlank(settings.get(SANDBOX_PASSWORD_SETTING)); print(); if version then @@ -43,6 +60,16 @@ if version then else print('=> TrapOS installed.'); end +if configuredSandboxUrl then + print('=> Configured sandbox.url to ' .. DEFAULT_SANDBOX_URL .. '.'); +else + print('=> Keeping existing sandbox.url.'); +end +if hasSandboxPassword then + print('=> Sandbox password already configured.'); +else + print('=> Sandbox password not set.'); +end print(); print('Get started:'); print(' sandbox --help -- open the sandbox help'); diff --git a/tests/postinstall.lua b/tests/postinstall.lua new file mode 100644 index 0000000..b42eaa5 --- /dev/null +++ b/tests/postinstall.lua @@ -0,0 +1,92 @@ +local createLibTest = require('/apis/libtest'); + +local testlib = createLibTest({ ... }); + +local DEFAULT_SANDBOX_URL = 'wss://trapos.trapcloud.fr'; + +local function fakeSettings(values) + return { + values = values or {}, + saved = 0, + get = function(self, key) + return self.values[key]; + end, + set = function(self, key, value) + self.values[key] = value; + end, + save = function(self) + self.saved = self.saved + 1; + end, + }; +end + +local function runPostinstall(settingsLib) + local lines = {}; + local env = setmetatable({ + require = require, + settings = { + get = function(key) return settingsLib:get(key); end, + set = function(key, value) settingsLib:set(key, value); end, + save = function() settingsLib:save(); end, + }, + print = function(line) + lines[#lines + 1] = line or ''; + end, + }, { __index = _G }); + + local chunk, loadErr = loadfile('/trapos/programs/trapos-postinstall.lua', 't', env); + if not chunk then error(loadErr, 0); end + local ok, err = pcall(chunk); + if not ok then error(err, 0); end + return lines; +end + +local function containsLine(lines, expected) + for _, line in ipairs(lines) do + if line == expected then return true; end + end + return false; +end + +testlib.test('postinstall defaults missing sandbox url', function() + local settingsLib = fakeSettings(); + local lines = runPostinstall(settingsLib); + + testlib.assertEquals(settingsLib.values['sandbox.url'], DEFAULT_SANDBOX_URL); + testlib.assertEquals(settingsLib.saved, 1); + testlib.assertTrue(containsLine(lines, '=> Configured sandbox.url to ' .. DEFAULT_SANDBOX_URL .. '.')); + testlib.assertTrue(containsLine(lines, '=> Sandbox password not set.')); +end); + +testlib.test('postinstall treats empty sandbox url as missing', function() + local settingsLib = fakeSettings({ ['sandbox.url'] = '' }); + runPostinstall(settingsLib); + + testlib.assertEquals(settingsLib.values['sandbox.url'], DEFAULT_SANDBOX_URL); + testlib.assertEquals(settingsLib.saved, 1); +end); + +testlib.test('postinstall preserves existing sandbox url and password', function() + local settingsLib = fakeSettings({ + ['sandbox.url'] = 'wss://custom.example', + ['sandbox.password'] = 'secret', + }); + local lines = runPostinstall(settingsLib); + + testlib.assertEquals(settingsLib.values['sandbox.url'], 'wss://custom.example'); + testlib.assertEquals(settingsLib.saved, 0); + testlib.assertTrue(containsLine(lines, '=> Keeping existing sandbox.url.')); + testlib.assertTrue(containsLine(lines, '=> Sandbox password already configured.')); +end); + +testlib.test('postinstall treats empty sandbox password as missing', function() + local settingsLib = fakeSettings({ + ['sandbox.url'] = 'wss://custom.example', + ['sandbox.password'] = '', + }); + local lines = runPostinstall(settingsLib); + + testlib.assertTrue(containsLine(lines, '=> Sandbox password not set.')); +end); + +testlib.run();