Go to file
neil e64bdc9cf3 Mise à jour de 'README.md' 2020-08-29 19:50:27 +00:00
db removing zero-octet file 2020-08-19 01:23:27 +02:00
migrations/20200809180000_create_form initial commit and v1? 2020-08-19 01:21:42 +02:00
src Use await everywhere, do not declare a mutable variable if the body doesn't need to be edited, disable compression 2020-08-29 19:55:03 +02:00
templates Duplicate 'service in development' text in template 2020-08-22 17:59:22 +02:00
.gitignore initial commit and v1? 2020-08-19 01:21:42 +02:00
Cargo.toml initial commit and v1? 2020-08-19 01:21:42 +02:00
LICENSE Initial commit 2020-08-18 23:12:15 +00:00
README.md Mise à jour de 'README.md' 2020-08-29 19:50:27 +00:00
adj-list.txt initial commit and v1? 2020-08-19 01:21:42 +02:00
config.toml.sample initial commit and v1? 2020-08-19 01:21:42 +02:00
lang.json Use await everywhere, do not declare a mutable variable if the body doesn't need to be edited, disable compression 2020-08-29 19:55:03 +02:00
name-list.txt initial commit and v1? 2020-08-19 01:21:42 +02:00

README.md

sncf

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

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 and English.

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.