Release
2.33.1
Released 2024-03-09.
Other
- Update to latest Lucene version
- Meta
meta-engineFileService- Fix large file handling in
FileDownloadResource localDownloadnow returns the path to the local file, instead of making a copy
- Fix large file handling in
- Util
util-coreSevenZip- Use native tar command on Linux and remove tar support on Windows
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-testAbstractWebDriver- 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-commonopenssl.json- Update to 3.1.4
bootstrap-dev-vm- Update IntelliJ configs
- Meta
meta-client- Fix i18n
meta-engineEngineUpdater- Add optional argument to
CloneTaskthat specifies how many month ofMetaLogto migrate. Eg.-update clone 12to keep the last 12 month of logs - Refactor searching/creating meta entities back to
whileloop instead of recursion for performance reasons
- Add optional argument to
2.32.4
Released 2023-11-07.
Other
- Bootstrap
bootstrap-commonopenssl.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-engineLuceneService- Increase queue size from 1000 to 5000
UserService- Batch group updates when deleting a user
WatchdogService- If
checkis enabled, registerFileExpirationNotificationlistener that removes grants from users for expired files
- If
- Util
util-web- Retire
web-lint.jsscript - Update Bootstrap versions
- Retire
2.32.3
Released 2023-09-12.
Other
- Bootstrap
bootstrap-commondev.json- Update Maven to 3.9.4. Requires change in
settings.xmldue 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
npmdirectly from Maven build - Use
defineinstead of Maven filtering, eg. forversion - Use
esbuild-plugin-copyinstead of Maven to copy resources
- Remove shell scripts. Just call
util-web-test- Add
NukeServletthat usesClear-Site-Dataheader for cleaning up browser cache between test cases runUiTestnow takes aCallableand tests must provide their ownFluentWaitfinal 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-commonopenssl.json- Update to 3.1.2
2.32.1
Released 2023-07-23.
Other
- Bugfixes
- Fix
config.js/config.jsonhandling with regards toexternalin esbuild - Fix path to
config.jsoninbootstrap-watchdog-server
- Fix
- Util
util-webweb-build.bat/.sh- Remove check that a
web-build.mjsscript exists, now just executesnpm run build - Remove automatic lint step
- Remove check that a
- Rename lint script from
web-lint.mjstoweb-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-clientclient- Now takes single
engineargument
- Now takes single
objects- Remove
fromMetaObjectVm - Rename
onAddObjecttoonAdd - Rename
onRemoveObjecttoonRemove - Rename
toMetaObjectVmtotoVm
- Remove
- Util
util-web- Add
workerfactory.jsfor service workers - Rewrite all web build scripts
- Add
31.3
Released 2023-06-22.
Other
- Bugfixes
- Missing TOTP after
clone - Missing sorted field for
MetaUserConfigId
- Missing TOTP after
31.2
Released 2023-06-15.
Other
- Minor maintenance release
- Meta
meta-engineEngineEventBus- Use
observeOninstead ofsubscribeOn
- Use
31.1
Released 2023-06-08.
Other
- Util
util-webnav- Params now sorted
31.0
Released 2023-06-07.
Other
- Bootstrap
bootstrap-commondev.json- Update fossil to 2.21
- Update Maven to 3.9.2
- Update Node.js to 20.2.0
- Meta
meta-clientlogin- Clean up login modals
objects- Rename
clearObjectstoclear
- Rename
meta-clientModel/model- Add parameter
additionalClausestonewMultiValueQueryto correctly partition the query without exceedingMAX_CLAUSE_COUNT
- Add parameter
meta-engineHttpService- Add nightly reload of keystore (makes Certbot pre/post scripts obsolete)
- Add certificate
notAfterdate health check - Add certificate
notAfterdate to service info
- Remove all cluster functionality, including
SyncService
meta-testHttpServiceTestnewHttpServiceTestConfignow has two options for setting CSP headercspHeaderfor a full custom CSP headercspSrcfor additional sources usingHttpServiceTest.CSP_HEADER_FORMAT
- Util
util-web- Switch to standard
npmcommand 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
requireOtptootpTypes
- Add
Other
- Meta
meta-adminconfig.json- Add
otpRequired - Move login related properties to seperate
loginobject - Rename
requireOtptootpTypes
- Add
meta-clientlogin- Add
webAuthnEnableparameter - Redesign recover user and password reset
- Rename
enableEditUsertoeditUserEnable - Remove
enableRecoverUserEmail/enableRecoverUserPhone/requireOtp. Now controlled byotpRequired/otpTypes
- Add
meta-engineLuceneService- Properly close old reader on reader refresh
UserServiceresetPasswordnow accepts 2FA email/phone and email/phone from user config
meta-testFixture- Add
watchdogConfigtonewTestEngineConfig. Usenew WatchdogServiceConfig(null, null)to disable watchdog service for testing
- Add
- Util
util-webcrypto- Add
newUuidthat usesrandomUUIDand falls back to old random string mechanism - Remove
generateRandomString - Rename
generateRandomInttogetRandomInt
- Add
30.0
Released 2023-04-27.
Protocol
RecoverUserRequest/RecoverUserReply- Renamed from
ForgotUserRequest/ForgotUserReply
- Renamed from
FileSearchRequest- Add
sort,sortReverseoptions. UseModel.Lucene.FILE_FIELD_UPLOAD_TIMESTAMPandsortReverse:trueto get same result as before
- Add
Config
UserServiceConfig- Rename
forgotContacttorecoverContact - Rename
writeContacttoverifyContact
- Rename
Other
- Update various dependency and plugin versions
- Meta
- Update to latest Lucene version
meta-client- Renamed
forgotUsertorecoverUser login- Redesign recover user/password reset
- Remove
enableTokenAuth. Now enabled by default - Rename
enableForgotUserEmail/enableForgotUserPhonetoenableRecoverUserEmail/enableRecoverUserPhone
objects- Rename
searchLoadedtonoOfSearchResults
- Rename
objectscache- Removed
searcher- Add classes to allow for styling
- Renamed
meta-engine- Cleanup dagger modules, see
platform-archetypefor refrence AbstractEngineWorkQueueService- Rename
processWorkUnittoofferWorkUnit. PreviousofferWorkUnitmethod was removed - Rename
processtoprocessWorkUnit, includingbeforeandaftermethods
- Rename
EngineRuntime- Add generic
FileWatcherinterface (AbstractConfigWatcherimplements this) - Add
registerFileWatcherto allow services to watch for file changes
- Add generic
EngineUpdater- Remove
LoggingServicefrom 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/writewith a singleprocessmethod - Consolidate
SearchContext/WriteContextclasses into a singleLuceneContext
- Replace
MetaLucene- Use new
DoubleField/IntField/LongField. These fields are automatically sortable, see here
- Use new
MetaSchema- Fix missing
KeywordAnalyzerforMETA_LOG_FIELD_DATA_CHANGE,META_OBJECT_FIELD_FIELD - Map integer fields to
IntFieldin lucene - Use
LocalDatefor date fields
- Fix missing
MetaService- Remove fixture mechanism. This means
MetaActionandMetaTypeneed 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. startVerifyOtpcontactnow optional. UsesverifyContactby default
WatchdogServicecheckEnginesnow usesMetaLogto check if engine is alive
- Cleanup dagger modules, see
meta-test- Add
EngineTestModuleas helper that includes all required engine modules to run server - Cleanup dagger modules, see
platform-archetypefor refrence Fixture- Add
MetaTypefixtures, eg.TEST_META_TYPE. These can be used viaMetaServiceTestFixtureModule
- Add
UserServiceTest- Remove
getTestUser. Test users, eg.UserServicetest.USER, are nowMetaUser
- Remove
- Add
- Util
util-coreFiles- Rename
resolveIdentifierAbsolutePathtofindIdentifierAbsolutePath
- Rename
util-webui- Add theme support (see
meta-adminfor examples)
- Add theme support (see
29.4
Released 2023-02-14.
Other
- Bootstrap
bootstrap-coreCddryRunnow builds the modules to catch any errors
Provision- Fix
parseSchedule
- Fix
- Util
util-webextsimpleSortnow uses_.getand supports pathssearchReply.metas.sort(ext.simpleSort.bind(undefined, ["value", "description"]))
29.3
Released 2023-02-08.
Other
- Meta
meta-clientclient- Fix
downloadnever resettingactiveDownloadProgressafter first call
- Fix
meta-engineEngineRuntimegetServiceInfonow contains more information about the system
WatchdogServiceWatchdogStatus.infonow contains all ofruntime.getServiceInfo
- Util
util-coreEnv- Rename
NO_OF_THREADStoTHREADS - Rename
SYSTEM_OStoOS
- Rename
Strings- Rename
DEFAULT_LOCALEtoLOCALE
- Rename
29.2
Released 2023-02-03.
Other
- Meta
meta-engine- Invalidate all caches (
MetaService,UserService) after backup restore ActionService- Clear up what
MetaActionschemas do- If
paramSchemais null,ExecuteRequest.paramis ignored and null is passed to action delegate - If
resultSchemais null, return the action delegate's result. IfresultSchemais not null, always validate the result
- If
- Clear up what
- Invalidate all caches (
29.1
Released 2023-01-26.
Other
- Meta
meta-engineHttpService- Remove hard coded
default-srcCSP 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 removeserverPasswordfromProvisionProviderVultrConfig)
- Add optional
WatchdogServiceReportConfigenginefield special value to report to self is nowlocalhost
Other
- Remove
TEST_prefixes from various fields in test classes and modules - Replace
ImmutableList/ImmutableMap/ImmutableSetwithList.of/Map.of/Set.of - Bootstrap
bootstrap-coreCd- Add pending update mechanism to allow running
Cdmultiple times in case of errors, without affecting already updated servers
- Add pending update mechanism to allow running
Provision- Add
ProvisionServerProviderand implement dummy provider for testability
- Add
bootstrap-commoncertbot.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-clientobjects- Now sorts objects after calls to
addObject - Remove
loadMode,orderBy,orderByOrderparameters- Pass existing
loadByIdfunction to getLOAD_MODE.EAGER
- Pass existing
- Add
sortparameter. Takes function that implementsArray.sort()to sort the objects array in placesort: ext.simpleSort.bind(undefined, "deviceName") // Can handle observable properties - Add
loadByMetaIdhelperloadById: objects.loadByMetaId.bind(undefined, client)
- Now sorts objects after calls to
viewmodel- Replace
newPlainObservableMappingcrutch withnewObjectMappingcrutch. Seemeta-admin/viewmodelfor examples
- Replace
meta-engineBackupService- New interface to break dependency on
FileService
- New interface to break dependency on
DatabaseServiceDatabaseServiceDataSourceConfigcan now be injected in addition to the ones configured withDatabaseServiceConfig
GatewayService- Add
sendEmailwithemailReplyTo,emailSenderarguments to allow different values from config
- Add
MetaService- Fix
deleteRecursive
- Fix
meta-test- Rename
MockGatewayServicetoGatewayMockService - Rename
GatewayServiceTestMockModuletoGatewayServiceMockModule. MakesgatewayConfigin component builder obsolete - Add
BackupServiceMockModule. IfFileServiceis not used in any service, include this module instead ofFileServiceModule. MakesfileConfigin component builder obsolete - Add
SyncServiceDummyModule. MakessyncConfigin component builder obsolete
- Rename
- Util
util-coreEnvNix/EnvWin- Schedule for
runTaskInternalis now converted to local date and time
- Schedule for
util-webrequire-config.js/web-build.json- Instead of including
web-build.jsonfrom other modules, directly reference the dependency from the moduleslibdirectorybootstrap: "../lib/util-web/lib/bootstrap.bundle.min" - Same for other dependencies like
alamedaorqunitinindex.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.xmlassembly and JAR files for web modules - Replace
lodashwithunderscoreget,hasnow 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
chunkIterationtochunkAsync- Remove
indexparameter funcnow getsvalueandindex
- Remove
- Add
mergebased on mergiciansimpleSort
- Remove
i18nextinitnow takes optionaloptionsfor additionali18nextoptions
img- New module to break dependency on
EXIF
- New module to break dependency on
util-web-test- Add
WebDriverTestITas 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-commoncertbot.json- Remove directory hooks and configure hooks directly with
certonlyparameters
- Remove directory hooks and configure hooks directly with
- Meta
meta-engineEngineUpdater- Backup all services before running any tasks
- Util
meta-coreWgetnewHttpClientnow defaults to aQueuedThreadPool- Rename
asStringtostringContent
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-coreMain- Remove
buildversionoption. Switch tojqutility and Maven build to get matching version ofbootstrap-coreJAR in Jenkins build
- Remove
bootstrap-dev-server- Add
jqutility
- Add
- Meta
meta-admin- Now uses service info to populate file component's backup options
meta-engineDatabaseService- Rename
lookupDatabasetojdbi - Add backup/restore for SQLite databases
- Rename
EngineRuntime- Add
getServiceInfothat queries all services implementingInfoProvidingService
- Add
EngineServices- Add
InfoProvidingServiceinterface
- Add
GatewayServiceWebhookRequestnow contains the fullHttpRequestto send. UsegatewayService.httpClient().newRequest(...)to create one
HttpService- Add
dispatchestoFilterConfig
- 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-coreBuild- Remove
offlineoption. Now part ofBuildConfig - New
executeWgetoption unpacks final archive prior to runningWgetExecutorto correctly resolve all definitions
- Remove
Cd- Provides continuous delivery functionality using
BuildandProvision. SeeJenkinsfile-myapp-cdinplatform-archetype-bootstrap
- Provides continuous delivery functionality using
bootstrap-common- Move firewall rules in various definitions before service startup
- Remove
userProfileproperty 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-clientRestClient- Rename
executeRequesttosend - Rename
executeFileRequesttodownloadFile - Rename
executeRequestAsynctosendAsync
- Rename
meta-engineEngineRuntine- Scheduled methods now use
Duration
- Scheduled methods now use
WatchdogService- Now invokes
Protocol.WATCHDOG_UPDATE_RESOURCEwebhook whenprocessUpdatefails preparing an update
- Now invokes
- Util
util-coreWget- Add
sendAsynchelper
- Add
26.3
Released 2022-07-28.
Config
ExecuteConfig- Remove
owner
- Remove
Other
- Util
util-web-testAbstractWebDriver- Make
runUiTestwindow size optional - If
abstractwebdriver_headlessenv 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-engineFileService- Fix duplicate check for pending uploads
- Util
util-webextloadConfignow passes all additional arguments to config function
26.1
Released 2022-06-24.
Model
MetaUserWebAuthnCredential- Fix field ordering
Protocol
ClientNotification- Add optional
contextobject, eg. forsyncedflag set bySyncService
- Add optional
UserWriteRequest- Fix field ordering
Other
- Meta
meta-engineSyncService- Fix unnecessary
ClientNotificationprocessing when running withNoEtcdDelegate - Use new
contextobject for marking syncedClientNotificationevents
- Fix unnecessary
26.0
Released 2022-06-23.
Protocol
LoggingEntry- Fields are now in ASCII order
Other
- Remove obsolete
@JsonCreatorconstructors in Java records - Bootstrap
bootstrap-common- Remove
engine-clone.json. Useengine-main.jsondirectly, seeengine-server-update.json engine-server-update.json- Remove
skipClone - Add
engineUpdateflag that runs update tasks specified inupdateTasksproperty"flags": ["engineUpdate"], "properties": {"updateTasks": "clone"}
- Remove
- Remove
- Meta
meta-coremodel,protocol- Remove
factoryobjects
- Remove
meta-clientobjects- Support observable
typeId - Add
onAddObjectandonRemoveObject
- Support observable
meta-engineEngineUpdater- Rename
FileServiceTasktoFileServiceStorageTaskwith task IDfilestorage
- Rename
FileService- Handle duplicate files for pending uploads
- Util
util-coreFiles- Rename
cleanUptocleanup
- Rename
SevenZipextractwithdirectorynow creates missing parent directories before move to target directory
StaticCurlyBracesResolver- Rename
putAllResolvedtoputAllAndResolveAll. Now resolves all known variables after adding new ones
- Rename
util-webdevice- Remove
factoryobject
- Remove
util-web-testAbstractWebDriver- Remove
navigateAndScreenshotComponent - Rename
runJavaScripttoexecuteScript - Add
executeScriptAsync,navigateToComponent,setScriptTimeout
- Remove
25.0
Released 2022-05-18.
Model
MetaUserMetaUserWebAuthnCredential- Add
displayName
- Add
Protocol
UserWriteRequest- Renamed
webAuthnCreatetowebAuthnRequestand is now object withdisplayName - Renamed
webAuthnCreateReplytowebAuthnReply
- Renamed
UserWriteReply- Renamed
webAuthnCreateRequesttowebAuthnRequest
- Renamed
SyncReplicateRequest/SyncStatusRequest- Replace
keywithdelegateId
- Replace
Other
- Update to latest Java 17 version
- Meta
meta-clientcomponent/login- Support multiple WebAuthn credentials
meta-engine- General fixes and improvements for clustered runtimes
- Remove
checkRunningfrom abstract service classes FileService- Remove
Set<FileInfo>fixtures. Fixtures were not properly implemented and could only be used for testing. UseFileService.importFileInfoswithFileServiceTest.newFileFixtureSupplierfor 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
generateUserTokennow rejects users with OTP/WebAuthn, since authentication is only based on password
- Util
util-web- Update to latest Bootstrap beta version
deviceAddcamerapermission check ingetCamerasext- Fix
fileEndings/fileFormatschecks inloadFileContent - Add
setZoneUtc
- Fix
24.1
Released 2022-04-19.
- Meta
meta-engine- Fix
getConfigClassinAbstractActionExecuteDelegate
- Fix
24.0
Released 2022-04-16.
- Bootstrap
bootstrap-common- Remove
engine-server-copy.jsondefinition. Obsolete, now thatlucene-backward-codecis included inmeta-engine - Add
engine-main.jsondefinition
- Remove
bootstrap-dev-vm- Fix cert validation problem with fossil on Windows
- Meta
meta-engine- Fix issues with config watcher mechanism
- Include
lucene-backward-codecdependency MetaService- Rename
deleteSearchResultsRecursivetodeleteRecursive - Add
searchRecursivehelper function
- Rename
23.1
Released 2022-04-11.
Model
Model.TYPE_SCHEMA_DEFINITIONSnow references$defsfield instead of obsoletedefinitions
Other
- Bootstrap
bootstrap-commonengine-import.json- Add property
importFixturefor fixture file
- Add property
- Meta
meta-engineGatewayServiceDeliveryReplynow contains the request
23.0
Released 2022-03-30.
Config
ExecuteConfig- Add
tmpDir
- Add
Other
- Bootstrap
bootstrap-coreBuild- In execute script, set
java.io.tmpdirto module directory
- In execute script, set
bootstrap-common- Set
java.io.tmpdirto{tmpDir}/{tmpDirWin}in all definitions that calljava certbot.json- Call
pl-deploy.ps1after initial certbot run on Windows
- Call
- Set
- Util
util-core- Switch from
jackson-module-afterburnertojackson-module-blackbird Env- Revert
runTaskschedule 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-coreCmdExecutor- Fix exception handling and reduce
DEFAULT_TIMEOUTto 5 minutes
- Fix exception handling and reduce
bootstrap-commoncertbot.json- Fix
certbot.execall on Windows
- Fix
- Meta
meta-engineMetaService- Catch
JsonSchemaExceptionduring 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-coreEnvrunTasknow returnsEnvExecuteResult- Fix
runTaskschedule date format on Windows
SevenZip- Parameters are now in ASCII order
util-webweb-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-coreBuild- Change run arguments
- Remove
mvnsettingsoption. Now always usesPLATFORM_DATA_DIR/settings.xml - Rename
mvnrepodirtomvnrepo - Add
mergeoption. If provided, merges the given JSON file withbootstrapConfigfromBuildConfig. Merge operation must result in a validExecuteConfig
- Remove
- Change run arguments
- Meta
meta-engineGatewayService- Fix SMS message encoding error
- Util
util-webi18next- Handle
keyvalerrors to make sure module works, even ifkeyvalis not available
- Handle
20.0
Released 2022-03-06.
Config
HttpServiceHeaderConfig- Remove
xframeoption. Use CSP frame-ancestors if needed. Defaults to:frame-ancestors 'none' - Add
patterns, list ofHttpServiceHeaderPatternConfigfor adding custom headers
- Remove
Other
- Util
util-coreExtnewFixedThreadPoolnow takesminThreadsinstead ofthreadsFactor
Wget- Add
stopHttpClienthelper method. Tries to stop/destroy client and its executor
- Add
util-web-test- Renew
localhost.platform.rswk.chcertificate
- Renew
- Bootstrap
bootstrap-coreBuild- Remove
deployoption. Now only depends ondeployinBuildConfig
- Remove
19.1
Released 2022-02-27.
Model
MetaUser- Fields are now really in ASCII order
Config
HttpServiceSslConfigcipherSuites,protocolsare now optional and use defaults fromHttpService
Other
- Util
util-web- Update Node.js to
17.5.0for native fetch and adapt web build script - Remove
copyoption fromweb-build.json web-dist.jsis now expected to be calledweb-dist.json
- Update Node.js to
- Meta
meta-clientcomponent/login- Adapt to new OTP changes in
UserService
- Adapt to new OTP changes in
meta-engineEngineUpdater- 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
UserServiceprocessUserFixtures- Now uses
hashedtrue. This makes TOTP work for test fixtures, but also requires passwords to be hashed (usegenerateScryptHash)
- Now uses
getCachedUser/getCachedGroup/getCachedConfig- Now return
Optionalvalues, 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-commondev.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_DOWNLOADpermission on uploaded bootstrap archives. This makes it possible to have watchdog reporting users with limited permissions
- Add optional
Other
- Meta
meta-coreModel- Add
MAX_CLAUSE_COUNT - Add
newMultiValueQuery(was previously inMetaLucene)
- Add
meta-clientcomponent/login- Replace
enableForgotUserwithenableForgotUserEmail,enableForgotUserPhone
- Replace
meta-engineEngineRuntime- Add
schedulerthat can be used for caches that rely on expiration. UsesScheduler.systemScheduler()internally for nowCaffeine.newBuilder().scheduler(runtime.scheduler()).expireAfterAccess(Duration.ofMinutes(5)).build(); - Add
schedulemethod withCallable
- Add
UserServiceforgotUsernow sends the names of all existing users and not just the first one it finds
- Bootstrap
bootstrap-commoncertbot.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-commondev.json- Fix
cacert.pemstep - Add include for
syncthing.json
- Fix
engine-server-update.json- Add
skipCloneflag
- Add
bootstrap-dev-vm- Update to Maven 3.8.4
- Add
ideauflag 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
queryis now optional
LoggingMetricSearchReply- Fields are now in ASCII order
LoginRequest- Add optional
tokenfor token based login
- Add optional
LoginReply- Add
client,user,versionfields that contain sanitized values from request
- Add
Config
UserServiceConfig- Remove
keySizefromUserServiceTokenConfig - Add
forgotContact
- Remove
Other
- Util
util-coreStrings- Add
redactEmail,redactPhone
- Add
util-webext- Add
redactEmail,redactPhone
- Add
- Meta
meta-client- Add
forgotUser client- Remove
engineobservable - Check for correct request type in all request/reply methods
- Remove
component/login- Remove
enableSaveLoginoption and UI elements - Add
enableForgotUser,enableResetPasswordoptions - 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-engineUserServicerecordFailedAttempt- Remove
cause - Add
type. Must be one ofAttemptType
- Remove
- Rename
VerifyTokenResponsetoVerifyTokenReply - Index OTP email, phone, webhook in
MetaUserLucene document - Index top level textual fields in
MetaUserConfigLucene document - Add
authToken. Generate auth token that is valid for a specific IP and expires in 12 hours. Can be used inLoginRequestto 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_SIZEconstant
Other
- Meta
- Fix problems with binary WebSocket messages due to buffer/max message sizes
meta-coreAbstractWebSocketListenersendBytesnow takes aByteBufferpayload so we dont have to wrap/unwrap byte arrays
meta-clientlogging- 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-engineUserService- Rename
hasUserPermissionToAnyOfKeystohasUserPermissionand revert to using cached groups again for performance reasons
- Rename
15.0
Released 2022-01-21.
Config
UserServiceConfig- Add
authContact,resetContact,writeContactin the form of the newUserServiceContactConfig. These templates are used for the different OTP challenge types and replaceotpEmailContent,otpEmailSubject,otpSmsMessage
- Add
Other
- Util
util-coreSevenZipextractnow movesdirectoryinstead 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
MetaServicedeleteSearchResultsRecursivenow takes optionalchannel
UserService- Switch to
AsyncLoadingCache.getCachedXmethods,hasUserPermissionToAnyOfKeys,isMember,generateUserTokennow 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
userWriteaddipAddressin addition to existingclientIdfor OTP verification
- Switch to
14.0
Released 2021-01-19.
- Util
util-coreSevenZip- Add
-aoaoption to extract to always overwrite existing files
- Add
- Meta
meta-engineFileServicelocalDownloadandlocalUploadnow take parameter object for easier use throughbatchRequestsRecursive
MetaSchemaFieldGenerator- Rename
isSortabletosortable - Add
metaIdparameter to improve tracing/log messages
- Rename
MetaValidator- Add
metaIdparameter tovalidateSchemato improve tracing/log messages
- Add
- Bootstrap
bootstrap-common- Update to latest 7z version
- Add
javaArgsvariable toengine-server.shso 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-engineActionExecuteResource- Fix timeout parameter handling
FileDownloadResource- Fix timeout parameter handling
FileUploadResource- Add REST-like API for uploading files
SyncServicecontextparameter inAbstractSyncDelegatemethods is now aJsonNode
13.2
Released 2022-01-12.
Model
MetaUserConfig- Add
getConfighelper method
- Add
Other
- Meta
meta-engineMetaSchema- Add support for
oneOf/anyOfingetFieldTypeRecursive
- Add support for
UserServiceuserWrite- Replace
verifyOtpwith 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-webi18next- Check if final locale is actually supported by the resources, otherwise use fallback
- Update to latest Bootstrap Icons 1.7.2
- Meta
meta-engineFileDownloadResource- Fix problems with handling output buffer ready state
- All methods take optional
timeoutquery parameter in minutes. Defaults to 5 minutes, was 30
MetaSchema- Add argument sanity checks to field generators
- Bootstrap
bootstrap-common- Remove
java8definition - Try to improve
fossilcertificate situation on windows by usingcacert.pemfile
- 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-engineActionExecuteResourceexecutenot takes optionaltimeoutquery parameter in minutes. Defaults to 1 minute, was 10
EngineResources- Rename
handleErrorReplyExceptiontonewErrorResponseand fix handlingErrorReply verifyTokennow returnsVerifyTokenResultthat includes theVerifyTokenResponsefromUserService. IferrorReplyis present, treat verification as failed
- Rename
EngineServices- Add
batchRequestsRecursiveto break up large number of requests into batches
- Add
UserService- Rename
VerifyTokenResulttoVerifyTokenResponse
- Rename
12.0
Released 2021-12-28.
Model
Metaidis now a regular UUID with dashes
MetaUser/MetaUserGroup- Names can now contain all non whitespace characters
modelnewTypeSchematakes a parameter object
Protocol
TokenRequest/TokenReply- Removed
- Tokens are now only available through the
/rs/tokenendpoint
Config
FileServiceConfig- Replace
lucenewithluceneIndexDir
- Replace
HttpServiceConfig- Rename
resourceBasetoresources. Is now a set of directories that are served by the default servlet
- Rename
LoggingServiceConfig- Replace
lucenewithluceneIndexDir LoggingServiceRetentionPathConfig- Rename
filePatterntopattern
- Rename
- Replace
MetaServiceConfig- Replace
lucenewithluceneIndexDir
- Replace
UserServiceConfig- Replace
lucenewithluceneIndexDir
- Replace
Other
- Util
util-web- Remove
configloadermodule. Useext.loadConfig(...)instead crypto- Refactor with parameter objects
- Rename
randomValuestogetRandomValues
nav- Remove
setPersistState. Usenav.init({persistState: true})instead initandregisternow take parameter object
- Remove
- Remove
util-web-testAbstractWebDriver- Rename
closeVisibleModaltoclickVisibleCloseButtons
- Rename
- Meta
meta-clientclient- Fix error with buffer size used for uploads that terminated the WebSocket
RestClient- Add
resetToken
- Add
meta-engineEngineRuntime- 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
KeywordAnalyzerfor all Lucene document fields
- Use
LoggingService- Use
PerFieldAnalyzerWrapperwithKeywordAnalyzeras default andStandardAnalyzerforLOGGING_FIELD_MESSAGELucene document fields
- Use
LuceneServiceLuceneServiceConfig- Add
analyzerSupplier. Services that use aLuceneServicenow have to pass in the used analyzers
- Add
- Add
reopenIndex. Must be called in case the used analyzers are dynamic and have changed
MetaSchemaFieldGenerator- Add
putAnalyzersto set custom Lucene analyzers per field
- Add
MetaService- Use
PerFieldAnalyzerWrapperwithStandardAnalyzeras default,KeywordAnalyzerfor all meta ID Lucene document fields and use additional analyzers from indexing types inMetaSchema deleteSearchResultsRecursivenow has optional parametercounter
- Use
UserService- Use
KeywordAnalyzerfor all Lucene document fields - Rename
tokentogenerateUserTokenwithUserTokenRequest - Rename
GenerateTokenRequesttoTokenRequest- Rename
validSecondstoexpirationSecondsand make it optional. UsesUserServiceTokenConfig.expirationwhen 0
- Rename
- Remove
getClientEntry. UsegetClientListwith new helpers onClientListReply
- Use
- Bootstrap
bootstrap-coreProvision- Use
awaitWatchdogUpdateStatusinstead ofawaitInstanceRunningwhen waiting for new server
- Use
bootstrap-testAbstractBootstrapTestprepareEngineConfignow 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,groupslike we have inLoginReply. If user requires auth, configs and groups are now sent inAuthReplyinstead ofLoginReply
- Add
ClientListEntry- Fields are now in ASCII order
- Rename
clientNametoclient - Rename
clientVersiontoversion - Add
ipAddress
ClientNotification- Remove
clientName,clientVersion. These were only used byUserServiceto 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
clientNametoclient - Rename
clientVersiontoversion - Add optional
localeto 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 fori18nduring 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
UserServiceConfigotpEmailContent,otpEmailSubjectandotpSmsMessagenow supporti18n.otpEmailContentandotpSmsMessageare 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-coreFiles- Add
getHashAndSizethat returns SHA-256 hash of file and its size
- Add
StringsresolveI18Templatesnow checks for the presence of an entry forDEFAULT_LOCALE- Add
getI18nStringto get value from template map that falls back toDEFAULT_LOCALE
- Meta
meta-admin- Remove export/import on user component
meta-clientpostClientNotificationdoes not set timestamp of passed client notification anymore
meta-engineAbstractEngineWorkQueueService- Rename
tryAddWorkUnittoprocessWorkUnit - Add
offerWorkUnit. This variation does not return the processing future - Rename
onBeforeUnit/onAfterUnittobeforeProcess/afterProcessand add unit parameter - Add
ShutdownTypeoption
- Rename
EngineRuntime- Remove
PreparedShutdownService
- Remove
UserServiceotpEmailContentandotpSmsMessageformats only get one variable containing the OTP- Remove posting of client notifications on auth errors
- Bootstrap
bootstrap-core- Fix errors in
certbotdefinition 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
otpEmailMessageFormattootpEmailContent. Can now contain a file URI that is resolved viaStrings.resolveTemplate - Rename
otpSmsMessageFormattootpSmsMessage
- Remove
Other
- Meta
meta-engineAbstractEngineExecutionThreadService/AbstractEngineIdleService- Now implement new interface
ConfigurableService - Add
startUpandshutDownimplementations 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
AbstractConfigWatcherand implement check for config changes (was previously part ofNotificationService)
- Switch from Guava's EventBus
to a custom RxJava based bus in
EngineEventBus
EngineServices- Add
ConfigurableServiceinterface - Add
ConfigWatcherNotificationConsumer
- Add
NotificationService- Removed. With the removal of notification cache and moving of event bus/config watcher to runtime, this service is obsolete
UserServiceverifyTotp- Replace
validPeriodswithacceptedCodes
- Replace
- Support HTML content for OTP emails
- Delete configs of deleted users and groups
meta-test- Add
ClientNotificationTestSubscriptionandMetaNotificationTestSubscription
- Add
9.0
Released 2021-11-24.
Config
FileServiceConfig- Add
expirationin seconds for expiration check schedule
- Add
Other
- Util
util-webext- Refactor
displayNotification,insertDateTimes,loadFileContent,requestPermission,shrinkImageto take parameter objects - Add
retainAtoZAndDigits
- Refactor
- Meta
meta-coreModel- Add
DATE_NUMBER_MAX,DATETIME_NUMBER_MAXconstants for range queries
- Add
meta-engineEngineRuntime- Rename
shutDownHandletocancelFuture. Is now static and takes any type ofFuture
- Rename
EngineUpdaterJsonExportTaskConfig/JsonExportTaskResult/EngineImportTaskConfig- Fields are now in ASCII order
JsonImportTaskConfig- Rename various fields
- Add
userUpdate
FileService- Properly implement expiration mechanism
- Index expiration timestamp
- Post
FileExpirationNotificationwhen a file has expired and was deleted
- Properly implement expiration mechanism
MetaLucene- Add
otpTypefield to user document
- Add
UserService- Fix problem when writing users with existing TOTP keys when
hashedis false, eg. inCloneTask - Add
getClientEntry
- Fix problem when writing users with existing TOTP keys when
8.0
Released 2021-11-17.
Protocol
PasswordResetReply- Add
successin case password was reset
- Add
Other
- Java
- Remove
finalfrominstanceofpattern matching variables
- Remove
- Util
util-coreExt- Add
newPoolThreadFactory,newFixedThreadPool,newScheduledThreadPool
- Add
Wget- Remove static
HTTP_CLIENTinstance that was used fortoFile,asString,invokeWebhook. These methods once again start and stop a client for each invocation - Remove
unsafeoption. PassnewUnsafeHttpClientTransporttonewHttpClient newHttpClientnow sets a default executor
- Remove static
- Meta
meta-clientcomponent/login- Add
enableWebAuthnoption - 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
verifyOtpto signal that OTP changes need verification
- Add
UserWriteRequest- Add
otpwhen verifying OTP changes
- Add
Other
- Merge Nexus repositories
bootstrap-snapshotsandbootstrap-releases(again) back into a singlebootstraprepo, or it gets annoying when switching bootstrap modules between release and snapshot versions - Util
util-coreWget- 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-clientcomponent/login- Support new
userWriteOTP verification flow. Make sure to include newcomponent/verifycomponent inui.bindandweb-dist.jsconfigs - Remove auto login after reconnect behaviour
- Remove
onTotpReplyparameter
- Support new
component/verify- Reusable verification modal
meta-engineUserServiceuserWritehas a new parameterverifyOtp. If true, changes to OTP settings requires a second request with a valid OTP/TOTP for verification
meta-testWebDriverTest- Add
onLoginEmailAuthandonLoginTotpAuthhelper methods that can be used together with existingloginhelper
- Add
- Bootstrap
bootstrap-coreWgetExecutor- Remove
timeout,unsafeoptions
- Remove
6.0
Released 2021-11-05.
Model
MetaGrantKeys- Rename
POST_CLIENT_NOTIFICATIONStoPOST_CLIENT_NOTIFICATION - In Java enum,
valueis 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
ResetPasswordRequestusernot nullable
SubscriptionRequest- Fields are now in ASCII order
channelsnot nullable
UploadRequest- Fields are now in ASCII order
- Add optional
expiration
Config
FileServiceConfig- Replace
syncthingApi/syncthingApiKeywithsyncthingConfig.FileServicenow 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-clientClient/client- Remove
reconnectIntervaloption and always try to reconnect the WebSocket (except when the client gets kicked due to policy violations) - Add
pingmechanism, so we have server and client side pings for better detection of lost connections
- Remove
Clientdisconnectnow returns a future to make it behave like the JavaScript client
clientworkerPathnow defaults tolib/meta-client/js/, so most apps don't need to provide it anymore
RestClientexecuteFileRequest- Remove timeout parameters, since they were only applied to receiving header information in the first place
meta-engineEngineUpdaterJsonImportTaskConfig- Add
usersHashedto be able to import users with hashed passwords
- Add
UserServicerecordFailedAttempt- Add
cause
- Add
userWrite- When deleting a user, remove it from all groups
- Add
enforceparameter. If set to false, anyUserServiceEnforceConfigis 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-coreDates- Remove
toZonedDateTime, useZonedDateTime.now()/atZoneSameInstant
- Remove
Files- Method parameters are now in ASCII order
copyDirnow takes a optionalVariableResolver. If provided, all files are copied usingcopyTextFileFilteredwith the given resolver
util-web- Change naming convention for
require-init.jsscript toindex-init.js configloader- No longer a
requirejsplugin - Client configs should now be based on a
config.jsonfile that is fetched inconfig.jsmodule. 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
versionandscope. Theworker-init.jsscript is now expected to be in the root directory, so the default scope is sufficient
- Remove
- Add
i18n- Remove
newExtendedI18n. Use_.defaultsDeepto merge multiple i18n resources before passing them toinit
- Remove
ui- Rename
inittobind. Now takes an parameter object - Add
modalOptions,offcanvasOptions,tooltipOptionsto corresponding KO bindings instead of exposing a couple of specific options - Add
progressKO binding
- Rename
- Change naming convention for
- Bootstrap
bootstrap-commonsyncthing.json/syncthing-server.json- Add required actions to install and configure Syncthing
bootstrap-coreCopyExecutorfilteroption now works for directories and applies to all contained files
bootstrap-test- Finish
clustertest 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_EXECUTEtoEXECUTEand valueactoex - Change
POST_CLIENT_NOTIFICATIONSvalueclntocn - Add
SYNCgrant forSyncServicebased 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
otpto own fieldwebAuthn - Rename
MetaUserWebAuth/MetaUserWebAuthCredentialtoMetaUserWebAuthn/MetaUserWebAuthnCredential
MetaUserConfig- Fields are now in ASCII order
- Remove
idand use computed identifier, seeModel.forgeConfigId
MetaUserGroup- Fields are now in ASCII order
Protocol
AuthRequest- Rename
AuthRequestWebAuthAssertionReplytoAuthRequestWebAuthnAssertionReply
- Rename
ExecuteRequest/ExecuteReply- Renamed from
ActionRequest/ActionReply
- Renamed from
FileSearchRequest/FileSearchReply- Rename
after/lasttocursor
- Rename
LoggingEntrySearchRequest/LoggingEntrySearchReply- Rename
after/lasttocursor
- Rename
LoggingMetricSearchRequest/LoggingMetricSearchReply- Rename
after/lasttocursor
- 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 toauthwith the OTP/2FA is necessary - Rename
LoginReplyWebAuthAssertionRequesttoLoginReplyWebAuthnAssertionRequest
- Remove
LogMessage- Remove
timer/timerRef. Use newLoggingMetricTimeRequest
- Remove
PasswordResetRequest/PasswordResetReply- Support automatic password reset via verification of user OTP
SearchRequest/SearchReply- Rename
after/lasttocursor
- Rename
UploadReply- Add
duplicateflag 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
UserWriteReplyWebAuthCreateRequesttoUserWriteReplyWebAuthnCreateRequest
- Rename
UserWriteRequest- Add
webAuthnCreateflag to start registration of new WebAuthn credentials - Rename
UserWriteRequestWebAuthCreateReplytoUserWriteRequestWebAuthnCreateReply
- 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_UPDATEoption
- New method for partial update of
WRITE_ACTION- Remove
PARTIAL_UPDATE - See new methods on
MetaServiceandUserService
- Remove
- Add
ResetPasswordRequest/ResetPasswordReply
Config
BuildValidateConfig- Add
validatorClassthat can be used for custom validation logic of the bootstrap module before build starts. Validator must extendAbstractBuildValidator
- Add
FileServiceConfig- Add
syncthingApi/syncthingApiKeyfor clustered file synchronisation using Syncthing
- Add
LuceneServiceConfig- Fields are now in ASCII order
HttpServiceConfig- Fields are now in ASCII order
- Add
forceHttpsoption to be able to forcehttpson certain paths - Add
redirectoption to add RedirectRegexRule HttpServiceHeaderConfig- Add
xframeoption to use differentX-Frame-Optionsheader. Default is stillDENY
- Add
UserServiceConfig- Fields are now in ASCII order
- Add
enforceto set password and OTP rules - Add
ipAddressAttemptsto enable blocking of failed attempts based on IP - Add
otpEmailMessageFormat,otpSmsMessageFormat - Rename
webAuthtowebAuthn
WatchdogServiceCheckConfig/WatchdogServiceReportConfig- Remove
schedule,unsafeoptions
- 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-iderepository
- 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
specparameter object, use object destructuring assignmentfunction ({ param1 = 123, param2 }) { ... };factory.myObject = function ({prop1, prop2}) { return Object.freeze( {prop1, prop2} ); };
- Instead of using
- Util
util-coreDates- Add
todayreturning the currentLocalDate
- Add
Ext- Remove
getSha256Hash, useHashingdirectlyHashing.sha256().hashBytes(...);
- Remove
Json- Add
toJsonwithLocalDate
- Add
SevenZip- Renamed from
P7zip - Include
7zexecutable for Linux - Due to
7znot preserving file permissions, runchmod +xfor all extracted executables when extracting from atararchive
- Renamed from
util-web- Build
- Rework
web-build.jsto 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.jsthat 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
i18nextinitnow takes aspecobjecti18next.init({debug: config.debug, resources: i18n})
nav- State is now also considered if a registered update delegate should be invoked
ui
- Build
util-web-testAbstractWebDrivernow uses@ValueSourcefor 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/searcherin files and users and implement cursor/limit support
meta-client- Add
resetPassword client- Add
navigatoronline status to connection status check
- Add
objectscache- Does not inherit from
objectsanymore. Pass theobjectsinstance 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
customClassesoption - Add
passwordRegex,requireOtpoptions 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-engineAbstractEngineLauncher- Add
newUpdaterServices, so applications can constructUpdaterServicesinstance with specific modules
- Add
ActionService- Result of execution is not validated against result schema anymore
- Add
ipAddressto delegate arguments
ActionExecuteResource- Add REST-like API for executing actions
DatabaseService- Remove
getDefaultDatabasemethod - Add
checkTableExistshelper 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
smsRemaininggauge, hardcoded to 100
- Add alert for
LogginService- Add
loggingMetricTimemethod
- Add
MetaLucene- Grants on users and groups are now indexed
- Add
usersfield to groups with number of users
MetaService- Add
writeObjectUpdateas replacement for previousWriteAction.PARTIAL_UPDATE
- Add
UserService- Attempts are now recorded and blocked for
clientId,userandipAddress - Rename
verifyUserOtptoverifyOtp- Only verifies the OTP and does not generate a token anymore.
Use the now public
generateTokenmethod
- 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
groupWritePartialanduserWritePartial - 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 installforp7zip-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
overwriteoption
- Add
- Shaded JAR is now a seperate artifact with classifier
bootstrap-commoncertbot.json- Switch to beta version of EFF certbot for Windows
dev.json- Switch to NodeSource repository on Linux for
nodejspackage - Fix problems with Linux installation
- Switch to NodeSource repository on Linux for
- Add new definitions
etcd-server.jsonopenssl.jsonsqlite.jsonsyncthing.jsonsyncthing-server.json
4.0
Released 2021-04-08.
Config
- Meta
SyncServiceConfigpeersis now a list ofSyncServicePeerConfig
SyncServicePeerConfig- Add
idfor the engine ID
- Add
SyncServiceEtcdConfig- Remove authorization and TLS options
- Bootstrap
- Try to reduce duplication in build and provision configs
BuildConfig- Add
propertiesPathoption to reference JSON file with common properties share by multiple build configs
- Add
ProvisionConfig- Move
idformProvisionWatchdogConfigtoProvisionConfigasserverId
- Move
ExecuteConfig- Make
dataDir,logDirandtoolDiroptional. They default to theplatformdefault directories
- Make
Other
- Fix problems with Java 16 update
- Update to
2021-06Eclipse builds - Update to
Hirsute HippoUbuntu builds
- Update to
- Start preparing for Java modules
- Remove split packages
- Start switching to
@Nullablefrom Checker Framework - Util
util-coreDates- Remove
fromSqlTimestamp
- Remove
P7zip- Add support for
tar.gzon Windows. Now uses same command for Linux and Windows
- Add support for
util-core-test- Move all test classes to
testpackage
- Move all test classes to
util-webnavhas new option to persist state. Usenav.setPersistState(true)before callinginit
- Meta
meta-client- Rename
TokenHelper/tokenhelpertoRestClient/restclient
- Rename
- Bootstrap
- Fix errors where
moduleDirWinwas not used for Windows specific commands bootstrap-coreBuild- Remove
debugoption
- 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
WatchdogStatusalertsis a list ofWatchdogStatusAlertinstead of aMap<String, String>. Using a map caused problems with partial updates of the status objects
Config
EngineWebSocketControllerConfig- Rename
allowUnauthorizedLogtologAllowUnauthorized - Add
uploadGrantFull. If true, grantsFILE_FULLon 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.
AlertRegistryAlerttoAlert
- Eg.
- Util
util-coreEnv- Remove
newPrefixedThreadFactoryandshutDownExecutor. UseThreadFactoryBuilderandMoreExecutors.shutdownAndAwaitTerminationdirectly
- Remove
util-web- Replace
requestmodule used inweb-build.jsscript withnode-fetch - Switch to Bootstrap Icons
- Add
web.cssresource- 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/libinstead of${project.build.directory}. Now all web resources are available forr.jsand we can use shared resources from other modules ext- Remove
dbproperty. Usekeyvalmodule directly
- Remove
ui- In
modalKO binding, removeconfirmCloseand add newmodalStaticoption. 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_PROPERTYspelling toCONNECTED_PROPERTY
- Fix
meta-engineEngineRuntime- Rename
shutDownExecutortoshutdownAndAwaitTermination
- Rename
EngineResourcesclass added for common functions used in resource classesverifyTokennow returns unauthorized (401) or forbidden (403) responses, soTokenHelperdoes not get stuck in a loop of unauthorized requests
meta-test- Remove service name prefix from all
public static finaltest variables
- Remove service name prefix from all
- Bootstrap
bootstrap-core- Add
moduleDirWinvariable for execution and make suremoduleDiris always a Linux style path
- Add
2.0
Released 2021-03-12.
Config
ProvisionServerConfig- Add
deleteExisting,rebootoptions ProvisionProviderVultrConfig- Add
blockStorageIdoption
- Add
- Add
Other
- Remove
package.jsonfrom JSDoc build - Rename
meta-engine-testmodule tometa-test, since it contains test cases for core, client and engine - Moved
ideto its ownplatform-iderepository- Run
mvn -DunpackIdeto build and unpack the latest IDE bootstrap-dev-envnow 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
otpobject with aMetaUserOtpTypemarking the active option
- OTP/2FA options are not in
MetaUserConfig- Has a
idfield, instead of using a computed key fromuserandgroup
- Has a
WatchdogStatus- Does no longer have
checksandmetrics. Instead usealertsto 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
MetaTypeJSON schema are indexed in Lucene 2019-09JSON 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
entrytolog
- Rename
ActionRequest- Rename
paramstoparam
- Rename
WriteAction- New
PARTIAL_UPDATEvalue that replaces the boolean flag on write requests
- New
WatchdogUpdateRequest/WatchdogUpdateReply- Removed. Local updates now use the normal report mechanism with a special
enginevalueself"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
egnas 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-coreis nowutil-webweb-core-testis nowutil-web-test
- Merged into
- Util
util-coreJsoncontains everything JSON
util-web- Update to Bootstrap 5
- Use constraint API for form validation
- Remove jQuery as a dependency
- Replace Moment.js with Luxon
extcontains parsing/formatting functions
- Add JSDoc integration
device- With the removal of Android wrapper, refactored to a static collection of browser functions
ui- Add
toastKO binding - Add
validityKO binding
- Add
- Update to Bootstrap 5
- Meta
meta-coreCst/cstmodules were removed and their contents distributed to other modules
meta-clientviewmodel- New helper module for viewmodel related functions that were previously
in
meta-core/modeor 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-admincurrently 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-engineActionService- 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
searchmethod with native Lucene query and sort to allow for more complex search operations from other services - Partial
MetaObjectupdates usingbuildObjectUpdatenow work recursive on any depth
- Add
WatchdogService- Uses normal report mechanism for local updates, see protocol changes
- Remove
EngineUploadResource
meta-engine-test- Use
Builderinterfaces in Dagger components to set service configurations - Default user
USER_SERVICE_TEST_USERis nowplatwith passwordplat Importeris nowFixtureImporter- See
WebDriverTestinmeta-admin-testfor references on how to setup runtime, import test data and run UI tests
- Use
- Bootstrap
- Rename
framework/bootstrap/bootstrap-testtobootstrap-core-testto 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 inExecuteconfiguration file. Thebootstrap.jsonfile 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
Buildconfiguration- This can be used to checkout the correct repository revision in automated
build jobs with the new
-buildversionargument
- 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.
copyaction now can filter a file and replace any variables in it with"filter": true - Rename
binDir,customerDir,moduleDirused inBuildconfigurations (outside ofbootstrap.properties) tobuildBinDir,buildCustomizeDir,buildModuleDir
- JSON format changed
bootstrap-commonengine-*.jsondefinitions now use different directories- Engine
{toolDir}/{serviceName}/engine - Web
{toolDir}/{serviceName}/web
- Engine
- Rename
dev-core.jsondefinition toutils.json - New
engine-server.jsondefinition
- 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
trunkfossil merge trunk - Update
src/site/markdown/release.md - Update
src/doc/doc.md - 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
stablefossil 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
