Warning: Breaking changes introduced on a minor Nextcloud release (>= 22.3.0) broke sncf. Please do not update until it is fixed. It seems easy to fix (use
/login instead of
/csrftoken) but I need time, feel free to try to fix it.
Simple Nextcloud Forms (sncf) is a lightweight proxy written in Rust with the Actix framework.
It is meant to make form creation easier, through the use of the Nextcloud Forms application, by generating administration links for forms: users do not need to log in or register, they just need to keep a link (in the form of
https://your-instance.com/admin/<45-byte base64 key>) to log them in and give them access to their forms.
I really used black voodoo magic on this one.
This software acts as a proxy between the client and the Nextcloud instance. Here are some of its features :
- When a link is created from the main page, sncf connects to the Nextcloud API and creates an account with a random username and password. Those credentials are stored in its SQLite database, along with a randomly-generated token (used in the administration link).
- When an administration link is used, sncf uses its database to find the associated username and password, then fills the login form on the Nextcloud instance (taking in account its CSRF token) and proxies the generated
Set-Cookieheaders to the client (to log the user in), then redirects it to the Forms app.
- When a form is created, sncf automatically forges a request to update some fields in the form (set isAnonymous to true, for instance). Those parameters can't be changed by the client.
- When a form is updated, sncf parses the requests before proxying it in order to prevent the client to edit some specific fields (isAnonymous or form access policy, which must not set to allow the users of the same instance to see the form). If an unwanted request is made, sncf does not proxy it.
- A lot of routes are restricted (settings, API) to prevent the instance from being used for anything else than the Forms app.
Those tweaks are completed by server-side CSS edits (using an application) to hide unwanted fields.
See the dedicated wiki page.
Note: There is currently no script to make the installation easier (see #12).
Compatibility with sncf has been tested for the following Nextcloud and Nextcloud Forms versions.
|1.0.0||19.0.1, 19.0.2||2.0.2, 2.0.3|
|1.0.1, 1.0.2, 1.1.0, 1.2.0||19.0.1, 19.0.2, 20.0.0*, 20.0.1||2.0.4|
|Unsupported **||above 20.0.1, below 21.x||above 2.0.4, below 2.2.2|
|1.3.0, 1.4.0||21.0.0||2.2.2, 2.2.3, 2.2.4|
* Breaking changes, please check the wiki if you need to upgrade from a previous version.
** Untested versions, use at your own risk.
If your NC or NC Forms version isn't in this list, sncf may or may not work. We do not ensure backwards compatibility with older versions.
Avoid upgrading software without checking its compatibility with sncf.
If you upgrade anyway and notice a breaking change, please file an issue.
If you like this work, please donate to the 42l association (maintaining sncf) or Nextcloud (maintaining Nextcloud and Nextcloud Forms).
Currently, this software is translated in French, English and German (thanks alpcentaur!)
Feel free to take a look at the lang.json file and send a pull request.
Check the opened issues. Feel free to take a look at the code (it's really small). There's yet a lot of place for improvement. If you need info, you can create an issue with the
question tag on it.
What is the CPU/RAM consumption of this setup?
The "setup" we're talking about is the main instance's, forms.42l.fr.
- sncf consumes between 20 and 60 MB of RAM and isn't CPU-hungry.
- Nextcloud consumes between 60 MB and 120 MB of RAM. It's quite lightweight compared to other Nextcloud instances since the usual apps are disabled. It's eating some CPU like any regular PHP application.
Why didn't you write a Nextcloud application instead ?
That sounds appropriate, but I don't feel like writing PHP and I don't know Nextcloud internals. Feel free to write it, though.
Are you crazy? This tweak is gonna break at every single update.
Yeah, well, you're probably right. A Nextcloud app would be more suitable, I guess. But anyway, feel free to use something else if this is too much tweaking for you. But I'd prefer some pull requests to help me keep this software up-to-date with Nextcloud and Nextcloud Forms updates.