Reason codes
Every answer of the REST API that is not a plain success carries a stable, machine readable code, so that a client never has to parse a sentence. The code travels in messageCode at the top of the response body and, for validation failures, in errors[].code next to the field it is about. Parameters a code needs (a limit, a name, a count) travel in messageParams and errors[].params. The texts in the body are English fallbacks for humans; the consoles translate by code.
NOTE
The contract: a code never changes its meaning, and a response gains fields but never loses one. A code that is withdrawn is never used again for something else. New codes can appear in any release.
This page lists every code the current release can answer with, grouped by the first segment of the code.
Validation of configuration objects
| Code | Default text | Parameters |
|---|---|---|
model.acme.allowedDirectory.invalid | an allowed certificate authority must be an absolute https URL: {url} | url |
model.acme.directoryUrl.invalid | the directory URL must be an absolute https URL | |
model.acme.directoryUrl.notAllowed | this certificate authority is not on the list of allowed directories; a SuperAdmin can add it in Global Configuration | |
model.acme.eab.incomplete | enter both the external account key identifier and the HMAC key, or neither | |
model.acme.eab.macKeyInvalid | the external account HMAC key is not valid base64url | |
model.acme.eab.notAllowed | external account binding is only accepted for an allowed custom certificate authority | |
model.acme.email.invalid | the account email is not a valid address | |
model.acme.hostNames.invalid | not a valid host name: {name} | name |
model.acme.hostNames.ipLiteral | an IP address cannot be certified, use a DNS name: {name} | name |
model.acme.hostNames.required | no host name to certify: set one on a binding of this scope, or add an additional host name | |
model.acme.hostNames.reserved | this name is reserved for the cluster: {name} | name |
model.acme.hostNames.tooMany | at most 100 additional host names | |
model.acme.hostNames.wildcard | wildcard names are not supported: {name} | name |
model.acme.keyType.invalid | unknown key type | |
model.acme.port443NotAcknowledged | acknowledge that port 443 will be used for certificate validations to enable automatic certificates | |
model.acme.profile.invalid | the certificate profile name is not valid | |
model.acme.responder.bindIpInvalid | the responder bind address is not a valid IP address | |
model.acme.tosRequired | agree to the terms of service of the certificate authority to enable automatic certificates | |
model.authServer.delete.inUseByUsers | cannot delete server that's in use by one or more Users | serverType |
model.automationToken.allowList.invalid | The allow list contains an entry that is not an IP address or a network | |
model.automationToken.expiresAt.past | The token expiry must be after its creation | |
model.automationToken.expiresAt.required | The token must have an expiry date | |
model.automationToken.expiresAt.tooFar | The token expiry exceeds the maximum lifetime of {maxDays} days | maxDays |
model.automationToken.name.required | The token name cannot be empty | |
model.automationToken.name.tooLong | The token name cannot exceed 64 characters | |
model.automationToken.owner.required | The token must have an owner | |
model.automationToken.secret.required | The token secret hash cannot be empty | |
model.automationToken.vsite.required | Administrator tokens require a virtual site | |
model.automationTokenPolicy.lifetime.invalid | Token lifetimes must be between 1 and {maxDays} days, and the default cannot exceed the maximum | maxDays |
model.automationTokenPolicy.retention.invalid | Token retention must be between 1 and 3650 days | |
model.certificate.delete.lastNodeCertificate | at least one node certificate must exist | |
model.certificate.delete.lastVirtualSiteCertificate | at least one certificate must exist | |
model.certificate.parse.invalidTlsCertificate | could not parse the provided data as TLS certificate | |
model.csr.save.notGenerated | Certificate signing request must be generated before saving | |
model.csr.uri.invalid | invalid URI: %s | uri |
model.eventHandler.script.notFound | Script ID %s, not found in DB | scriptId |
model.eventHandler.script.required | Script is required | |
model.ldapConfig.test.noServerUrls | no LDAP server URLs configured | |
model.license.atRestEncryption.notAllowed | your license does not allow at-rest encryption | |
model.license.cloudVfs.notAllowed | your license does not allow cloud VFS backends (SFTP, S3, Azure, GCP); upgrade to Professional or above | |
model.license.concurrentConnections.limitBasic | your license only allows 100 concurrent connections | |
model.license.eventHandlers.notAllowed | your license does not allow event handlers | |
model.license.highAvailability.nodeLimitReached | your license has reached the maximum number of HA nodes allowed | |
model.license.highAvailability.notAllowed | your license does not allow high availability | |
model.license.invalid | no valid license | |
model.license.ldapGroups.notAllowed | your license does not allow LDAP groups | |
model.license.ldapUsers.notAllowed | your license does not allow LDAP users | |
model.license.oidcAdminAuth.notAllowed | your license does not allow OIDC authentication for administrators | |
model.license.oidcSso.notAllowed | your license does not allow OIDC SSO | |
model.license.reporting.notAllowed | your license does not allow reporting | |
model.license.scripting.notAllowed | your license does not allow the scripting engine | |
model.license.user.limitBasic | your license only allows 100 users | |
model.license.virtualSite.addInvalidLicense | no valid license, you cannot add a virtual site | |
model.license.virtualSite.limitBasic | your license only allow one virtual site | |
model.license.virtualSite.limitProfessional | your license only allow three virtual sites | |
model.license.webClientSharing.notAllowed | your license does not include WebClient sharing | |
model.node.privateKey.invalidPem | failed to parse PEM block containing the key | |
model.node.save.emptyId | cannot save a node with an empty ID | |
model.nodeSync.delete.self | cannot delete self node | |
model.passkey.host.notEligible | Passkeys cannot be used when this site is opened by IP address or by a short host name. Open it using its full DNS name, for example files.example.com, and try again. | |
model.password.minLength | The password minimum length must be: %v | minLength |
model.password.requireLowercase | The password must contain at least one lowercase character | |
model.password.requireNumber | The password must contain at least one number | |
model.password.requireSpecial | The password must contain at least one special character | |
model.password.requireUppercase | The password must contain at least one uppercase character | |
model.script.delete.referencedBySiteConfig | unable to delete this script, it is referenced in site configuration | |
model.script.delete.referencedByUserConfig | unable to delete this script, it is referenced in configuration for user %#v | userId |
model.secret.redactedSaveBlocked | cannot save a redacted %s | secretName |
model.srvConfig.sshHostKeys.createFailed | could not create any SSH-2 host keys | |
model.ssoProvider.delete.emptyId | cannot delete an SSO provider with an empty ID | |
model.ssoProvider.delete.inUseByAccounts | cannot delete an SSO provider that is in use by one or more %s accounts | accountType |
model.superAdmin.delete.lastSuperAdmin | at least a Super Admin musts exists | |
model.updatePolicy.grace.invalid | the Apply now grace period must be zero or more seconds | |
model.updatePolicy.window.invalid | enter both window times as HH:MM, or leave both blank | |
model.user.homeVfs.notFound | Home VFS ID %s not found in DB | vfsId |
model.user.ldapServer.notFound | LDAPServer ID %s not found in DB | ldapServerId |
model.user.samlIdp.notFound | SAMLServer ID %s not found in DB | samlIdpId |
model.user.ssoProvider.notFound | SSO provider ID %s not found in DB | ssoProviderId |
model.user.virtualFolderVfs.notFound | Virtual folder %s not found in DB | vfsId |
model.userAppPassword.secretHash.plainText | user app password secret hash cannot be plain text | |
model.vfs.delete.inUseAsVirtualFolder | cannot delete VFS that's in use by one or more Users as VirtualFolder | |
model.vfs.delete.inUseByUsers | cannot delete VFS that's in use by one or more Users | |
model.vfs.encryptionImmutable | at rest encryption settings cannot be changed after a VFS has been created |
Notifications
| Code | Default text | Parameters |
|---|---|---|
notification.automationToken.expiringBody | The automation token {name} owned by {owner} expires in {days} days | name, owner, days |
notification.automationToken.expiringTitle | Automation token expiring |
Management API (SuperAdmin and Admin)
| Code | Default text | Parameters |
|---|---|---|
webrest.acme.certManagedDeleteRefused | This certificate is managed automatically. Disable automatic certificates first; the certificate then stays as a normal certificate and can be deleted. | |
webrest.acme.clusterNotReady | A cluster node runs a version that cannot answer certificate validations. Update every node to 8.7.0 or later before enabling automatic certificates. | |
webrest.acme.configSaved | Automatic certificate settings saved | |
webrest.acme.directoryFetchFailed | The certificate authority directory at {url} could not be read: {error} | url, error |
webrest.acme.directoryNotAllowed | This certificate authority is not on the list of allowed directories; a SuperAdmin can add it in Global Configuration | |
webrest.acme.directoryUrlInvalid | The directory URL must be an absolute https URL | |
webrest.acme.migration.body | The old Let's Encrypt setting of the console binding was retired. The host names of the service binding are covered by the console's automatic certificate, which stays off until you review and enable it on the Certificates page. The certificates it had obtained were imported as ordinary certificates. | |
webrest.acme.migration.title | Let's Encrypt on the console binding was replaced by Automatic certificates | |
webrest.acme.notReady | The readiness check found something that would keep the certificate authority from validating. Fix the items marked as blocking, then check again. | |
webrest.acme.notif.expiring.body | Every renewal attempt since the renewal window opened has failed. {error} {remedy} The certificate expires on {notAfter}; after that clients see certificate errors. | error, remedy, notAfter |
webrest.acme.notif.expiring.title | Automatic certificate for {scope} expires in {daysLeft} days and renewal keeps failing | scope, daysLeft |
webrest.acme.notif.failed.body | {error} {remedy} The certificate in use is valid until {notAfter}; the next attempt runs at {nextAttempt}. | error, remedy, notAfter, nextAttempt |
webrest.acme.notif.failed.title | Automatic certificate for {scope} could not be obtained | scope |
webrest.acme.notif.issued.body | A certificate for {names} was issued by {issuer} and installed. It is valid until {notAfter}; renewal is automatic. | names, issuer, notAfter |
webrest.acme.notif.issued.title | Automatic certificate issued for {scope} | scope |
webrest.acme.notif.recovered.body | The renewal succeeded. The new certificate is valid until {notAfter}. | notAfter |
webrest.acme.notif.recovered.title | Automatic certificate for {scope} renewed after earlier failures | scope |
webrest.acme.notif.responder.body | {reason}. Certificate authority validations that reach this node fail until this is fixed. See Global Configuration, Automatic certificates. | reason |
webrest.acme.notif.responder.title | The certificate responder cannot answer on port 443 on node {node} | node |
webrest.acme.refusal.busy | An order, a trial or a self check is already running. Wait for it to finish. | |
webrest.acme.refusal.coordinatorUnreachable | Node {node} coordinates automatic certificates and is not answering. Try again in a moment. | node |
webrest.acme.refusal.disabled | Automatic certificates are switched off for this scope. Enable and save first. | |
webrest.acme.refusal.noHostNames | There is no host name to certify. Set one on a binding of this scope or add an additional host name, then save. | |
webrest.acme.refusal.throttled | A forced order ran recently. Try again in {retryAfter}. | retryAfter |
webrest.acme.refusal.waitingForNode | Node {node} hosts this site and is offline; the certificate authority must be able to reach every node. | node |
webrest.acme.renewAccepted | Certificate renewal started | |
webrest.acme.testAccepted | Test started | |
webrest.acme.warn.noStagingTrial | The trial against the Let's Encrypt staging environment is switched off. A misconfiguration will count against the production rate limits. | |
webrest.acme.warn.reissue | The host names, the certificate authority or the key type changed, so a new certificate will be requested. Let's Encrypt allows five certificates for the same set of names per week. | |
webrest.acme.warn.selfCheckOff | The self check is switched off. Reachability problems will only be discovered when the certificate authority fails. | |
webrest.admin.created | Admin created | |
webrest.admin.deleted | Admin deleted | |
webrest.admin.profileUpdated | Admin profile updated | |
webrest.appPassword.userMismatch | App password does not belong to this user | |
webrest.auth.automationNotLicensed | The license does not include automation | |
webrest.auth.automationTokenExpired | The automation token has expired | |
webrest.auth.automationTokenOwnerDisabled | The account that owns this automation token cannot sign in | |
webrest.auth.automationTokenRejected | The automation token was not accepted | |
webrest.auth.automationTokenRevoked | The automation token has been revoked | |
webrest.auth.automationTokensDisabled | Automation tokens are disabled on this server | |
webrest.auth.loginForbidden | You are not allowed to login | |
webrest.auth.sourceNotAllowed | This address is not allowed to use this credential | |
webrest.auth.ssoAccountRefused | Single sign on did not produce a usable account | |
webrest.auth.tokenAudienceMismatch | The authentication token was issued to a different address | |
webrest.auth.tokenExpired | The authentication token has expired | |
webrest.auth.tokenInvalid | The authentication token is not valid | |
webrest.auth.tokenMissing | Authentication required | |
webrest.auth.tokenRevoked | The authentication token has been revoked | |
webrest.auth.unauthorized | Unauthorized | |
webrest.automationToken.created | Automation token created | |
webrest.automationToken.revoked | Automation token revoked | |
webrest.automationToken.updated | Automation token updated | |
webrest.certificate.added | Certificate added | |
webrest.certificate.created | Certificate created | |
webrest.certificate.deleted | Certificate deleted | |
webrest.certificate.updated | Certificate updated | |
webrest.config.saved | Configuration saved | |
webrest.config.updated | Configuration updated | |
webrest.csr.created | CSR created | |
webrest.csr.deleted | CSR deleted | |
webrest.dryRun.completed | Dry run completed; nothing was persisted | |
webrest.ha.nodeIdRequired | node ID is required | |
webrest.ha.nodeNotFound | node not found | |
webrest.ha.notEnabled | HA is not enabled | |
webrest.login.banner.acmeRenewalFailing | The automatic certificate for {names} expires on {validTo} ({daysLeft}) and renewal keeps failing: {error}. Open the Certificates page ({certsUrl}) to see the remedy. | names, validTo, daysLeft, error, certsUrl |
webrest.login.banner.licenseExpiring | This license is valid until {validTo} ({daysLeft}). When it expires, the virtual sites on this server stop until a valid license is activated. To keep using Syncplify Server! after that date, purchase a license, or contact Syncplify if you need more time. | validTo, daysLeft |
webrest.login.banner.licenseUnreadable | An error occurred while trying to read the license file, please contact support | |
webrest.login.banner.maintenanceExpired | The maintenance plan on this license expired on {validTo}. This server cannot install updates and upgrades and is not entitled to support until it is extended in the Syncplify Customer Portal. | validTo |
webrest.login.banner.maintenanceExpiring | The maintenance plan on this license expires on {validTo} ({daysLeft}). Without it this server cannot install updates and upgrades and is not entitled to support. Log into the Syncplify Customer Portal to extend it. | validTo, daysLeft |
webrest.login.banner.noLicense | This server has no license yet. Activate the license you purchased, or request a trial, on the License page ({licenseUrl}); the virtual sites start as soon as it is active. | licenseUrl |
webrest.login.banner.noLicenseAdmin | This server has no license yet. A SuperAdmin must activate one before the virtual sites can start. | |
webrest.login.banner.trial | This TRIAL license expires on {validTo}. If you are happy with Syncplify Server!, consider buying a full license to keep using it. | validTo |
webrest.login.banner.trialUpdate | Version {version} is available and a valid trial is eligible to install it: open the Updates page ({updatesUrl}). This TRIAL license expires on {validTo}; if you are happy with Syncplify Server!, consider buying a full license. | version, updatesUrl, validTo |
webrest.login.banner.updateEligible | Version {version} is available; this server runs {running}. Open the Updates page ({updatesUrl}) to apply it, or let the update policy apply it when the server is idle. | version, running, updatesUrl |
webrest.login.banner.updateEligibleExpiring | Version {version} is available; this server runs {running}. Your maintenance plan expires on {validTo} ({daysLeft}): apply the update from the Updates page ({updatesUrl}) while you are still covered. | version, running, validTo, daysLeft, updatesUrl |
webrest.login.banner.updateFailed | The last update on node {node} did not complete: {outcome}. See the Updates page ({updatesUrl}). | node, outcome, updatesUrl |
webrest.login.banner.updateGated | Version {version} is available, but this license is not eligible to install it. This server runs {running} ({reason}). Software that is not up to date may be vulnerable, because it is not running the latest security patches. Log into the Syncplify Customer Portal and extend the maintenance plan on license code {licenseCode}, so this installation becomes eligible to install updates and upgrades. | version, running, reason, licenseCode |
webrest.login.banner.updateGatedAdmin | Version {version} is available, but this license is not eligible to install it. Software that is not up to date may be vulnerable, because it is not running the latest security patches. Your SuperAdmin must log into the Syncplify Customer Portal and extend the maintenance plan on this license so the update can be installed. Release notes ({updatesUrl}). | version, updatesUrl |
webrest.login.banner.updateInProgress | Node {node} is applying version {version} right now. Nodes update one at a time; follow it on the Updates page ({updatesUrl}). | node, version, updatesUrl |
webrest.login.banner.updateUnverifiable | Version {version} is available; this server runs {running}. The Syncplify licensing service cannot be reached from this server, so the maintenance standing could not be verified: automatic updates will not run, and a manual update asks you to accept responsibility on the Updates page ({updatesUrl}). | version, running, updatesUrl |
webrest.login.licenseExpired | The license on this server expired on {validTo}. Admins can log in again as soon as a SuperAdmin activates a valid license. | validTo |
webrest.login.licenseInvalid | This server has no valid license. Admins can log in as soon as a SuperAdmin activates one. | |
webrest.mfa.qrCodeNotFound | qr code not found | |
webrest.node.updated | Node updated | |
webrest.notification.markedRead | Notification marked as read | |
webrest.notifications.markedRead | Notifications marked as read | |
webrest.openapi.disabled | The OpenAPI specification is not served on this server | |
webrest.otp.bad | Bad OTP | |
webrest.otp.headerMissing | Required X-OTP header not found | |
webrest.otp.invalidOrExpired | Invalid or expired OTP | |
webrest.otp.secretDecodeFailed | Could not decode authenticator secret | |
webrest.password.updated | Password updated | |
webrest.perm.forbidden | You have no permission to perform this action | |
webrest.perm.temporaryPassword | Change the temporary password before using the API | |
webrest.request.badRequest | Bad request | |
webrest.request.dryRunNotSupported | This operation does not support a dry run | |
webrest.request.idempotencyInFlight | A request with the same Idempotency-Key is still in progress | |
webrest.request.idempotencyKeyInvalid | The Idempotency-Key header is not valid | |
webrest.request.idempotencyKeyMismatch | The Idempotency-Key was already used with a different request | |
webrest.request.ifMatchMalformed | The If-Match header is malformed | |
webrest.request.ifMatchNotSupported | The If-Match header is not supported on this route | |
webrest.request.invalidBody | invalid request body | |
webrest.request.invalidOnlyLast | Invalid only_last parameter | |
webrest.request.invalidSearchParams | Invalid search parameters | |
webrest.request.preconditionFailed | The resource changed since it was read | |
webrest.resource.conflict | A resource with the same identifier already exists | |
webrest.resource.notFound | Not found | |
webrest.response.ok | OK | |
webrest.samlIdp.created | SAML2.0 IdP created | |
webrest.samlIdp.deleted | SAML2.0 IdP deleted | |
webrest.samlIdp.updated | SAML2.0 IdP updated | |
webrest.script.created | Script created | |
webrest.script.deleted | Script deleted | |
webrest.script.updated | Script updated | |
webrest.secret.deleted | Secret deleted | |
webrest.secret.nameRequired | secret name is required | |
webrest.secret.stored | Secret stored | |
webrest.server.internalError | Internal server error | |
webrest.session.terminated | Session terminated | |
webrest.sessions.terminated | Sessions terminated | |
webrest.setup.invalidPassword | invalid password | |
webrest.sshHostKey.created | SSH host key created | |
webrest.sshHostKey.deleted | SSH host key deleted | |
webrest.ssoProvider.deleted | SSO provider deleted | |
webrest.superAdmin.created | Super Admin created | |
webrest.superAdmin.deleted | Super Admin deleted | |
webrest.superAdmin.profileUpdated | SuperAdmin profile updated | |
webrest.token.adminsMayNotCreate | Administrators may not create automation tokens on this server | |
webrest.token.expiryRequired | An expiry date is required | |
webrest.token.lifetimeExceedsMax | The token lifetime cannot exceed {maxDays} days | maxDays |
webrest.token.permissionsExceedOwner | The token permissions exceed those of its owner | |
webrest.token.readOnly | This automation token is read only | |
webrest.token.routeForbidden | This route is not available to automation tokens | |
webrest.token.serviceActionsRequired | This action requires the service actions scope | |
webrest.update.accepted | Update accepted. The node is draining and the update will be applied. | |
webrest.update.acknowledged | The outcome of the last update was acknowledged and no longer asks for attention. | |
webrest.update.busy | An update is already in progress on node {node}. | node |
webrest.update.canceled | The waiting update was canceled and the node accepts new connections again. | |
webrest.update.checked | Release channel checked. | |
webrest.update.clusterAccepted | Cluster update started. Nodes update one at a time. | |
webrest.update.clusterCanceled | The cluster update was canceled. Every node accepts new connections again. | |
webrest.update.consentRequired | The maintenance standing could not be verified. Apply by hand with explicit consent, or try again when the licensing service is reachable. | |
webrest.update.container | This node runs in a container and never updates itself. Deploy a newer image. | |
webrest.update.devBuild | This is a development build; it checks the release channel only when asked. | |
webrest.update.fetchFailed | The release could not be downloaded or verified: {error} | error |
webrest.update.ineligible | This installation is not eligible to install updates: {reason}. Extend the maintenance plan in the Syncplify Customer Portal at https://syngo.to/cc. | reason |
webrest.update.leaseHeld | Node {node} holds the update lease for version {version}. Nodes update one at a time. | node, version |
webrest.update.noChanges | Nothing to update | |
webrest.update.noRelease | No newer release is available for this platform. | |
webrest.update.nodeNotFound | Node {node} is not a member of this cluster. | node |
webrest.update.nodeOffline | Node {node} is offline and cannot be updated from here. | node |
webrest.update.notClustered | This server is not part of a cluster. | |
webrest.update.nothingToAcknowledge | There is no failed or rolled back update to acknowledge. | |
webrest.update.nothingToApply | This node already runs the current version. | |
webrest.update.nothingToCancel | No update was waiting. | |
webrest.update.notif.available.body | Version {version} was published on {published}. This installation runs {running} and is eligible to install it. Open the SuperAdmin Updates page to apply it, or let the update policy apply it when the server is idle. Release notes: {relNotesUrl} | version, published, running, relNotesUrl |
webrest.update.notif.available.title | Update available: Syncplify Server! {version} | version, published, running, relNotesUrl |
webrest.update.notif.availableGated.body | Version {version} was published on {published}. This installation runs {running} and is not eligible to install it: {reason}. Software that is not up to date may be vulnerable, because it is not running the latest security patches. Log into the Syncplify Customer Portal at https://syngo.to/cc and extend the maintenance plan on license code {licenseCode}, so this installation becomes eligible to install updates and upgrades. Release notes: {relNotesUrl} | version, published, running, reason, licenseCode, relNotesUrl |
webrest.update.notif.availableGated.title | Update available, maintenance plan required: Syncplify Server! {version} | version, published, running, reason, licenseCode, relNotesUrl |
webrest.update.notif.availableUnverifiable.body | Version {version} was published on {published}. This installation runs {running}. The Syncplify licensing service cannot be reached from this server, so the maintenance standing could not be verified: automatic updates will not run, and a manual update asks a SuperAdmin to accept responsibility on the Updates page. | version, published, running |
webrest.update.notif.availableUnverifiable.title | Update available, standing not verified: Syncplify Server! {version} | version, published, running |
webrest.update.notif.checkFailing.body | {error}. Check outbound HTTPS from this node to the release channel. | hours, error |
webrest.update.notif.checkFailing.title | The release channel could not be read for {hours} hours | hours, error |
webrest.update.notif.done.body | The health check passed. The previous version {from} is kept in the rollback slot. | node, version, from |
webrest.update.notif.done.title | Node {node} updated to {version} | node, version, from |
webrest.update.notif.failed.body | {error}. Nothing was changed on the node. | version, node, error |
webrest.update.notif.failed.title | Update to {version} failed on node {node} | version, node, error |
webrest.update.notif.failedNoRollback.body | The health check failed: {error}. The node was left on the new version, because the SyngoDB data layout changed and restoring the previous binaries would be unsafe. A pre update backup is in the data directory. Contact Syncplify support before taking any further action. | version, node, error |
webrest.update.notif.failedNoRollback.title | Update to {version} failed on node {node}, manual attention required | version, node, error |
webrest.update.notif.launchFailed.body | The update executor did not start: {error}. The node accepts new connections again and nothing was changed. | version, node, error |
webrest.update.notif.launchFailed.title | Update to {version} could not start on node {node} | version, node, error |
webrest.update.notif.passFinished.body | All {count} nodes run {version}. | version, count |
webrest.update.notif.passFinished.title | Cluster update to {version} finished | version, count |
webrest.update.notif.passStarted.body | Nodes update one at a time in this order: {nodes}. | version, nodes |
webrest.update.notif.passStarted.title | Cluster update to {version} started | version, nodes |
webrest.update.notif.passStopped.body | {reason}. The remaining nodes were not touched: {remaining}. | version, node, reason, remaining |
webrest.update.notif.passStopped.title | Cluster update to {version} stopped at node {node} | version, node, reason, remaining |
webrest.update.notif.pausedUnverifiable.body | The Syncplify licensing service cannot be reached from this server. Automatic updates resume once it can be reached; a SuperAdmin can apply by hand from the Updates page. | version |
webrest.update.notif.pausedUnverifiable.title | Automatic update to {version} paused: maintenance standing not verified | version |
webrest.update.notif.postponedOffline.body | Node {node} is offline, so the update policy will not proceed. Bring it back online, or remove the dead node first from the Cluster page. | version, node |
webrest.update.notif.postponedOffline.title | Automatic update to {version} postponed: cluster member offline | version, node |
webrest.update.notif.rolledBack.body | The health check failed: {error}. The Web/REST, worker and SyngoDB binaries were restored to {from} as a set and the node is running again on the previous version. | version, node, error, from |
webrest.update.notif.rolledBack.title | Update to {version} rolled back on node {node} | version, node, error, from |
webrest.update.notif.staged.body | The release was downloaded and verified. The node is draining and the update applies at its next idle moment{window}. | version, node, window |
webrest.update.notif.staged.title | Update to {version} staged on node {node} | version, node, window |
webrest.update.notif.started.body | The node was drained ({terminated} sessions were terminated after the grace period) and its Web/REST, worker and SyngoDB services are restarting. The console on this node is unreachable until the health check passes. | version, node, terminated |
webrest.update.notif.started.title | Update to {version} started on node {node} | version, node, terminated |
webrest.update.passCleared | The halted cluster update was cleared. | |
webrest.update.passHalted | The cluster update is halted at node {node}: {reason}. Clear the halted pass after fixing the node. | node, reason |
webrest.update.passRunning | A cluster update pass is running. Per node actions are available again once it finishes. | |
webrest.update.peersOffline | Cluster members are offline: {nodes}. Remove the dead node first, or acknowledge the offline members for a per node update. | nodes |
webrest.update.protocolChange | This release changes the cluster protocol and must be installed with the setup program on every node. | |
webrest.update.schemaTooLow | Every cluster member must run version 8.4.0 or newer before the cluster can update itself. Update the remaining nodes with the setup program first. | |
webrest.update.staged | Update staged. The node is draining and the update applies at its next idle moment. | |
webrest.update.stagedMissing | The staged release is no longer on disk; check for updates again. | |
webrest.user.created | User profile created | |
webrest.user.deleted | User deleted | |
webrest.user.statsNotFound | User stats not found | |
webrest.user.updated | User updated | |
webrest.vfs.created | VFS created | |
webrest.vfs.deleted | VFS deleted | |
webrest.vfs.updated | VFS updated | |
webrest.vsite.created | Virtual site added | |
webrest.vsite.deleted | vsite deleted | |
webrest.vsite.started | vsite started | |
webrest.vsite.stopped | vsite stopped | |
webrest.vsite.updated | Virtual site updated |
WebClient API
| Code | Default text | Parameters |
|---|---|---|
wrk.auth.headerMissing | authorization header not found | |
wrk.auth.missingToken | missing JWT token | |
wrk.auth.sessionExpired | is your session expired? | |
wrk.auth.sessionMissingUser | session without a user, cannot continue | |
wrk.auth.tokenClaimsParseFailed | could not parse JWT claims | |
wrk.auth.tokenParseFailed | could not parse JWT | |
wrk.auth.unauthorized | No authorization token or invalid credentials | |
wrk.authenticator.secretRequired | authenticator secret is required | |
wrk.authenticator.settingsChanged | authenticator settings changed | |
wrk.authenticator.typeInvalid | invalid authenticator type | |
wrk.file.createDirectoryFailed | could not create directory | |
wrk.file.invalidFilename | invalid or blank filename | |
wrk.file.metadataUnavailable | file metadata not available | |
wrk.file.missingDestinationPath | missing destination path | |
wrk.file.missingPath | missing path | |
wrk.file.thumbnailNotFile | cannot create a thumbnail of something that is not a file | |
wrk.file.thumbnailUnsupported | cannot create a thumbnail, file format unknown or not supported | |
wrk.file.uploaded | file uploaded | |
wrk.files.uploaded | file(s) uploaded | |
wrk.files.uploadedWithErrors | file(s) uploaded with errors | |
wrk.jwt.refreshGenerateFailed | failed to generate new JWT | |
wrk.jwt.refreshInvalidSessionType | invalid session type (it should be httpSession) | |
wrk.jwt.refreshNoSession | JWT refresh failed: no session found | |
wrk.jwt.refreshNotAllowed | refreshing JWT is not allowed by configuration | |
wrk.jwt.refreshRevokeFailed | failed to revoke old JWT | |
wrk.jwt.refreshTooEarly | JWT refresh not allowed yet (it will be available in %d seconds) | seconds |
wrk.jwt.refreshTooMany | JWT refresh not allowed anymore (max refreshes allowed: %d) | maxRefreshes |
wrk.jwt.secretMissing | JWT secret not found in configuration, cannot continue | |
wrk.jwt.userLoadFailed | failed to re-verify user while refreshing JWT | |
wrk.jwt.userNoLongerAllowed | user no longer allowed to log in | |
wrk.license.sharingForbidden | current license does not include WebClient! sharing functions | |
wrk.object.created | object created | |
wrk.object.deleted | object deleted | |
wrk.object.renamed | object moved/renamed | |
wrk.password.changed | password changed | |
wrk.password.confirmMismatch | new password must be typed twice identically | |
wrk.permission.forbidden | you cannot perform this operation | |
wrk.profile.emailChanged | email changed | |
wrk.profile.pictureChanged | picture changed | |
wrk.profile.preferredLanguageChanged | preferred language changed | |
wrk.r2fs.notif.storageDegraded.body | R2FS! node {connector} (version {version}) keeps serving virtual file system {vfs} ({serverVfs}) but its last storage probe failed. Phase: {phase}. Reason: {reason}. The link is kept and the node probes again every minute; operations may fail until the storage answers. | vfs, connector, version, serverVfs, phase, reason |
wrk.r2fs.notif.storageDegraded.title | R2FS! storage degraded: {vfs} | vfs, connector, version, serverVfs, phase, reason |
wrk.r2fs.notif.storageRestored.body | R2FS! node {connector} reports the storage behind virtual file system {vfs} ({serverVfs}) reachable again after {duration}. | vfs, connector, serverVfs, duration |
wrk.r2fs.notif.storageRestored.title | R2FS! storage reachable again: {vfs} | vfs, connector, serverVfs, duration |
wrk.r2fs.notif.storageWithheld.body | R2FS! node {connector} (version {version}) cannot reach the storage behind virtual file system {vfs} ({serverVfs}) and is not presenting it. Phase: {phase}. Reason: {reason}. No other R2FS! node serves it on server node {node} right now, so its users are told their storage is unreachable until the storage answers. The R2FS! node keeps retrying on its own; next attempt at {nextRetry}. | vfs, connector, version, serverVfs, phase, reason, node, nextRetry |
wrk.r2fs.notif.storageWithheld.title | R2FS! storage unreachable: {vfs} | vfs, connector, version, serverVfs, phase, reason, node, nextRetry |
wrk.r2fs.notif.storageWithheldRedundant.body | R2FS! node {connector} (version {version}) cannot reach the storage behind virtual file system {vfs} ({serverVfs}) and is not presenting it. Phase: {phase}. Reason: {reason}. Other R2FS! nodes still serve it, so users are not affected, but redundancy is reduced until the storage answers; next attempt at {nextRetry}. | vfs, connector, version, serverVfs, phase, reason, nextRetry |
wrk.r2fs.notif.storageWithheldRedundant.title | R2FS! storage unreachable on one node: {vfs} | vfs, connector, version, serverVfs, phase, reason, nextRetry |
wrk.request.badListingParams | unprocessable limit/offset/order value(s) | |
wrk.request.badPayloadFormat | bad payload format | |
wrk.resource.notFound | Not found | |
wrk.script.forbidden | action forbidden by script | |
wrk.server.internalError | Internal server error | |
wrk.share.deleteFailed | failed to delete share ID %s from database | shareId |
wrk.share.downloadPathForbidden | you can only download the file that was shared with you | |
wrk.share.filenameMismatch | skipping file [%s] because name doesn't match shared object name | filename |
wrk.share.loadFailed | failed to load share ID %s from database | shareId |
wrk.share.missingId | missing {share_id} in path | |
wrk.share.noLongerExists | the shared object you're trying to access no longer exists | |
wrk.share.saveFailed | failed to save share-cfg to database | |
wrk.share.uploadRootRequired | when the shared object is a file, you can only upload a file with the same name and you cannot specify an upload path in the URL | |
wrk.share.zipSingleFileOnly | only 1 file was shared with you, so you cannot zip and download multiple files | |
wrk.storage.unreachable | your storage is unreachable right now; please try again later or ask your server administrator | |
wrk.upload.destinationNotDirectory | cannot upload files into a destination that is not a directory | |
wrk.upload.failed | upload failed | |
wrk.upload.failedWithReason | upload failed: %s | reason |
wrk.user.passwordChangeForbidden | user [%s] not allowed to change own password | userId |
wrk.user.sharingForbidden | user profile not allowed to share files/folders via WebClient! | |
wrk.userType.emailChangeForbidden | users of type [%s] cannot change their email via WebClient! UI | userType |
wrk.userType.passwordChangeForbidden | users of type [%s] cannot change their password via WebClient! UI | userType |
wrk.userType.pictureChangeForbidden | users of type [%s] cannot change their profile picture via WebClient! UI | userType |
