ファイルへ移動
neil 507e8877c8 Merge branch 'root' of ssh://git.42l.fr:42084/neil/sncf into root 2022-02-24 10:56:12 +01:00
migrations implementing multiple database systems support! 2020-11-01 18:03:42 +01:00
src compatibility with nextcloud 22 and Forms API v1.1 2021-10-11 16:54:55 +02:00
templates messed up description in index.html. fixes #37 2021-10-11 16:59:36 +02:00
.gitignore removing db folder 2020-11-01 18:06:17 +01:00
Cargo.toml compatibility with nextcloud 22 and Forms API v1.1 2021-10-11 16:54:55 +02:00
LICENSE Initial commit 2020-08-18 23:12:15 +00:00
README.md Merge branch 'root' of ssh://git.42l.fr:42084/neil/sncf into root 2022-02-24 10:56:12 +01:00
adj-list.txt initial commit and v1? 2020-08-19 01:21:42 +02:00
config.toml.sample downgrading cookie key size from 48 to 32 2020-11-04 20:02:48 +01:00
lang.json fixing number of field types in index 2021-04-15 23:59:58 +02:00
name-list.txt initial commit and v1? 2020-08-19 01:21:42 +02:00
rustfmt.toml adding fmt rules 2020-11-01 18:02:41 +01:00

README.md

sncf

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.

How ?

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-Cookie headers 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.

Setup

See the dedicated wiki page.

Note: There is currently no script to make the installation easier (see #12).

Compatibility table

Compatibility with sncf has been tested for the following Nextcloud and Nextcloud Forms versions.

sncf Nextcloud Nextcloud Forms
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
1.5.0 22.2.0 2.3.0

* 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.

Contribute

Donations

If you like this work, please donate to the 42l association (maintaining sncf) or Nextcloud (maintaining Nextcloud and Nextcloud Forms).

Translating

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.

Code

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.

FAQ

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.