Skyve 6.0 released

Skyve 6 provides the ability to enable user self-registration via no-code configuration, internationalisation of common parts of the Admin module, cloud backups and made it easier to customise the logo, favicon and background image for Skyve applications.

Self-Registration

An application with Self-Registration enabled

An application with Self-Registration enabled

Skyve applications can now be configured to enable public user self-registration. To configure this, your application:

  • needs to have a “public” user created in the system, this is used for application permissions during the registration process. Create a user with a random strong password and the “Admin - Anonymous” role

  • needs to have Email configured, so that account activation emails can be sent, and users can reset their own passwords

  • needs to have a Self-Registration group created, this defines the default permissions new users get in the system after registration

  • must be a single-tenant application, i.e. a default customer is set in the application json file under environment : customer

To enable self-registration:

  • from the Startup screen of your new application, or the Startup tab from Security Admin -> Configuration, tick “Allow User Self Registration”

  • configure your Mail Settings and make sure Test Mode and Test Mail Recipient are not set and click Save

  • from the General tab of Security Admin -> Configuration, select the “User Self Registration Group” and set the “Anonymous Public User” and click Save

If everything is set up correctly, your login page should now switch to email address as the username field, and show a link to Register below the login form.

Cloud Backups

An external backup class can now be specified in your application settings to define where Skyve application backups are read from and written to. An example implementation using Azure blog storage has been provided which requires a paid or trial Azure account and you to add your blob storage API keys.

Instructions for storing backups in Azure:

Note: this requires knowledge of the Microsoft Azure portal, how it charges and how to access its services. The following steps are just a rough overview of the process and not intended to be a detailed guide. You will be charged for data stored in Azure storage.

  • head to portal.azure.com and sign in or subscribe

  • go to Storage accounts and create a new blob storage account

  • after going through the wizard to create your blob storage, go to Settings -> Access keys for your storage account

  • copy the Connection string for key1

  • go to your application json file

  • create a new backup endpoint with the following keys:

backup: {
    externalBackupClass: "org.skyve.impl.backup.AzureBlobStorageBackup",
    connectionString: "<key1 connection string>",
    containerName: "<storage account name>"
},
  • you will also need to update your project pom.xml with the following dependenies:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-storage-blob</artifactId>
    <version>12.8.0</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.11.3</version>
</dependency>
  • redeploy your application and it should begin to use your Azure blog storage account for reading and writing Skyve backups

  • remember to enable the “Scheduled Backup all data and content” job to have backups happen automatically every day

More Internationalisation

Skyve has had support for internationalisation in the platform for a long time, but this release applies internationalisation changes to the Contact, User, Configuration and Startup sections of the admin module. This prepares the admin module to be translated into other languages. Let us know if you would like to contribute some translations!

Easier Customisation

We’ve tried to reduce the number of places which need to be modified to fully customise your Skyve application to make it your own. You should now see deeper penetration of changes when customising:

  • your logo in your customer.xml

  • webapp/pages/fragments backgroundImage.html, favicon.html and logo.html

  • webapp/WEB-INF/pages/includes/favicon.xhtml

Admin

  • Clean up admin module menu

  • Internationalisation of admin module

  • Remove admin DocumentName document and renamed DataMaintenanceModuleDocument to ModuleDocument and combined their use

  • Update StartupExtension to allow non-required properties to be nulled

  • Add new user self-registration property to the json configuration to allow this to be enabled/disabled via a Startup property instead of a database field so that the login page can show the registration link dynamically

  • Update UtilImpl to read the new self-registration property

  • Add new self-registration property to account block of json

  • update login.jsp to show the register button when enabled for single-tenant applications

  • remove no longer required Configuration from SelfRegistraion

  • update Startup view with new account section

  • update StartupExtension to load and save account settings

  • add activated field to User view when self-registration is enabled

  • Restored Configuration PasswordComplexityModel for backwards compatibility with Skyve backups made before Skyve 5.0, this will be removed again in a later release

  • Deprecate allowUserSelfRegistration to allow backward compatibility for restore, this will be removed in a later release

  • Add ability to resend an activation email when a user attempts to register an account which already has been registered but has not been activated

  • Add ResendActivation action to resend the registration/activation email

  • Move registration email logic from ConfigurationExtension into SelfRegistrationExtension

  • Update GenerateTestDataJob to populate optional references when generating test data

  • Improve performance of User and System dashboard by limiting range of data to previous 14 days

  • Provide multicolour and non-sql dataset options for ThemeCharter

Framework

  • Add Decimal.approximately()

  • Update SkyveContextListener to set self-registration property on startup

  • Fix various i18n substitution mechanisms

  • Added favicon.html fragment to assist in updating an application favicon across common public pages

  • Add java.time conversion methods for Skyve temporal types

  • Introduce Skyve expressions - see BindTest.testExpressions() for usage

  • Add new sendRegistrationEmail to WebUtil

  • Add new resendRegistrationEmail.jsp

  • Cater for the ADM_SecurityUser.activated column when determining if a Skyve user is active

  • Added ability to specify an external backup class for handling backups in an alternative location to the filesystem. Added implementation that uses Azure blob storage

  • Use touch cookie to inform device type on the server

  • Add background image page fragment to common public pages to make it easier to customise the background image for your Skyve application

  • Update home.xhtml to show the application description from the pom

  • Move org.skyve.impl.web.UserAgentType to org.skyve.web.UserAgentType

  • Replace UserAgentUtils lib with Browsecap lib

  • Propagate Skyve exceptions in Repository directly instead of wrapping

  • Add a Repository mode that checks for existence of java files and doesn't load java classes

  • Hide > 8 columns in default query and let the column title be set by the attribute name

  • Add BeanValidator.processMessageBindings(e, bindingPrefix)

  • Remove customer from BindUtil.formatMessage()

PrimeFaces

  • Add favicon xhtml fragment to faces templates to make it easier to customise the favicon image for your Skyve application

  • Updated editorial theme to use Open Sans throughout instead of Roboto for some headings

  • Fix the showMenu false, showSwitchMode false and showLogout true combo for Ecuador and Ultima PF themes

  • Don't include switch mode on phone devices

Notes for Upgrading

To upgrade your Skyve project to this version, change the Skyve version in your pom.xml to 6.0.0 and change your skyve-maven-plugin version to 1.28.

The import for org.skyve.impl.web.UserAgentType in router/DefaultUxUiSelector.java needs to be changed to org.skyve.web.UserAgentType.

Add the following section to the webResources section of your pom.xml:

<webResource>
    <directory>src/main/webapp/desktop</directory>
    <targetPath>desktop</targetPath>
    <filtering>true</filtering>
    <includes>
        <include>home.xhtml</include>
    </includes>
</webResource>

Add the following property to your application json file in the account section:

account: {
    ...,
    // Enables new users to register for an account when true, requires email
    allowUserSelfRegistration: false
}

See the complete upgrade instructions on GitHub.

releasesBen PetitoComment