Release
2.34.0-SNAPSHOT
Released TBD.
2.33.0
Released 2024-02-05.
Other
- Switch to new development server
dev.rswk.ch
2.32.6
Released 2024-01-31.
Other
- Update to latest Logback, OpenSSL versions
- Remove obsolete remaining sync code (mostly Syncthing)
- Remove Wireguard configs
- Util
util-web-test
AbstractWebDriver
- Expected name of chrome driver binary changed to
chromiumdriver/chromedriver
(for compatibility with new dev server setup)
- Expected name of chrome driver binary changed to
2.32.5
Released 2023-12-19.
Other
- Bootstrap
bootstrap-common
openssl.json
- Update to 3.1.4
bootstrap-dev-vm
- Update IntelliJ configs
- Meta
meta-client
- Fix i18n
meta-engine
EngineUpdater
- Add optional argument to
CloneTask
that specifies how many month ofMetaLog
to migrate. Eg.-update clone 12
to keep the last 12 month of logs - Refactor searching/creating meta entities back to
while
loop instead of recursion for performance reasons
- Add optional argument to
2.32.4
Released 2023-11-07.
Other
- Bootstrap
bootstrap-common
openssl.json
- Update to 3.1.3
bootstrap-dev-vm
- Update IntelliJ configs. Now allows use of IntelliJ for front- and backend work
- Meta
meta-admin
- Fix missing searcher component
meta-engine
LuceneService
- Increase queue size from 1000 to 5000
UserService
- Batch group updates when deleting a user
WatchdogService
- If
check
is enabled, registerFileExpirationNotification
listener that removes grants from users for expired files
- If
- Util
util-web
- Retire
web-lint.js
script - Update Bootstrap versions
- Retire
2.32.3
Released 2023-09-12.
Other
- Bootstrap
bootstrap-common
dev.json
- Update Maven to 3.9.4. Requires change in
settings.xml
due to HTTP getting blocked with 3.8.1// Replace this <url>http://central</url> // with this <url>https://central</url>
- Update Maven to 3.9.4. Requires change in
- Util
util-web
- Remove shell scripts. Just call
npm
directly from Maven build - Use
define
instead of Maven filtering, eg. forversion
- Use
esbuild-plugin-copy
instead of Maven to copy resources
- Remove shell scripts. Just call
util-web-test
- Add
NukeServlet
that usesClear-Site-Data
header for cleaning up browser cache between test cases runUiTest
now takes aCallable
and tests must provide their ownFluentWait
final var wait = newFluentWait(driver, DEFAULT_TIMEOUT); runUiTest(driver, () -> { // Test here return null; }, url, null);
- Add
2.32.2
Released 2023-08-16.
Other
- Bootstrap
bootstrap-common
openssl.json
- Update to 3.1.2
2.32.1
Released 2023-07-23.
Other
- Bugfixes
- Fix
config.js
/config.json
handling with regards toexternal
in esbuild - Fix path to
config.json
inbootstrap-watchdog-server
- Fix
- Util
util-web
web-build.bat/.sh
- Remove check that a
web-build.mjs
script exists, now just executesnpm run build
- Remove automatic lint step
- Remove check that a
- Rename lint script from
web-lint.mjs
toweb-lint.js
2.32.0
Released 2023-07-10.
Other
- Switch to SemVer due to NPM modules (was
32.0
, is now2.32.0
) - Web modules are now based on ES6 modules
- Meta
meta-client
client
- Now takes single
engine
argument
- Now takes single
objects
- Remove
fromMetaObjectVm
- Rename
onAddObject
toonAdd
- Rename
onRemoveObject
toonRemove
- Rename
toMetaObjectVm
totoVm
- Remove
- Util
util-web
- Add
workerfactory.js
for service workers - Rewrite all web build scripts
- Add
31.3
Released 2023-06-22.
Other
- Bugfixes
- Missing TOTP after
clone
- Missing sorted field for
MetaUserConfig
Id
- Missing TOTP after
31.2
Released 2023-06-15.
Other
- Minor maintenance release
- Meta
meta-engine
EngineEventBus
- Use
observeOn
instead ofsubscribeOn
- Use
31.1
Released 2023-06-08.
Other
- Util
util-web
nav
- Params now sorted
31.0
Released 2023-06-07.
Other
- Bootstrap
bootstrap-common
dev.json
- Update fossil to 2.21
- Update Maven to 3.9.2
- Update Node.js to 20.2.0
- Meta
meta-client
login
- Clean up login modals
objects
- Rename
clearObjects
toclear
- Rename
meta-client
Model
/model
- Add parameter
additionalClauses
tonewMultiValueQuery
to correctly partition the query without exceedingMAX_CLAUSE_COUNT
- Add parameter
meta-engine
HttpService
- Add nightly reload of keystore (makes Certbot pre/post scripts obsolete)
- Add certificate
notAfter
date health check - Add certificate
notAfter
date to service info
- Remove all cluster functionality, including
SyncService
meta-test
HttpServiceTest
newHttpServiceTestConfig
now has two options for setting CSP headercspHeader
for a full custom CSP headercspSrc
for additional sources usingHttpServiceTest.CSP_HEADER_FORMAT
- Util
util-web
- Switch to standard
npm
command inweb-build.sh
- Update to Bootstrap 5.3.0
- Switch to standard
30.1
Released 2023-05-06.
Model
WatchdogStatus
- Fields are now in ASCII order
Config
UserServiceEnforceConfig
- Add
otpRequired
- Rename
requireOtp
tootpTypes
- Add
Other
- Meta
meta-admin
config.json
- Add
otpRequired
- Move login related properties to seperate
login
object - Rename
requireOtp
tootpTypes
- Add
meta-client
login
- Add
webAuthnEnable
parameter - Redesign recover user and password reset
- Rename
enableEditUser
toeditUserEnable
- Remove
enableRecoverUserEmail
/enableRecoverUserPhone
/requireOtp
. Now controlled byotpRequired
/otpTypes
- Add
meta-engine
LuceneService
- Properly close old reader on reader refresh
UserService
resetPassword
now accepts 2FA email/phone and email/phone from user config
meta-test
Fixture
- Add
watchdogConfig
tonewTestEngineConfig
. Usenew WatchdogServiceConfig(null, null)
to disable watchdog service for testing
- Add
- Util
util-web
crypto
- Add
newUuid
that usesrandomUUID
and falls back to old random string mechanism - Remove
generateRandomString
- Rename
generateRandomInt
togetRandomInt
- Add
30.0
Released 2023-04-27.
Protocol
RecoverUserRequest
/RecoverUserReply
- Renamed from
ForgotUserRequest
/ForgotUserReply
- Renamed from
FileSearchRequest
- Add
sort
,sortReverse
options. UseModel.Lucene.FILE_FIELD_UPLOAD_TIMESTAMP
andsortReverse:true
to get same result as before
- Add
Config
UserServiceConfig
- Rename
forgotContact
torecoverContact
- Rename
writeContact
toverifyContact
- Rename
Other
- Update various dependency and plugin versions
- Meta
- Update to latest Lucene version
meta-client
- Renamed
forgotUser
torecoverUser
login
- Redesign recover user/password reset
- Remove
enableTokenAuth
. Now enabled by default - Rename
enableForgotUserEmail
/enableForgotUserPhone
toenableRecoverUserEmail
/enableRecoverUserPhone
objects
- Rename
searchLoaded
tonoOfSearchResults
- Rename
objectscache
- Removed
searcher
- Add classes to allow for styling
- Renamed
meta-engine
- Cleanup dagger modules, see
platform-archetype
for refrence AbstractEngineWorkQueueService
- Rename
processWorkUnit
toofferWorkUnit
. PreviousofferWorkUnit
method was removed - Rename
process
toprocessWorkUnit
, includingbefore
andafter
methods
- Rename
EngineRuntime
- Add generic
FileWatcher
interface (AbstractConfigWatcher
implements this) - Add
registerFileWatcher
to allow services to watch for file changes
- Add generic
EngineUpdater
- Remove
LoggingService
from update services and delete logging index after tasks complete - Remove fixtures from update services
- Remove
FileService
- Remove default sort and use new sort fields from
FileSearchRequest
- Remove default sort and use new sort fields from
LuceneService
- Replace
search
/write
with a singleprocess
method - Consolidate
SearchContext
/WriteContext
classes into a singleLuceneContext
- Replace
MetaLucene
- Use new
DoubleField
/IntField
/LongField
. These fields are automatically sortable, see here
- Use new
MetaSchema
- Fix missing
KeywordAnalyzer
forMETA_LOG_FIELD_DATA_CHANGE
,META_OBJECT_FIELD_FIELD
- Map integer fields to
IntField
in lucene - Use
LocalDate
for date fields
- Fix missing
MetaService
- Remove fixture mechanism. This means
MetaAction
andMetaType
need to be injected in dagger modules. In addition, they are not persisted anymore and can't be created, updated or deleted withwrite
- Remove fixture mechanism. This means
UserService
- Allow users to login using 2FA email/phone and email/phone from user config. User name takes precedence, then 2FA and lastly user config. Login fails if 2FA or user config search return more than one match
- Remove fixture mechanism. For testing, insert required
config/group/users before running any tests. E.g. using
UserService
,FixtureImporter.createUserFixtures
, etc. startVerifyOtp
contact
now optional. UsesverifyContact
by default
WatchdogService
checkEngines
now usesMetaLog
to check if engine is alive
- Cleanup dagger modules, see
meta-test
- Add
EngineTestModule
as helper that includes all required engine modules to run server - Cleanup dagger modules, see
platform-archetype
for refrence Fixture
- Add
MetaType
fixtures, eg.TEST_META_TYPE
. These can be used viaMetaServiceTestFixtureModule
- Add
UserServiceTest
- Remove
getTestUser
. Test users, eg.UserServicetest.USER
, are nowMetaUser
- Remove
- Add
- Util
util-core
Files
- Rename
resolveIdentifierAbsolutePath
tofindIdentifierAbsolutePath
- Rename
util-web
ui
- Add theme support (see
meta-admin
for examples)
- Add theme support (see
29.4
Released 2023-02-14.
Other
- Bootstrap
bootstrap-core
Cd
dryRun
now builds the modules to catch any errors
Provision
- Fix
parseSchedule
- Fix
- Util
util-web
ext
simpleSort
now uses_.get
and supports pathssearchReply.metas.sort(ext.simpleSort.bind(undefined, ["value", "description"]))
29.3
Released 2023-02-08.
Other
- Meta
meta-client
client
- Fix
download
never resettingactiveDownloadProgress
after first call
- Fix
meta-engine
EngineRuntime
getServiceInfo
now contains more information about the system
WatchdogService
WatchdogStatus.info
now contains all ofruntime.getServiceInfo
- Util
util-core
Env
- Rename
NO_OF_THREADS
toTHREADS
- Rename
SYSTEM_OS
toOS
- Rename
Strings
- Rename
DEFAULT_LOCALE
toLOCALE
- Rename
29.2
Released 2023-02-03.
Other
- Meta
meta-engine
- Invalidate all caches (
MetaService
,UserService
) after backup restore ActionService
- Clear up what
MetaAction
schemas do- If
paramSchema
is null,ExecuteRequest.param
is ignored and null is passed to action delegate - If
resultSchema
is null, return the action delegate's result. IfresultSchema
is not null, always validate the result
- If
- Clear up what
- Invalidate all caches (
29.1
Released 2023-01-26.
Other
- Meta
meta-engine
HttpService
- Remove hard coded
default-src
CSP header
- Remove hard coded
29.0
Released 2023-01-26.
Config
DatabaseServiceDatabaseConfig
- Renamed to
DatabaseServiceDataSourceConfig
- Renamed to
ProvisionServerConfig
- Add optional
awaitTimeout
. Time to await watchdog status after provisioning new instance in minutes - Add
password
(and removeserverPassword
fromProvisionProviderVultrConfig
)
- Add optional
WatchdogServiceReportConfig
engine
field special value to report to self is nowlocalhost
Other
- Remove
TEST_
prefixes from various fields in test classes and modules - Replace
ImmutableList
/ImmutableMap
/ImmutableSet
withList.of
/Map.of
/Set.of
- Bootstrap
bootstrap-core
Cd
- Add pending update mechanism to allow running
Cd
multiple times in case of errors, without affecting already updated servers
- Add pending update mechanism to allow running
Provision
- Add
ProvisionServerProvider
and implement dummy provider for testability
- Add
bootstrap-common
certbot.json
- Fix Windows hooks
- Now uses x64 version of Certbot on Windows
dev.json
- Update to Maven 3.8.7
- Meta
meta-core
- Add builders for all model entities, including helpers to clone
existing entities
final var action = MetaAction.create(null).name("My Action").build(); final var clonedAction = MetaAction.clone(action).name("My Action 2").build();
const clonedAction = model.metaActionClone(existingAction, {name: "My Action 2"});
Model
- Parameters are now in ASCII order
- Add type schema builder
final var schema = createTypeSchema().properties("{...}").required("deviceId").sortable("updateTimestamp").build();
- Add builders for all model entities, including helpers to clone
existing entities
meta-client
objects
- Now sorts objects after calls to
addObject
- Remove
loadMode
,orderBy
,orderByOrder
parameters- Pass existing
loadById
function to getLOAD_MODE.EAGER
- Pass existing
- Add
sort
parameter. Takes function that implementsArray.sort()
to sort the objects array in placesort: ext.simpleSort.bind(undefined, "deviceName") // Can handle observable properties
- Add
loadByMetaId
helperloadById: objects.loadByMetaId.bind(undefined, client)
- Now sorts objects after calls to
viewmodel
- Replace
newPlainObservableMapping
crutch withnewObjectMapping
crutch. Seemeta-admin/viewmodel
for examples
- Replace
meta-engine
BackupService
- New interface to break dependency on
FileService
- New interface to break dependency on
DatabaseService
DatabaseServiceDataSourceConfig
can now be injected in addition to the ones configured withDatabaseServiceConfig
GatewayService
- Add
sendEmail
withemailReplyTo
,emailSender
arguments to allow different values from config
- Add
MetaService
- Fix
deleteRecursive
- Fix
meta-test
- Rename
MockGatewayService
toGatewayMockService
- Rename
GatewayServiceTestMockModule
toGatewayServiceMockModule
. MakesgatewayConfig
in component builder obsolete - Add
BackupServiceMockModule
. IfFileService
is not used in any service, include this module instead ofFileServiceModule
. MakesfileConfig
in component builder obsolete - Add
SyncServiceDummyModule
. MakessyncConfig
in component builder obsolete
- Rename
- Util
util-core
EnvNix
/EnvWin
- Schedule for
runTaskInternal
is now converted to local date and time
- Schedule for
util-web
require-config.js
/web-build.json
- Instead of including
web-build.json
from other modules, directly reference the dependency from the moduleslib
directorybootstrap: "../lib/util-web/lib/bootstrap.bundle.min"
- Same for other dependencies like
alameda
orqunit
inindex.html
/qunit.html
<script defer src="lib/util-web/lib/alameda.js"></script>
- Instead of including
web-build.bat/.sh
- Now takes optional third parameter for additional Node modules
<argument>@node-minify/core @node-minify/uglify-js</argument>
- Custom build scripts get parameter with Node module folder
const nodeModuleDir = process.argv[2]; const minify = require(nodeModuleDir + "@node-minify/core");
- Now takes optional third parameter for additional Node modules
- Optimize
web-dist.xml
assembly and JAR files for web modules - Replace
lodash
withunderscore
get
,has
now takes array instead of string- Merge is now
ext.merge(...)
- Some methods are not availbale in underscore
- Update Bootstrap, Bootstrap Icons version
- Update i18next version, see changes to pluralization
text_with_options_one: "There is a single text for {{name}}.", text_with_options_other: "There are {{count}} texts for {{name}}."
dates
- New module to break dependency on
luxon
- Add
nowDateString
(compared toext
)
- New module to break dependency on
ext
- Remove
now
(nowdates
)setZoneUtc
(nowdates
)parseDateTime
(nowdates
)parseDateTimeInputs
(nowdates
)nowDateTimeString
(nowdates
)isValidDateTime
(nowdates
)toDateString
(nowdates
)toDateTimeString
(nowdates
)setDateTimeInputs
(nowdates
)getDateRange
(nowdates
)insertDateTimes
(nowdates
)extractExifPosition
(nowimg
)shrinkImage
(nowimg
)orderBy
- Rename
chunkIteration
tochunkAsync
- Remove
index
parameter func
now getsvalue
andindex
- Remove
- Add
merge
based on mergiciansimpleSort
- Remove
i18next
init
now takes optionaloptions
for additionali18next
options
img
- New module to break dependency on
EXIF
- New module to break dependency on
util-web-test
- Add
WebDriverTestIT
as example for end-to-end test using the final distributed version of a client - Update to latest QUnit version
- Add
28.1
Released 2022-11-14.
Config
WatchdogServiceReportConfig
/WatchdogServiceCheckConfig
- Add optional
schedule
- Add optional
Other
- Bootstrap
bootstrap-common
certbot.json
- Remove directory hooks and configure hooks directly with
certonly
parameters
- Remove directory hooks and configure hooks directly with
- Meta
meta-engine
EngineUpdater
- Backup all services before running any tasks
- Util
meta-core
Wget
newHttpClient
now defaults to aQueuedThreadPool
- Rename
asString
tostringContent
28.0
Released 2022-10-31.
Protocol
ErrorReply
- Remove
timestamp
- Remove
- Add
ServiceInfoRequest
/ServiceInfoReply
Other
- Update various Java dependency, Maven plugin and dev tool versions
- Boostrap
bootstrap-core
Main
- Remove
buildversion
option. Switch tojq
utility and Maven build to get matching version ofbootstrap-core
JAR in Jenkins build
- Remove
bootstrap-dev-server
- Add
jq
utility
- Add
- Meta
meta-admin
- Now uses service info to populate file component's backup options
meta-engine
DatabaseService
- Rename
lookupDatabase
tojdbi
- Add backup/restore for SQLite databases
- Rename
EngineRuntime
- Add
getServiceInfo
that queries all services implementingInfoProvidingService
- Add
EngineServices
- Add
InfoProvidingService
interface
- Add
GatewayService
WebhookRequest
now contains the fullHttpRequest
to send. UsegatewayService.httpClient().newRequest(...)
to create one
HttpService
- Add
dispatches
toFilterConfig
- Add
- Util
util-web
- Update to latest Bootstrap version
util-web-test
- Add remote driver support to
AbstractWebDriver
- Add remote driver support to
27.0
Released 2022-08-29.
Config
- Bootstrap
BuildConfig
- Add
executeWget
- Add
ExecuteConfigWebhook
- Remove
url
- Add
engine
. Watchdog update status webhook now only requires the engine URL, eg.watchdog.mycompany.ch
- Remove
ProvisionProviderVultrConfig
- Add
tags
- Add
- Meta
LoggingServiceAlertConfig
- Remove
emailSubject
,smsMessage
- Remove
Other
- Update to latest Java 17 version
- Boostrap
bootstrap-core
Build
- Remove
offline
option. Now part ofBuildConfig
- New
executeWget
option unpacks final archive prior to runningWgetExecutor
to correctly resolve all definitions
- Remove
Cd
- Provides continuous delivery functionality using
Build
andProvision
. SeeJenkinsfile-myapp-cd
inplatform-archetype-bootstrap
- Provides continuous delivery functionality using
bootstrap-common
- Move firewall rules in various definitions before service startup
- Remove
userProfile
property and use OS specific variables instead (SUDO_USER
/username
) syncthing-server.json
- Fix config folder location
- Meta
meta-admin
- Fix file download and handling of new objects in editor
meta-client
RestClient
- Rename
executeRequest
tosend
- Rename
executeFileRequest
todownloadFile
- Rename
executeRequestAsync
tosendAsync
- Rename
meta-engine
EngineRuntine
- Scheduled methods now use
Duration
- Scheduled methods now use
WatchdogService
- Now invokes
Protocol.WATCHDOG_UPDATE_RESOURCE
webhook whenprocessUpdate
fails preparing an update
- Now invokes
- Util
util-core
Wget
- Add
sendAsync
helper
- Add
26.3
Released 2022-07-28.
Config
ExecuteConfig
- Remove
owner
- Remove
Other
- Util
util-web-test
AbstractWebDriver
- Make
runUiTest
window size optional - If
abstractwebdriver_headless
env var is set, tests now run in headless mode
- Make
26.2
Released 2022-07-13.
Config
GatewayServiceConfig
- Add optional
smsGatewayAccount
. Can be used for customer-side accounting with the SMS gateway - Add
smsGauge
. If enabled, registers metric gauge for remaining SMS
- Add optional
Other
- Meta
meta-engine
FileService
- Fix duplicate check for pending uploads
- Util
util-web
ext
loadConfig
now passes all additional arguments to config function
26.1
Released 2022-06-24.
Model
MetaUserWebAuthnCredential
- Fix field ordering
Protocol
ClientNotification
- Add optional
context
object, eg. forsynced
flag set bySyncService
- Add optional
UserWriteRequest
- Fix field ordering
Other
- Meta
meta-engine
SyncService
- Fix unnecessary
ClientNotification
processing when running withNoEtcdDelegate
- Use new
context
object for marking syncedClientNotification
events
- Fix unnecessary
26.0
Released 2022-06-23.
Protocol
LoggingEntry
- Fields are now in ASCII order
Other
- Remove obsolete
@JsonCreator
constructors in Java records - Bootstrap
bootstrap-common
- Remove
engine-clone.json
. Useengine-main.json
directly, seeengine-server-update.json
engine-server-update.json
- Remove
skipClone
- Add
engineUpdate
flag that runs update tasks specified inupdateTasks
property"flags": ["engineUpdate"], "properties": {"updateTasks": "clone"}
- Remove
- Remove
- Meta
meta-core
model
,protocol
- Remove
factory
objects
- Remove
meta-client
objects
- Support observable
typeId
- Add
onAddObject
andonRemoveObject
- Support observable
meta-engine
EngineUpdater
- Rename
FileServiceTask
toFileServiceStorageTask
with task IDfilestorage
- Rename
FileService
- Handle duplicate files for pending uploads
- Util
util-core
Files
- Rename
cleanUp
tocleanup
- Rename
SevenZip
extract
withdirectory
now creates missing parent directories before move to target directory
StaticCurlyBracesResolver
- Rename
putAllResolved
toputAllAndResolveAll
. Now resolves all known variables after adding new ones
- Rename
util-web
device
- Remove
factory
object
- Remove
util-web-test
AbstractWebDriver
- Remove
navigateAndScreenshotComponent
- Rename
runJavaScript
toexecuteScript
- Add
executeScriptAsync
,navigateToComponent
,setScriptTimeout
- Remove
25.0
Released 2022-05-18.
Model
MetaUser
MetaUserWebAuthnCredential
- Add
displayName
- Add
Protocol
UserWriteRequest
- Renamed
webAuthnCreate
towebAuthnRequest
and is now object withdisplayName
- Renamed
webAuthnCreateReply
towebAuthnReply
- Renamed
UserWriteReply
- Renamed
webAuthnCreateRequest
towebAuthnRequest
- Renamed
SyncReplicateRequest
/SyncStatusRequest
- Replace
key
withdelegateId
- Replace
Other
- Update to latest Java 17 version
- Meta
meta-client
component/login
- Support multiple WebAuthn credentials
meta-engine
- General fixes and improvements for clustered runtimes
- Remove
checkRunning
from abstract service classes FileService
- Remove
Set<FileInfo>
fixtures. Fixtures were not properly implemented and could only be used for testing. UseFileService.importFileInfos
withFileServiceTest.newFileFixtureSupplier
for testingstatic void importFixtures(final FileService fileService) throws Exception { FileService.importFileInfos(ImmutableList.of(TEST_FILE_SUPPLIER.apply(fileService.config())), fileService); final var importer = new FixtureImporter(newTestClient()); ... }
- Remove
MetaLucene
- Add
escapeQueryPart
- Add
UserService
- Support multiple WebAuthn credentials
generateUserToken
now rejects users with OTP/WebAuthn, since authentication is only based on password
- Util
util-web
- Update to latest Bootstrap beta version
device
Addcamera
permission check ingetCameras
ext
- Fix
fileEndings
/fileFormats
checks inloadFileContent
- Add
setZoneUtc
- Fix
24.1
Released 2022-04-19.
- Meta
meta-engine
- Fix
getConfigClass
inAbstractActionExecuteDelegate
- Fix
24.0
Released 2022-04-16.
- Bootstrap
bootstrap-common
- Remove
engine-server-copy.json
definition. Obsolete, now thatlucene-backward-codec
is included inmeta-engine
- Add
engine-main.json
definition
- Remove
bootstrap-dev-vm
- Fix cert validation problem with fossil on Windows
- Meta
meta-engine
- Fix issues with config watcher mechanism
- Include
lucene-backward-codec
dependency MetaService
- Rename
deleteSearchResultsRecursive
todeleteRecursive
- Add
searchRecursive
helper function
- Rename
23.1
Released 2022-04-11.
Model
Model.TYPE_SCHEMA_DEFINITIONS
now references$defs
field instead of obsoletedefinitions
Other
- Bootstrap
bootstrap-common
engine-import.json
- Add property
importFixture
for fixture file
- Add property
- Meta
meta-engine
GatewayService
DeliveryReply
now contains the request
23.0
Released 2022-03-30.
Config
ExecuteConfig
- Add
tmpDir
- Add
Other
- Bootstrap
bootstrap-core
Build
- In execute script, set
java.io.tmpdir
to module directory
- In execute script, set
bootstrap-common
- Set
java.io.tmpdir
to{tmpDir}
/{tmpDirWin}
in all definitions that calljava
certbot.json
- Call
pl-deploy.ps1
after initial certbot run on Windows
- Call
- Set
- Util
util-core
- Switch from
jackson-module-afterburner
tojackson-module-blackbird
Env
- Revert
runTask
schedule date format on Windows
- Revert
- Switch from
22.0
Released 2022-03-24.
Protocol
SearchRequest
/SearchReply
- Fields are now in ASCII order
WriteObjectUpdateRequest
- Fields are now in ASCII order
WriteRequest
- Fields are now in ASCII order
Other
- Bootstrap
bootstrap-core
CmdExecutor
- Fix exception handling and reduce
DEFAULT_TIMEOUT
to 5 minutes
- Fix exception handling and reduce
bootstrap-common
certbot.json
- Fix
certbot.exe
call on Windows
- Fix
- Meta
meta-engine
MetaService
- Catch
JsonSchemaException
during start-up, so service doesn't fall over, if there are actions/types with old schemas
- Catch
WatchdogService
- Handle errors in
processUpdate
- Handle errors in
- Util
util-core
Env
runTask
now returnsEnvExecuteResult
- Fix
runTask
schedule date format on Windows
SevenZip
- Parameters are now in ASCII order
util-web
web-build.json
- Remove top level
lib
- Replace array with proper object to specify custom file names
{ "include": [], "libs": [ { "name": "exif.js", "url": "https://cdn.jsdelivr.net/npm/exif-js" } ] }
- Remove top level
21.1
Released 2022-03-10.
Config
BuildConfig
- Remove
bootstrap
,propertiesPath
- Add
bootstrapConfig
- Remove
Other
- Bootstrap
- Try to reduce duplication in build and bootstrap configs
bootstrap-core
Build
- Change run arguments
- Remove
mvnsettings
option. Now always usesPLATFORM_DATA_DIR/settings.xml
- Rename
mvnrepodir
tomvnrepo
- Add
merge
option. If provided, merges the given JSON file withbootstrapConfig
fromBuildConfig
. Merge operation must result in a validExecuteConfig
- Remove
- Change run arguments
- Meta
meta-engine
GatewayService
- Fix SMS message encoding error
- Util
util-web
i18next
- Handle
keyval
errors to make sure module works, even ifkeyval
is not available
- Handle
20.0
Released 2022-03-06.
Config
HttpServiceHeaderConfig
- Remove
xframe
option. Use CSP frame-ancestors if needed. Defaults to:frame-ancestors 'none'
- Add
patterns
, list ofHttpServiceHeaderPatternConfig
for adding custom headers
- Remove
Other
- Util
util-core
Ext
newFixedThreadPool
now takesminThreads
instead ofthreadsFactor
Wget
- Add
stopHttpClient
helper method. Tries to stop/destroy client and its executor
- Add
util-web-test
- Renew
localhost.platform.rswk.ch
certificate
- Renew
- Bootstrap
bootstrap-core
Build
- Remove
deploy
option. Now only depends ondeploy
inBuildConfig
- Remove
19.1
Released 2022-02-27.
Model
MetaUser
- Fields are now really in ASCII order
Config
HttpServiceSslConfig
cipherSuites
,protocols
are now optional and use defaults fromHttpService
Other
- Util
util-web
- Update Node.js to
17.5.0
for native fetch and adapt web build script - Remove
copy
option fromweb-build.json
web-dist.js
is now expected to be calledweb-dist.json
- Update Node.js to
- Meta
meta-client
component/login
- Adapt to new OTP changes in
UserService
- Adapt to new OTP changes in
meta-engine
EngineUpdater
- Add
FileServiceTask
(task IDfilemigrate
) to migrate to new storage directory layout
- Add
FileService
- Files are now partitioned into subdirectories by the first two
characters of the key. Even with a lot of files, this should make
the directories browsable with a normal file manager
file store c2 c212645f-9416-42c7-9264-5f9416b2c7b9
- Files are now partitioned into subdirectories by the first two
characters of the key. Even with a lot of files, this should make
the directories browsable with a normal file manager
UserService
processUserFixtures
- Now uses
hashed
true. This makes TOTP work for test fixtures, but also requires passwords to be hashed (usegenerateScryptHash
)
- Now uses
getCachedUser
/getCachedGroup
/getCachedConfig
- Now return
Optional
values, so we can cache absence of a value
- Now return
userSearch
/userWrite
- When masked, email/phone are now redacted
userWrite
- OTP validation flow now stores and compares the hash of the user in the requests
- OTP values can now be changed, eg. to a different email or generate a new TOTP key
- Bootstrap
bootstrap-common
dev.json
- Manually download Maven and Node binaries on Linux
bootstrap-dev-server
- Fix various errors
18.0
Released 2022-02-11.
Config
ProvisionWatchdogConfig
- Add optional
engineUser
. User will be grantedFILE_DOWNLOAD
permission on uploaded bootstrap archives. This makes it possible to have watchdog reporting users with limited permissions
- Add optional
Other
- Meta
meta-core
Model
- Add
MAX_CLAUSE_COUNT
- Add
newMultiValueQuery
(was previously inMetaLucene
)
- Add
meta-client
component/login
- Replace
enableForgotUser
withenableForgotUserEmail
,enableForgotUserPhone
- Replace
meta-engine
EngineRuntime
- Add
scheduler
that can be used for caches that rely on expiration. UsesScheduler.systemScheduler()
internally for nowCaffeine.newBuilder().scheduler(runtime.scheduler()).expireAfterAccess(Duration.ofMinutes(5)).build();
- Add
schedule
method withCallable
- Add
UserService
forgotUser
now sends the names of all existing users and not just the first one it finds
- Bootstrap
bootstrap-common
certbot.json
- Add custom renew task on Windows that runs once a day at 01:00
17.2
Released 2022-02-06.
17.1
Released 2022-02-04.
- Update various Java dependency, Maven plugin and dev tool versions
- Bootstrap
bootstrap-common
dev.json
- Fix
cacert.pem
step - Add include for
syncthing.json
- Fix
engine-server-update.json
- Add
skipClone
flag
- Add
bootstrap-dev-vm
- Update to Maven 3.8.4
- Add
ideau
flag to install IDEA Ultimate instead of Community edition
17.0
Released 2022-01-30.
Protocol
- Add
AuthTokenRequest
/AuthTokenReply
- Add
ForgotUserRequest
/ForgotUserReply
LoggingEntrySearchRequest
/LoggingEntrySearchReply
- Fields are now in ASCII order
LoggingMetricSearchRequest
- Fields are now in ASCII order
query
is now optional
LoggingMetricSearchReply
- Fields are now in ASCII order
LoginRequest
- Add optional
token
for token based login
- Add optional
LoginReply
- Add
client
,user
,version
fields that contain sanitized values from request
- Add
Config
UserServiceConfig
- Remove
keySize
fromUserServiceTokenConfig
- Add
forgotContact
- Remove
Other
- Util
util-core
Strings
- Add
redactEmail
,redactPhone
- Add
util-web
ext
- Add
redactEmail
,redactPhone
- Add
- Meta
meta-client
- Add
forgotUser
client
- Remove
engine
observable - Check for correct request type in all request/reply methods
- Remove
component/login
- Remove
enableSaveLogin
option and UI elements - Add
enableForgotUser
,enableResetPassword
options - Add
enableTokenAuth
. If enabled, after successful authentication the client will get a auth token and store it in local storage. Token is restored when login component is loaded and user is logged in (if token is still valid) - Add WebAuthn error toast
- Remove
- Add
meta-engine
UserService
recordFailedAttempt
- Remove
cause
- Add
type
. Must be one ofAttemptType
- Remove
- Rename
VerifyTokenResponse
toVerifyTokenReply
- Index OTP email, phone, webhook in
MetaUser
Lucene document - Index top level textual fields in
MetaUserConfig
Lucene document - Add
authToken
. Generate auth token that is valid for a specific IP and expires in 12 hours. Can be used inLoginRequest
to bypass normal login/auth flow - Add
forgotUser
. Can recover user name from email/phone in OTP settings or email/phone property from user config - Add OTP as available parameter to OTP email subject formatter
16.0
Released 2022-01-22.
Protocol
- Remove
BINARY_BUFFER_SIZE
constant
Other
- Meta
- Fix problems with binary WebSocket messages due to buffer/max message sizes
meta-core
AbstractWebSocketListener
sendBytes
now takes aByteBuffer
payload so we dont have to wrap/unwrap byte arrays
meta-client
logging
- Add
installDebugLogger
. This logger is intended for devices where you can't open dev tools. It creates a visible HTML element in the current documentlogging.installDebugLogger();
- Add
meta-engine
UserService
- Rename
hasUserPermissionToAnyOfKeys
tohasUserPermission
and revert to using cached groups again for performance reasons
- Rename
15.0
Released 2022-01-21.
Config
UserServiceConfig
- Add
authContact
,resetContact
,writeContact
in the form of the newUserServiceContactConfig
. These templates are used for the different OTP challenge types and replaceotpEmailContent
,otpEmailSubject
,otpSmsMessage
- Add
Other
- Util
util-core
SevenZip
extract
now movesdirectory
instead of making a copy and cleans up the created temp directory
- Meta
meta-engine
- Switch all services using Guava's Cache to recommended replacement Caffeine
MetaService
deleteSearchResultsRecursive
now takes optionalchannel
UserService
- Switch to
AsyncLoadingCache
.getCachedX
methods,hasUserPermissionToAnyOfKeys
,isMember
,generateUserToken
now returnListenableFuture
- Differentiate between the different OTP challenge types (auth, reset password, verify and write user). OTP challenge is now created for the combination of type, user and IP address. If a open challenge exists, a new one is not generated until the existing one has expired
userWrite
addipAddress
in addition to existingclientId
for OTP verification
- Switch to
14.0
Released 2021-01-19.
- Util
util-core
SevenZip
- Add
-aoa
option to extract to always overwrite existing files
- Add
- Meta
meta-engine
FileService
localDownload
andlocalUpload
now take parameter object for easier use throughbatchRequestsRecursive
MetaSchema
FieldGenerator
- Rename
isSortable
tosortable
- Add
metaId
parameter to improve tracing/log messages
- Rename
MetaValidator
- Add
metaId
parameter tovalidateSchema
to improve tracing/log messages
- Add
- Bootstrap
bootstrap-common
- Update to latest 7z version
- Add
javaArgs
variable toengine-server.sh
so it's possible to add custom system properties, eg.-Djava.io.tmpdir="D:\tmp"
. Set to empty string, eg. inbuild-properties.json
, when not used
13.3
Released 2022-01-14.
- Meta
meta-engine
ActionExecuteResource
- Fix timeout parameter handling
FileDownloadResource
- Fix timeout parameter handling
FileUploadResource
- Add REST-like API for uploading files
SyncService
context
parameter inAbstractSyncDelegate
methods is now aJsonNode
13.2
Released 2022-01-12.
Model
MetaUserConfig
- Add
getConfig
helper method
- Add
Other
- Meta
meta-engine
MetaSchema
- Add support for
oneOf
/anyOf
ingetFieldTypeRecursive
- Add support for
UserService
userWrite
- Replace
verifyOtp
with optionalclientId
. If provided, OTP changes must be verified by a second request with a valid OTP
- Replace
- Fix splitting up local/synced write operations
- Escape name/id queries in case they contain special characters that break Lucene search
13.1
Released 2022-01-06.
- Util
util-web
i18next
- Check if final locale is actually supported by the resources, otherwise use fallback
- Update to latest Bootstrap Icons 1.7.2
- Meta
meta-engine
FileDownloadResource
- Fix problems with handling output buffer ready state
- All methods take optional
timeout
query parameter in minutes. Defaults to 5 minutes, was 30
MetaSchema
- Add argument sanity checks to field generators
- Bootstrap
bootstrap-common
- Remove
java8
definition - Try to improve
fossil
certificate situation on windows by usingcacert.pem
file
- Remove
bootstrap-dev-server
- Remove standalone Jetty that was used for Jenkins and use built-in Jetty
from
jenkins.war
- Remove standalone Jetty that was used for Jenkins and use built-in Jetty
from
13.0
Released 2022-01-02.
- Meta
meta-engine
ActionExecuteResource
execute
not takes optionaltimeout
query parameter in minutes. Defaults to 1 minute, was 10
EngineResources
- Rename
handleErrorReplyException
tonewErrorResponse
and fix handlingErrorReply
verifyToken
now returnsVerifyTokenResult
that includes theVerifyTokenResponse
fromUserService
. IferrorReply
is present, treat verification as failed
- Rename
EngineServices
- Add
batchRequestsRecursive
to break up large number of requests into batches
- Add
UserService
- Rename
VerifyTokenResult
toVerifyTokenResponse
- Rename
12.0
Released 2021-12-28.
Model
Meta
id
is now a regular UUID with dashes
MetaUser
/MetaUserGroup
- Names can now contain all non whitespace characters
model
newTypeSchema
takes a parameter object
Protocol
TokenRequest
/TokenReply
- Removed
- Tokens are now only available through the
/rs/token
endpoint
Config
FileServiceConfig
- Replace
lucene
withluceneIndexDir
- Replace
HttpServiceConfig
- Rename
resourceBase
toresources
. Is now a set of directories that are served by the default servlet
- Rename
LoggingServiceConfig
- Replace
lucene
withluceneIndexDir
LoggingServiceRetentionPathConfig
- Rename
filePattern
topattern
- Rename
- Replace
MetaServiceConfig
- Replace
lucene
withluceneIndexDir
- Replace
UserServiceConfig
- Replace
lucene
withluceneIndexDir
- Replace
Other
- Util
util-web
- Remove
configloader
module. Useext.loadConfig(...)
instead crypto
- Refactor with parameter objects
- Rename
randomValues
togetRandomValues
nav
- Remove
setPersistState
. Usenav.init({persistState: true})
instead init
andregister
now take parameter object
- Remove
- Remove
util-web-test
AbstractWebDriver
- Rename
closeVisibleModal
toclickVisibleCloseButtons
- Rename
- Meta
meta-client
client
- Fix error with buffer size used for uploads that terminated the WebSocket
RestClient
- Add
resetToken
- Add
meta-engine
EngineRuntime
- Add
scheduleDaily
. Runs a command at the given hour/minute every 24h - Add
scheduleNightly
. Runs a command every 24h, sometime between 00:01 and 02:59
- Add
FileDownloadResource
- Add new
{key}/{fileName}
endpoint to download content with a given file name. This version accepts the token as a query parameter inProtocol.TOKEN_PARAM
(in addition to the header field)
- Add new
FileService
- Use
KeywordAnalyzer
for all Lucene document fields
- Use
LoggingService
- Use
PerFieldAnalyzerWrapper
withKeywordAnalyzer
as default andStandardAnalyzer
forLOGGING_FIELD_MESSAGE
Lucene document fields
- Use
LuceneService
LuceneServiceConfig
- Add
analyzerSupplier
. Services that use aLuceneService
now have to pass in the used analyzers
- Add
- Add
reopenIndex
. Must be called in case the used analyzers are dynamic and have changed
MetaSchema
FieldGenerator
- Add
putAnalyzers
to set custom Lucene analyzers per field
- Add
MetaService
- Use
PerFieldAnalyzerWrapper
withStandardAnalyzer
as default,KeywordAnalyzer
for all meta ID Lucene document fields and use additional analyzers from indexing types inMetaSchema
deleteSearchResultsRecursive
now has optional parametercounter
- Use
UserService
- Use
KeywordAnalyzer
for all Lucene document fields - Rename
token
togenerateUserToken
withUserTokenRequest
- Rename
GenerateTokenRequest
toTokenRequest
- Rename
validSeconds
toexpirationSeconds
and make it optional. UsesUserServiceTokenConfig.expiration
when 0
- Rename
- Remove
getClientEntry
. UsegetClientList
with new helpers onClientListReply
- Use
- Bootstrap
bootstrap-core
Provision
- Use
awaitWatchdogUpdateStatus
instead ofawaitInstanceRunning
when waiting for new server
- Use
bootstrap-test
AbstractBootstrapTest
prepareEngineConfig
now takes path to engine config. UsemoduleDir.resolve(DEFAULT_ENGINE_CONFIG_PATH)
to get the same result as before
11.0
Released 2021-12-11.
Protocol
AuthReply
- Add
config
,groups
like we have inLoginReply
. If user requires auth, configs and groups are now sent inAuthReply
instead ofLoginReply
- Add
ClientListEntry
- Fields are now in ASCII order
- Rename
clientName
toclient
- Rename
clientVersion
toversion
- Add
ipAddress
ClientNotification
- Remove
clientName
,clientVersion
. These were only used byUserService
to populate the client list entries
- Remove
ErrorReply
- Fields are now in ASCII order
ErrorReplyException
- Fields are now in ASCII order
- Switch to record style getters instead of public fields
ErrorReplyFactory
- Fields are now in ASCII order
LoginRequest
- Fields are now in ASCII order
- Rename
clientName
toclient
- Rename
clientVersion
toversion
- Add optional
locale
to indicate client preference (eg. for OTP messages)
Protocol
- Remove
USER_AUTH_ERROR_CHANNEL
- Remove
ResetPasswordRequest
- Add
locale
- Add
UserWriteRequest
- Add optional
locale
. This is not stored, just used fori18n
during OTP verification
- Add optional
Config
GatewayServiceConfig
- Fields are now in ASCII order
LoggingServiceConfig
- Fields are now in ASCII order
SyncServiceConfig
- Fields are now in ASCII order
UserServiceConfig
otpEmailContent
,otpEmailSubject
andotpSmsMessage
now supporti18n
.otpEmailContent
andotpSmsMessage
are formatted with one variable containing the OTP"otpSmsMessage": { "de": "Ihr OTP: %s", "en": "Your OTP: %s" }
WatchdogServiceConfig
- Fields are now in ASCII order
Other
- Util
util-core
Files
- Add
getHashAndSize
that returns SHA-256 hash of file and its size
- Add
Strings
resolveI18Templates
now checks for the presence of an entry forDEFAULT_LOCALE
- Add
getI18nString
to get value from template map that falls back toDEFAULT_LOCALE
- Meta
meta-admin
- Remove export/import on user component
meta-client
postClientNotification
does not set timestamp of passed client notification anymore
meta-engine
AbstractEngineWorkQueueService
- Rename
tryAddWorkUnit
toprocessWorkUnit
- Add
offerWorkUnit
. This variation does not return the processing future - Rename
onBeforeUnit
/onAfterUnit
tobeforeProcess
/afterProcess
and add unit parameter - Add
ShutdownType
option
- Rename
EngineRuntime
- Remove
PreparedShutdownService
- Remove
UserService
otpEmailContent
andotpSmsMessage
formats only get one variable containing the OTP- Remove posting of client notifications on auth errors
- Bootstrap
bootstrap-core
- Fix errors in
certbot
definition for Windows
- Fix errors in
10.0
Released 2021-12-01.
Protocol
NotificationCacheReply
/NotificationCacheRequest
- Removed
Config
UserServiceConfig
- Remove
totpValidity
. Accept one future and two past TOTPs by default - Rename
otpEmailMessageFormat
tootpEmailContent
. Can now contain a file URI that is resolved viaStrings.resolveTemplate
- Rename
otpSmsMessageFormat
tootpSmsMessage
- Remove
Other
- Meta
meta-engine
AbstractEngineExecutionThreadService
/AbstractEngineIdleService
- Now implement new interface
ConfigurableService
- Add
startUp
andshutDown
implementations to register with new event bus forConfigWatcherNotification
. All services should callsuper.startUp/shutDown
- Now implement new interface
EngineRuntime
- Switch from Guava's EventBus
to a custom RxJava based bus in
EngineEventBus
final var sub = runtime.eventBus().subscribe(ClientNotification.class, this::onClientNotification); EngineEventBus.dispose(sub);
- Add
AbstractConfigWatcher
and implement check for config changes (was previously part ofNotificationService
)
- Switch from Guava's EventBus
to a custom RxJava based bus in
EngineEventBus
EngineServices
- Add
ConfigurableService
interface - Add
ConfigWatcherNotificationConsumer
- Add
NotificationService
- Removed. With the removal of notification cache and moving of event bus/config watcher to runtime, this service is obsolete
UserService
verifyTotp
- Replace
validPeriods
withacceptedCodes
- Replace
- Support HTML content for OTP emails
- Delete configs of deleted users and groups
meta-test
- Add
ClientNotificationTestSubscription
andMetaNotificationTestSubscription
- Add
9.0
Released 2021-11-24.
Config
FileServiceConfig
- Add
expiration
in seconds for expiration check schedule
- Add
Other
- Util
util-web
ext
- Refactor
displayNotification
,insertDateTimes
,loadFileContent
,requestPermission
,shrinkImage
to take parameter objects - Add
retainAtoZAndDigits
- Refactor
- Meta
meta-core
Model
- Add
DATE_NUMBER_MAX
,DATETIME_NUMBER_MAX
constants for range queries
- Add
meta-engine
EngineRuntime
- Rename
shutDownHandle
tocancelFuture
. Is now static and takes any type ofFuture
- Rename
EngineUpdater
JsonExportTaskConfig
/JsonExportTaskResult
/EngineImportTaskConfig
- Fields are now in ASCII order
JsonImportTaskConfig
- Rename various fields
- Add
userUpdate
FileService
- Properly implement expiration mechanism
- Index expiration timestamp
- Post
FileExpirationNotification
when a file has expired and was deleted
- Properly implement expiration mechanism
MetaLucene
- Add
otpType
field to user document
- Add
UserService
- Fix problem when writing users with existing TOTP keys when
hashed
is false, eg. inCloneTask
- Add
getClientEntry
- Fix problem when writing users with existing TOTP keys when
8.0
Released 2021-11-17.
Protocol
PasswordResetReply
- Add
success
in case password was reset
- Add
Other
- Java
- Remove
final
frominstanceof
pattern matching variables
- Remove
- Util
util-core
Ext
- Add
newPoolThreadFactory
,newFixedThreadPool
,newScheduledThreadPool
- Add
Wget
- Remove static
HTTP_CLIENT
instance that was used fortoFile
,asString
,invokeWebhook
. These methods once again start and stop a client for each invocation - Remove
unsafe
option. PassnewUnsafeHttpClientTransport
tonewHttpClient
newHttpClient
now sets a default executor
- Remove static
- Meta
meta-client
component/login
- Add
enableWebAuthn
option - Smaller improvements and fixes
- Add
- Bootstrap
bootstrap-dev-vm
- Fix problem with trusting certificates on Windows
7.0
Released 2021-11-11.
Protocol
UserWriteReply
- Add
verifyOtp
to signal that OTP changes need verification
- Add
UserWriteRequest
- Add
otp
when verifying OTP changes
- Add
Other
- Merge Nexus repositories
bootstrap-snapshots
andbootstrap-releases
(again) back into a singlebootstrap
repo, or it gets annoying when switching bootstrap modules between release and snapshot versions - Util
util-core
Wget
- Remove timeout parameters from
toFile
- Remove
executeWithHttpClient
- Add
invokeWebhook
- Remove timeout parameters from
util-web
- Update to latest Bootstrap Icons 1.7.0
- Meta
meta-client
component/login
- Support new
userWrite
OTP verification flow. Make sure to include newcomponent/verify
component inui.bind
andweb-dist.js
configs - Remove auto login after reconnect behaviour
- Remove
onTotpReply
parameter
- Support new
component/verify
- Reusable verification modal
meta-engine
UserService
userWrite
has a new parameterverifyOtp
. If true, changes to OTP settings requires a second request with a valid OTP/TOTP for verification
meta-test
WebDriverTest
- Add
onLoginEmailAuth
andonLoginTotpAuth
helper methods that can be used together with existinglogin
helper
- Add
- Bootstrap
bootstrap-core
WgetExecutor
- Remove
timeout
,unsafe
options
- Remove
6.0
Released 2021-11-05.
Model
MetaGrantKeys
- Rename
POST_CLIENT_NOTIFICATIONS
toPOST_CLIENT_NOTIFICATION
- In Java enum,
value
is nowkey
- Rename
MetaLog
- Fields are now in ASCII order
Protocol
ClientNotification
- Fields are now in ASCII order
FileInfo
- Fields are now in ASCII order
- Add optional
expiration
PingReply
/PingRequest
- New method for client side pings
ResetPasswordRequest
user
not nullable
SubscriptionRequest
- Fields are now in ASCII order
channels
not nullable
UploadRequest
- Fields are now in ASCII order
- Add optional
expiration
Config
FileServiceConfig
- Replace
syncthingApi
/syncthingApiKey
withsyncthingConfig
.FileService
now retreives the API and key directly from the config file at runtime
- Replace
LoggingServiceConfig
- Remove
logPath
- Add
retentionPaths
"retentionPaths": [ { "filePattern": "{logDir}/*.zip", "retention": 14 } ]
- Remove
Other
- Meta
meta-admin
- Fix clients state update handling
- Fix clients and notification cleanup
meta-client
Client
/client
- Remove
reconnectInterval
option and always try to reconnect the WebSocket (except when the client gets kicked due to policy violations) - Add
ping
mechanism, so we have server and client side pings for better detection of lost connections
- Remove
Client
disconnect
now returns a future to make it behave like the JavaScript client
client
workerPath
now defaults tolib/meta-client/js/
, so most apps don't need to provide it anymore
RestClient
executeFileRequest
- Remove timeout parameters, since they were only applied to receiving header information in the first place
meta-engine
EngineUpdater
JsonImportTaskConfig
- Add
usersHashed
to be able to import users with hashed passwords
- Add
UserService
recordFailedAttempt
- Add
cause
- Add
userWrite
- When deleting a user, remove it from all groups
- Add
enforce
parameter. If set to false, anyUserServiceEnforceConfig
is not enforced
EngineWebSocketController
- Allow clients to receive notifications on channel equal to their
clientId
- Only allow password reset for users with login permission
- Allow clients to receive notifications on channel equal to their
- Util
util-core
Dates
- Remove
toZonedDateTime
, useZonedDateTime.now()
/atZoneSameInstant
- Remove
Files
- Method parameters are now in ASCII order
copyDir
now takes a optionalVariableResolver
. If provided, all files are copied usingcopyTextFileFiltered
with the given resolver
util-web
- Change naming convention for
require-init.js
script toindex-init.js
configloader
- No longer a
requirejs
plugin - Client configs should now be based on a
config.json
file that is fetched inconfig.js
module. The config module can then be passed toload
// config.js return function fetchConfig() { return fetch("./js/config.json").then( (response) => response.json() ).then( (config) => Object.assign({version: "${project.version}"}, config) ); };
// index.js configloader.load(config).then(function (loadedConfig) { that.config = loadedConfig; return ui.bind({ components: [ {module: "myapp-web/component/mycomponent", name: "mycomponent"} ], i18NextOptions: { debug: that.config.debug, resources: i18n }, viewmodel: that }); }).then(function () { that.hasLoaded(true); LOG.info(`loaded, version=${that.config.version}`); });
- No longer a
ext
- Add
nowDateTimeString
- Should replace
new Date().toISOString()
when a UTC ISO date time string is needed and is equivalent toext.toDateTimeString(ext.now())
- Should replace
registerServiceWorker
- Remove
version
andscope
. Theworker-init.js
script is now expected to be in the root directory, so the default scope is sufficient
- Remove
- Add
i18n
- Remove
newExtendedI18n
. Use_.defaultsDeep
to merge multiple i18n resources before passing them toinit
- Remove
ui
- Rename
init
tobind
. Now takes an parameter object - Add
modalOptions
,offcanvasOptions
,tooltipOptions
to corresponding KO bindings instead of exposing a couple of specific options - Add
progress
KO binding
- Rename
- Change naming convention for
- Bootstrap
bootstrap-common
syncthing.json
/syncthing-server.json
- Add required actions to install and configure Syncthing
bootstrap-core
CopyExecutor
filter
option now works for directories and applies to all contained files
bootstrap-test
- Finish
cluster
test case with etcd, Syncthing and Wireguard setup
- Finish
5.0
Released 2021-10-22.
Lots of changes in all parts of the system, including model and protocol. Login
component got some improvements, plus users are now able to reset passwords.
meta-engine
is getting closer to have full support in all services for clustered
environment. Switch to Java 17, Fossil SCM, IDEA and use of Jenkins Pipelines.
Model
MetaGrantKeys
- Rename
ACTION_EXECUTE
toEXECUTE
and valueac
toex
- Change
POST_CLIENT_NOTIFICATIONS
valuecln
tocn
- Add
SYNC
grant forSyncService
based operations, that only need to be available to sync peers
- Rename
MetaLogType
- Moved to its own class instead of being inner class of
MetaLog
- Moved to its own class instead of being inner class of
MetaUser
- Fields are now in ASCII order
- Move WebAuthn options from
otp
to own fieldwebAuthn
- Rename
MetaUserWebAuth
/MetaUserWebAuthCredential
toMetaUserWebAuthn
/MetaUserWebAuthnCredential
MetaUserConfig
- Fields are now in ASCII order
- Remove
id
and use computed identifier, seeModel.forgeConfigId
MetaUserGroup
- Fields are now in ASCII order
Protocol
AuthRequest
- Rename
AuthRequestWebAuthAssertionReply
toAuthRequestWebAuthnAssertionReply
- Rename
ExecuteRequest
/ExecuteReply
- Renamed from
ActionRequest
/ActionReply
- Renamed from
FileSearchRequest
/FileSearchReply
- Rename
after
/last
tocursor
- Rename
LoggingEntrySearchRequest
/LoggingEntrySearchReply
- Rename
after
/last
tocursor
- Rename
LoggingMetricSearchRequest
/LoggingMetricSearchReply
- Rename
after
/last
tocursor
- Rename
LoggingMetricTimeRequest
/LoggingMetricTimeReply
- New method for starting/stopping client side metric timers
LoginReply
- Remove
otp
- Add
isAuth
, which tells a client if further authentication is needed. If false, no call toauth
with the OTP/2FA is necessary - Rename
LoginReplyWebAuthAssertionRequest
toLoginReplyWebAuthnAssertionRequest
- Remove
LogMessage
- Remove
timer
/timerRef
. Use newLoggingMetricTimeRequest
- Remove
PasswordResetRequest
/PasswordResetReply
- Support automatic password reset via verification of user OTP
SearchRequest
/SearchReply
- Rename
after
/last
tocursor
- Rename
UploadReply
- Add
duplicate
flag to signal that file with same hash already exists and upload has no effect
- Add
UserConfigSearchReply
/UserConfigSearchRequest
- Add cursor and limit like other search methods
UserGroupSearchReply
/UserGroupSearchRequest
- Add cursor and limit like other search methods
UserSearchReply
/UserSearchRequest
- Add cursor and limit like other search methods
UserWriteReply
- Rename
UserWriteReplyWebAuthCreateRequest
toUserWriteReplyWebAuthnCreateRequest
- Rename
UserWriteRequest
- Add
webAuthnCreate
flag to start registration of new WebAuthn credentials - Rename
UserWriteRequestWebAuthCreateReply
toUserWriteRequestWebAuthnCreateReply
- Add
UserWritePartialReply
/UserWritePartialRequest
- New method for partial update of
MetaUser
- New method for partial update of
UserGroupWritePartialReply
/UserGroupWritePartialRequest
- New method for partial update of
MetaUserGroup
- New method for partial update of
WriteObjectPartialReply
/WriteObjectPartialRequest
- New method for partial update of
MetaObject
, replacesWRITE_ACTION.PARTIAL_UPDATE
option
- New method for partial update of
WRITE_ACTION
- Remove
PARTIAL_UPDATE
- See new methods on
MetaService
andUserService
- Remove
- Add
ResetPasswordRequest
/ResetPasswordReply
Config
BuildValidateConfig
- Add
validatorClass
that can be used for custom validation logic of the bootstrap module before build starts. Validator must extendAbstractBuildValidator
- Add
FileServiceConfig
- Add
syncthingApi
/syncthingApiKey
for clustered file synchronisation using Syncthing
- Add
LuceneServiceConfig
- Fields are now in ASCII order
HttpServiceConfig
- Fields are now in ASCII order
- Add
forceHttps
option to be able to forcehttps
on certain paths - Add
redirect
option to add RedirectRegexRule HttpServiceHeaderConfig
- Add
xframe
option to use differentX-Frame-Options
header. Default is stillDENY
- Add
UserServiceConfig
- Fields are now in ASCII order
- Add
enforce
to set password and OTP rules - Add
ipAddressAttempts
to enable blocking of failed attempts based on IP - Add
otpEmailMessageFormat
,otpSmsMessageFormat
- Rename
webAuth
towebAuthn
WatchdogServiceCheckConfig
/WatchdogServiceReportConfig
- Remove
schedule
,unsafe
options
- Remove
Other
- Switch from Mercurial/SCM-Manager to Fossil SCM
- Java
- Update to JDK 17
- Switch to IDEA as default IDE
- Source code navigation
- Remove
platform-ide
repository
- Start preparing modules for JPMS
- Currently unable to switch due to split packages in Lucene, which should be resolved with version 9
- All split packages were removed, resulting in breaking changes in test modules
- Use Jenkins pipeline for job configurations and add to SCM
- JavaScript code adapted to new JSlint rules regarding parameter and property ordering
- Instead of using
spec
parameter object, use object destructuring assignmentfunction ({ param1 = 123, param2 }) { ... };
factory.myObject = function ({prop1, prop2}) { return Object.freeze( {prop1, prop2} ); };
- Instead of using
- Util
util-core
Dates
- Add
today
returning the currentLocalDate
- Add
Ext
- Remove
getSha256Hash
, useHashing
directlyHashing.sha256().hashBytes(...);
- Remove
Json
- Add
toJson
withLocalDate
- Add
SevenZip
- Renamed from
P7zip
- Include
7z
executable for Linux - Due to
7z
not preserving file permissions, runchmod +x
for all extracted executables when extracting from atar
archive
- Renamed from
util-web
- Build
- Rework
web-build.js
to use Node.js promise functions, eg.fsPromises
- Add automatic JSLint for all files in
src/main/resources/js
, including any subdirectories - Switch to a fork
of
r.js
that uses latest version of Esprima
- Rework
- Update to Bootstrap 5
device
- Make entities from event and record factories immutable using
Object.freeze
- Make entities from event and record factories immutable using
i18next
init
now takes aspec
objecti18next.init({debug: config.debug, resources: i18n})
nav
- State is now also considered if a registered update delegate should be invoked
ui
- Build
util-web-test
AbstractWebDriver
now uses@ValueSource
for parameterized tests, so we can pick which drivers to use
- Meta
meta-admin
- Add metric filter presets and config option
- Add partial update support for user and groups
- Use
objects
/searcher
in files and users and implement cursor/limit support
meta-client
- Add
resetPassword
client
- Add
navigator
online status to connection status check
- Add
objectscache
- Does not inherit from
objects
anymore. Pass theobjects
instance as a parameter
- Does not inherit from
component/login
- Remove auto connect client on load
- Remove render logic and margins
- Improve edit user options
- Add locale switcher
- Add password reset flow
- Add
customClasses
option - Add
passwordRegex
,requireOtp
options to enforce password and 2FA rules
- Add
meta-core
- Make JavaScript entities in model and protocol factories immutable
using
Object.freeze
- Make JavaScript entities in model and protocol factories immutable
using
meta-engine
AbstractEngineLauncher
- Add
newUpdaterServices
, so applications can constructUpdaterServices
instance with specific modules
- Add
ActionService
- Result of execution is not validated against result schema anymore
- Add
ipAddress
to delegate arguments
ActionExecuteResource
- Add REST-like API for executing actions
DatabaseService
- Remove
getDefaultDatabase
method - Add
checkTableExists
helper method
- Remove
FileService
- Implement sync support and integrate with
SyncService
- Add
UPLOAD_FAIL_NOTIFICATION_ACTION
, in addition to existingUPLOAD_DONE_NOTIFICATION_ACTION
- Implement sync support and integrate with
GatewayService
- Add alert for
smsRemaining
gauge, hardcoded to 100
- Add alert for
LogginService
- Add
loggingMetricTime
method
- Add
MetaLucene
- Grants on users and groups are now indexed
- Add
users
field to groups with number of users
MetaService
- Add
writeObjectUpdate
as replacement for previousWriteAction.PARTIAL_UPDATE
- Add
UserService
- Attempts are now recorded and blocked for
clientId
,user
andipAddress
- Rename
verifyUserOtp
toverifyOtp
- Only verifies the OTP and does not generate a token anymore.
Use the now public
generateToken
method
- Only verifies the OTP and does not generate a token anymore.
Use the now public
- OTP message formats can now make use a second parameter with the expiration timestamp
- Add
groupWritePartial
anduserWritePartial
- Add
resetPassword
- Attempts are now recorded and blocked for
- Bootstrap
bootstrap-core
- Shaded JAR is now a seperate artifact with classifier
shaded
Build
- Remove
apt install
forp7zip-full
, so execute can run offline. Still try installat
, but ignore failure
- Remove
Provision
- Update to Ubuntu 21.04 / Windows 2019 as default OS
VariableExecutorAction
- Add
overwrite
option
- Add
- Shaded JAR is now a seperate artifact with classifier
bootstrap-common
certbot.json
- Switch to beta version of EFF certbot for Windows
dev.json
- Switch to NodeSource repository on Linux for
nodejs
package - Fix problems with Linux installation
- Switch to NodeSource repository on Linux for
- Add new definitions
etcd-server.json
openssl.json
sqlite.json
syncthing.json
syncthing-server.json
4.0
Released 2021-04-08.
Config
- Meta
SyncServiceConfig
peers
is now a list ofSyncServicePeerConfig
SyncServicePeerConfig
- Add
id
for the engine ID
- Add
SyncServiceEtcdConfig
- Remove authorization and TLS options
- Bootstrap
- Try to reduce duplication in build and provision configs
BuildConfig
- Add
propertiesPath
option to reference JSON file with common properties share by multiple build configs
- Add
ProvisionConfig
- Move
id
formProvisionWatchdogConfig
toProvisionConfig
asserverId
- Move
ExecuteConfig
- Make
dataDir
,logDir
andtoolDir
optional. They default to theplatform
default directories
- Make
Other
- Fix problems with Java 16 update
- Update to
2021-06
Eclipse builds - Update to
Hirsute Hippo
Ubuntu builds
- Update to
- Start preparing for Java modules
- Remove split packages
- Start switching to
@Nullable
from Checker Framework - Util
util-core
Dates
- Remove
fromSqlTimestamp
- Remove
P7zip
- Add support for
tar.gz
on Windows. Now uses same command for Linux and Windows
- Add support for
util-core-test
- Move all test classes to
test
package
- Move all test classes to
util-web
nav
has new option to persist state. Usenav.setPersistState(true)
before callinginit
- Meta
meta-client
- Rename
TokenHelper
/tokenhelper
toRestClient
/restclient
- Rename
- Bootstrap
- Fix errors where
moduleDirWin
was not used for Windows specific commands bootstrap-core
Build
- Remove
debug
option
- Remove
Provision
- Figures out if it's a new server or an update by checking for a running instance, if a server provider is configured
- Fix errors where
3.0
Released 2021-03-25.
Model
WatchdogStatus
alerts
is a list ofWatchdogStatusAlert
instead of aMap<String, String>
. Using a map caused problems with partial updates of the status objects
Config
EngineWebSocketControllerConfig
- Rename
allowUnauthorizedLog
tologAllowUnauthorized
- Add
uploadGrantFull
. If true, grantsFILE_FULL
on upload instead ofFILE_DOWNLOAD
- Rename
Other
- Update to Java 16
- Discover FluentFuture
- Rename all inner classes that were prefixed with the parent class name
- Eg.
AlertRegistryAlert
toAlert
- Eg.
- Util
util-core
Env
- Remove
newPrefixedThreadFactory
andshutDownExecutor
. UseThreadFactoryBuilder
andMoreExecutors.shutdownAndAwaitTermination
directly
- Remove
util-web
- Replace
request
module used inweb-build.js
script withnode-fetch
- Switch to Bootstrap Icons
- Add
web.css
resource- Includes import for bootstrap and icons. Import into application
stylesheet with
@import url("../lib/util-web/css/web.css");
- Includes import for bootstrap and icons. Import into application
stylesheet with
- Change build configurations to unpack Maven web modules to
${basedir}/src/main/resources/lib
instead of${project.build.directory}
. Now all web resources are available forr.js
and we can use shared resources from other modules ext
- Remove
db
property. Usekeyval
module directly
- Remove
ui
- In
modal
KO binding, removeconfirmClose
and add newmodalStatic
option. Now uses static backdrop that has the same effect
- In
- Replace
- Meta
meta-client
- Remove request options parameter from all request/reply methods
Client
- Fix
CONNECTERD_PROPERTY
spelling toCONNECTED_PROPERTY
- Fix
meta-engine
EngineRuntime
- Rename
shutDownExecutor
toshutdownAndAwaitTermination
- Rename
EngineResources
class added for common functions used in resource classesverifyToken
now returns unauthorized (401) or forbidden (403) responses, soTokenHelper
does not get stuck in a loop of unauthorized requests
meta-test
- Remove service name prefix from all
public static final
test variables
- Remove service name prefix from all
- Bootstrap
bootstrap-core
- Add
moduleDirWin
variable for execution and make suremoduleDir
is always a Linux style path
- Add
2.0
Released 2021-03-12.
Config
ProvisionServerConfig
- Add
deleteExisting
,reboot
options ProvisionProviderVultrConfig
- Add
blockStorageId
option
- Add
- Add
Other
- Remove
package.json
from JSDoc build - Rename
meta-engine-test
module tometa-test
, since it contains test cases for core, client and engine - Moved
ide
to its ownplatform-ide
repository- Run
mvn -DunpackIde
to build and unpack the latest IDE bootstrap-dev-env
now uses a snapshot version downloaded from Nexus
- Run
1.0
Released 2021-03-07.
First release in ‘native’ Java. Goodbye Xtend. Mostly compatible with legacy 0.xxxx
version in regards to model, protocol and configs, but contains many breaking changes.
Model
MetaLog
- Renamed from
MetaLogEntry
- Renamed from
MetaUser
- OTP/2FA options are not in
otp
object with aMetaUserOtpType
marking the active option
- OTP/2FA options are not in
MetaUserConfig
- Has a
id
field, instead of using a computed key fromuser
andgroup
- Has a
WatchdogStatus
- Does no longer have
checks
andmetrics
. Instead usealerts
to only report problems
- Does no longer have
MetaSchema
- New class for handling JSON schema related tasks
- Field types are no longer dependent on a particular name (eg. field ending
in
dateTime
). There are meta types now that can be used in JSON schemas - Only fields defined in the
MetaType
JSON schema are indexed in Lucene 2019-09
JSON schemas are now loaded from local resources to make it work offline
Model$Lucene
- Now contains constants and helper methods for Lucene operations
Protocol
MetaNotification
- Rename
entry
tolog
- Rename
ActionRequest
- Rename
params
toparam
- Rename
WriteAction
- New
PARTIAL_UPDATE
value that replaces the boolean flag on write requests
- New
WatchdogUpdateRequest
/WatchdogUpdateReply
- Removed. Local updates now use the normal report mechanism with a special
engine
valueself
"watchdog": { "report": { "engine": "self", "engineId": "localhost", "password": null, "updatePassword": null "updateUser": null, "user": null, } }
- Removed. Local updates now use the normal report mechanism with a special
egn
as a default channel does no longer exist. If no channel is specified (eg. inWriteRequest
), then no notifications are dispatched
Config
ClientConfig
- Removed all web socket configuration options
FileServiceConfig
- Removed
cleanupSchedule
,bufferSize
- Removed
HttpServiceConfig
- Removed all web socket configuration options
LoggingServiceConfig
- Removed
monitorSchedule
- Removed
LuceneServiceConfig
- Removed
commitSchedule
,workQueue
- Removed
WatchdogServiceConfig
- Removed update config
Other
- Web
- Merged into
util
web-core
is nowutil-web
web-core-test
is nowutil-web-test
- Merged into
- Util
util-core
Json
contains everything JSON
util-web
- Update to Bootstrap 5
- Use constraint API for form validation
- Remove jQuery as a dependency
- Replace Moment.js with Luxon
ext
contains parsing/formatting functions
- Add JSDoc integration
device
- With the removal of Android wrapper, refactored to a static collection of browser functions
ui
- Add
toast
KO binding - Add
validity
KO binding
- Add
- Update to Bootstrap 5
- Meta
meta-core
Cst
/cst
modules were removed and their contents distributed to other modules
meta-client
viewmodel
- New helper module for viewmodel related functions that were previously
in
meta-core/mode
or other places
- New helper module for viewmodel related functions that were previously
in
component/login
- Contains all means to change OTP methods, like generating QR code for TOTP or the WebAuthn registration/login flow
meta-admin
currently does not contain any of these functions to prevent duplication of code. Use login component to change OTP methods of an user (by generating a new password, if necessary)
meta-engine
ActionService
- Expects services to register with
registerExecuteDelegate
- Expects services to register with
FileService
- Expects services to register with
registerBackupDelegate
- Expects services to register with
MetaService
- Add
search
method with native Lucene query and sort to allow for more complex search operations from other services - Partial
MetaObject
updates usingbuildObjectUpdate
now work recursive on any depth
- Add
WatchdogService
- Uses normal report mechanism for local updates, see protocol changes
- Remove
EngineUploadResource
meta-engine-test
- Use
Builder
interfaces in Dagger components to set service configurations - Default user
USER_SERVICE_TEST_USER
is nowplat
with passwordplat
Importer
is nowFixtureImporter
- See
WebDriverTest
inmeta-admin-test
for references on how to setup runtime, import test data and run UI tests
- Use
- Bootstrap
- Rename
framework/bootstrap/bootstrap-test
tobootstrap-core-test
to prevent name clash withbootstrap/bootstrap-test
bootstrap-core
- JSON format changed
- Old
{ "copy": { "source": "{moduleDir}/fixture/certbot-deploy.sh", "target": "{toolDir}/certbot/deploy.sh", "iif": { "env": "NIX" } } }
- New
{ "action": { "type": "copy", "source": "{moduleDir}/fixture/certbot-deploy.sh", "target": "{toolDir}/certbot/deploy.sh" }, "condition": { "env": "NIX" } }
- Old
- No longer uses command line arguments for
-execute
. All parameters are set inExecute
configuration file. Thebootstrap.json
file is generated during build with-build
(but can still be manually changed before execution if needed) - Desired version of the bootstrap module is now defined in
Build
configuration- This can be used to checkout the correct repository revision in automated
build jobs with the new
-buildversion
argument
- This can be used to checkout the correct repository revision in automated
build jobs with the new
- No longer use Maven filtering at build time.
copy
action now can filter a file and replace any variables in it with"filter": true
- Rename
binDir
,customerDir
,moduleDir
used inBuild
configurations (outside ofbootstrap.properties
) tobuildBinDir
,buildCustomizeDir
,buildModuleDir
- JSON format changed
bootstrap-common
engine-*.json
definitions now use different directories- Engine
{toolDir}/{serviceName}/engine
- Web
{toolDir}/{serviceName}/web
- Engine
- Rename
dev-core.json
definition toutils.json
- New
engine-server.json
definition
- Rename
- Android
- Removed, as it is currently out of scope. A new solution should target both Android and iOS devices
Prehistoric
0.761 - 0.1215
Released between 2018-12-03 and 2021-09-01.
See SCM history.
0.1 - 0.760
Released between 2015-06-02 and 2018-12-03.
See SCM history.
Pre 0.1
Sometime after 2013.
Cheatsheet
Pre
stable
- Merge
trunk
fossil merge trunk
- Update
src/site/markdown/release.md
- Update
src/doc/doc.md
- Commit
fossil commit -m "Merge with trunk and update release notes."
- Set release version
npm version "$RELEASE_VERSION" --workspaces mvn versions:set -DnewVersion="$RELEASE_VERSION" -DgenerateBackupPoms=false
- Update NPM dependency versions in
package.json
"util-web": "$RELEASE_VERSION"
- Tag release
fossil commit -m "Release version $RELEASE_VERSION." --tag "$RELEASE_VERSION"
- Merge
Release
- Run platform-release
Post
trunk
- Merge
stable
fossil merge stable
- Update
src/site/markdown/release.md
- Update
src/doc/doc.md
- Set next version
npm version "$NEXT_VERSION-SNAPSHOT" --workspaces mvn versions:set -DnewVersion="$NEXT_VERSION-SNAPSHOT" -DgenerateBackupPoms=false
- Update NPM dependency versions in
package.json
"util-web": "$NEXT_VERSION-SNAPSHOT"
- Commit
fossil commit -m "Prepare next version $NEXT_VERSION-SNAPSHOT."
- Merge
- Run
platform-snapshot
- Run
bootstrap-dev-vm
rswk.ch
- Update
httpd-vhosts.conf
- Update