server issueshttps://gitlab.com/liberaforms/liberaforms/-/issues2024-03-27T20:11:44Zhttps://gitlab.com/liberaforms/liberaforms/-/issues/180feature request: OIDC support2024-03-27T20:11:44ZRolandfeature request: OIDC supportWhen it comes to deploying services like LiberaForm at organisations or universities, one of the first question of the CIO is: "Does it support SingleSignOn?" They may have 2FA policies and do not want to hassle with forgotten passwords ...When it comes to deploying services like LiberaForm at organisations or universities, one of the first question of the CIO is: "Does it support SingleSignOn?" They may have 2FA policies and do not want to hassle with forgotten passwords at the support desk.
So being able to connect to an IDM system like Keycloak is often a pre-condition to fulfill security requirements. The most common protocol is OIDC, which brings at least an access token, e-mail address and the username to your application. It would be great if that gets on the roadmap of LiberaForm.https://gitlab.com/liberaforms/liberaforms/-/issues/179Uploadeded files gives 4042024-02-19T18:28:38ZDaniel A. RodriguezUploadeded files gives 404Hi,
Have a fresh docker deployment here and facing issue mentioned above. Files are saved but when you try to use them 404 appears.
My first thought pointed to permissions but in such case could not be written on disk, right?
Volumes ...Hi,
Have a fresh docker deployment here and facing issue mentioned above. Files are saved but when you try to use them 404 appears.
My first thought pointed to permissions but in such case could not be written on disk, right?
Volumes are mounted this way
```
volumes:
- /opt/liberaforms_uploads:/app/uploads
- /opt/liberaforms_logs:/app/logs
```
and files got saved on host
```
# ls -alh liberaforms_uploads/media/2
total 224K
drwxr-xr-x 2 root root 4,0K feb 19 16:45 .
drwxr-xr-x 6 root root 4,0K feb 19 16:45 ..
-rw-r--r-- 1 root root 212K feb 19 16:45 fe3e27bd2e3848daa9ee6ceeff3d17a2.jpg
-rw-r--r-- 1 root root 1,4K feb 19 16:45 tn-fe3e27bd2e3848daa9ee6ceeff3d17a2.jpg
```
Logs
```
2024-02-19 17:34:35,369 INFO 404 192.168.8.17 - User "despicableme". Page not found: /media/2/4eb5e34ed0f24ef3aca2e5fd1668e867.png
```
Host directory
```
# ls -alh /opt/liberaforms_uploads/media/2
total 200K
drwxr-xr-x 2 root root 4,0K feb 19 17:33 .
drwxr-xr-x 6 root root 4,0K feb 19 16:45 ..
-rw-r--r-- 1 root root 181K feb 19 17:33 4eb5e34ed0f24ef3aca2e5fd1668e867.png
-rw-r--r-- 1 root root 5,6K feb 19 17:33 tn-4eb5e34ed0f24ef3aca2e5fd1668e867.png
```
Therefore, any clarifying hints would be greatly appreciated.https://gitlab.com/liberaforms/liberaforms/-/issues/178Implementation of Honeypot Option in LiberaForms2024-01-11T19:57:57ZKapisImplementation of Honeypot Option in LiberaFormsA honeypot is an effective method to combat automated spam submissions on forms by adding an invisible field that is meant to be left blank by legitimate users but tends to be filled by bots.
Rationale:
As the usage of LiberaForms conti...A honeypot is an effective method to combat automated spam submissions on forms by adding an invisible field that is meant to be left blank by legitimate users but tends to be filled by bots.
Rationale:
As the usage of LiberaForms continues to grow, it becomes essential to address the increasing challenges posed by automated spam submissions. Implementing a honeypot option can significantly enhance the software's capability to filter out spam without imposing additional burdens on users or requiring complex authentication mechanisms.
Key Benefits:
* Improved Form Security: A honeypot option adds an extra layer of security to forms, making it more difficult for automated bots to submit spam entries.
* User-Friendly Approach: Unlike traditional CAPTCHAs or complex authentication methods, a honeypot is a non-intrusive solution that does not disrupt the user experience. Legitimate users won't even be aware of its presence.
* Low False Positives: Honeypots have proven to be effective with minimal false positives, ensuring that genuine form submissions are not accidentally blocked.
Possible Implementation:
The honeypot option could be included as a configurable setting within LiberaForms, allowing administrators to easily enable or disable it based on their specific needs. By default, this feature could be turned on to provide out-of-the-box protection against spam.
Additional Considerations:
* Configurability: The option should be configurable to accommodate various use cases, such as the ability to customize field names or adjust sensitivity settings.
* Documentation: Proper documentation should be provided to guide administrators on the benefits of enabling the honeypot option and how to configure it effectively.
* Community Feedback: It would be valuable to gather feedback from the LiberaForms community during the development process to ensure that the feature aligns with user expectations and requirements.https://gitlab.com/liberaforms/liberaforms/-/issues/177Resume form capability2024-01-09T16:32:43ZKapisResume form capabilityLimesurvey allows resuming a form (i presume via cookies is saved the form filled data)
I find it useful for big forms. Maybe some day I can implement it.
![imagen](/uploads/067cd12b722f15774422ffb3c26e8f87/imagen.png)Limesurvey allows resuming a form (i presume via cookies is saved the form filled data)
I find it useful for big forms. Maybe some day I can implement it.
![imagen](/uploads/067cd12b722f15774422ffb3c26e8f87/imagen.png)https://gitlab.com/liberaforms/liberaforms/-/issues/176Export entries result into a geojson or a live leaflet map2023-12-20T12:48:40ZKapisExport entries result into a geojson or a live leaflet mapPreviously we will need this:
https://gitlab.com/liberaforms/liberaforms/-/issues/135
I believe this feature could be a "killer feature" of LiberaForms making it able to also export its entries into a leaflet map (with clickable points ...Previously we will need this:
https://gitlab.com/liberaforms/liberaforms/-/issues/135
I believe this feature could be a "killer feature" of LiberaForms making it able to also export its entries into a leaflet map (with clickable points showing a description formatted from the other entries) (initially the popup description could just be a simple list of "<b>Title of question:</b> Answer <br>").
For those forms that would have a coordinates input type field, the liberaforms would allow .geojson export file or, live .geojson url (that can be imported from other apps like https://umap.openstreetmap.fr/ , etc).
This would allow the creation of collectable map info repositories(the ones that normally require complex webapps, wordpress plugins, etc...) with a simple form creation. It could really help the crowdsourcing needs of many movements, projects and communities.https://gitlab.com/liberaforms/liberaforms/-/issues/175Stuck in site creation stage2023-12-22T22:39:12ZDaniel A. RodriguezStuck in site creation stageHi there
When trying to deploy using docker face this issue
```
root@host:~# docker exec -it liberaforms-app bash
root@9529fcfc9f46:/app# flask site set -hostname=my.domain.com -scheme=[http] -port=80
Usage: flask site [OPTIONS] COMMAN...Hi there
When trying to deploy using docker face this issue
```
root@host:~# docker exec -it liberaforms-app bash
root@9529fcfc9f46:/app# flask site set -hostname=my.domain.com -scheme=[http] -port=80
Usage: flask site [OPTIONS] COMMAND [ARGS]...
Try 'flask site --help' for help.
Error: No such command 'set'.
root@9529fcfc9f46:/app# flask site --help
Usage: flask site [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
expire-forms Expire forms with an old expiry date condition and send...
get-versions Print the LiberaForms and alembic versions to the terminal.
```
Tried within the container 'cause this way shows the same error
``docker exec liberaforms-app flask site set -hostname=my.domain.com -scheme=[http|https] -port=8080``
Also had to follow steps detailed at https://gitlab.com/liberaforms/liberaforms/-/issues/167#note_1613643488 to reach these stage.
So, any hint will be much appreciated.https://gitlab.com/liberaforms/liberaforms/-/issues/174Option to delete user avatar2023-11-29T16:38:40ZPorrumentzioOption to delete user avatarCurrently you cannot delete/remove your avatar, but only add (a new) one. There should be a button to delete the current avatar and leave nothing.Currently you cannot delete/remove your avatar, but only add (a new) one. There should be a button to delete the current avatar and leave nothing.https://gitlab.com/liberaforms/liberaforms/-/issues/173Add "Publish" button on form Configuration page2023-11-25T10:15:27ZPorrumentzioAdd "Publish" button on form Configuration pageThe petition comes from a user who struggled with publishing the form once they ended creating it, because it was not intuitive to need to go to "Options" page and there toggle the public visibility. Therefore, it would be worth having a...The petition comes from a user who struggled with publishing the form once they ended creating it, because it was not intuitive to need to go to "Options" page and there toggle the public visibility. Therefore, it would be worth having a button in Configuration pages which activates public visibility straightaway and redirects to "Options" pagehttps://gitlab.com/liberaforms/liberaforms/-/issues/172Make "Other information" text editor MarkDown2023-11-21T08:16:11ZPorrumentzioMake "Other information" text editor MarkDownCurrently this text editor is HTML, and as far as I know, it's the only text editor in the application which still uses HTML instead of MarkDownCurrently this text editor is HTML, and as far as I know, it's the only text editor in the application which still uses HTML instead of MarkDownhttps://gitlab.com/liberaforms/liberaforms/-/issues/171Editable public URL2023-11-08T00:58:00Zjon rEditable public URLThe public URL of a form is currently immutable, and set during creation.
As a regular editor of forms, I'm sometimes making errors, and need a way to edit the public form URL, in so my errors can be repaired.
This can be implemented i...The public URL of a form is currently immutable, and set during creation.
As a regular editor of forms, I'm sometimes making errors, and need a way to edit the public form URL, in so my errors can be repaired.
This can be implemented in a way, where changes to slugs are tracked and redirected, while reusing previous slugs (of others) is prohibited due to privacy reasons.
The current workaround would be to copy the form to a new slug, but the submissions get lost along the way.https://gitlab.com/liberaforms/liberaforms/-/issues/170Attaching, linking or embedding submission content in email confirmation message2023-11-08T01:01:27Zjon rAttaching, linking or embedding submission content in email confirmation messageCurrently form answers are only accessible, if a Short Text field of type email is given and editing of answers is allowed.
Then the person submitting the form will receive a capability URL that is an edit link to the form, using an a h...Currently form answers are only accessible, if a Short Text field of type email is given and editing of answers is allowed.
Then the person submitting the form will receive a capability URL that is an edit link to the form, using an a hardly guessable address, an open secret.
Alternatively one may like to receive a copy of one's form entries, either:
1. As an optional read-only link in the confirmation mail
2. In the confirmation message with using template tags
3. As an optionally attached JSON, CSV, PDF or text, HTML file
This is in continuation of a wholly #155https://gitlab.com/liberaforms/liberaforms/-/issues/167flask database create-tables: psycopg2.errors.InsufficientPrivilege: permissi...2023-12-12T12:32:50Zjoenepraatflask database create-tables: psycopg2.errors.InsufficientPrivilege: permission denied for schema publicI'm following the installation guide at https://gitlab.com/liberaforms/liberaforms/-/blob/main/docs/INSTALL.md. I'm now stuck at 'flask database create-tables'. It gives a permission error. I also had that when I did 'flask database crea...I'm following the installation guide at https://gitlab.com/liberaforms/liberaforms/-/blob/main/docs/INSTALL.md. I'm now stuck at 'flask database create-tables'. It gives a permission error. I also had that when I did 'flask database create', but the alternative on the next line worked well, but there's no alternative for creating the tables. So the database is now set-up, but without tables.
I'm guessing there is some easy way to add the tables to the database, but I couldn't find it in the code.
Errors:
```plaintext
(venv) root:/opt/liberaforms# flask database create-tables
Traceback (most recent call last):
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1900, in _execute_context
self.dialect.do_execute(
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute
cursor.execute(statement, parameters)
psycopg2.errors.InsufficientPrivilege: permission denied for schema public
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/opt/liberaforms/venv/bin/flask", line 8, in <module>
sys.exit(main())
File "/opt/liberaforms/venv/lib/python3.9/site-packages/flask/cli.py", line 1047, in main
cli.main()
File "/opt/liberaforms/venv/lib/python3.9/site-packages/click/core.py", line 1055, in main
rv = self.invoke(ctx)
File "/opt/liberaforms/venv/lib/python3.9/site-packages/click/core.py", line 1657, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/opt/liberaforms/venv/lib/python3.9/site-packages/click/core.py", line 1657, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/opt/liberaforms/venv/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/opt/liberaforms/venv/lib/python3.9/site-packages/click/core.py", line 760, in invoke
return __callback(*args, **kwargs)
File "/opt/liberaforms/venv/lib/python3.9/site-packages/click/decorators.py", line 26, in new_func
return f(get_current_context(), *args, **kwargs)
File "/opt/liberaforms/venv/lib/python3.9/site-packages/flask/cli.py", line 357, in decorator
return __ctx.invoke(f, *args, **kwargs)
File "/opt/liberaforms/venv/lib/python3.9/site-packages/click/core.py", line 760, in invoke
return __callback(*args, **kwargs)
File "/opt/liberaforms/liberaforms/commands/database.py", line 67, in create_tables
db.create_all()
File "/opt/liberaforms/venv/lib/python3.9/site-packages/flask_sqlalchemy/extension.py", line 868, in create_all
self._call_for_binds(bind_key, "create_all")
File "/opt/liberaforms/venv/lib/python3.9/site-packages/flask_sqlalchemy/extension.py", line 849, in _call_for_binds
getattr(metadata, op_name)(bind=engine)
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/sql/schema.py", line 4917, in create_all
bind._run_ddl_visitor(
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 3228, in _run_ddl_visitor
conn._run_ddl_visitor(visitorcallable, element, **kwargs)
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 2211, in _run_ddl_visitor
visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/sql/visitors.py", line 524, in traverse_single
return meth(obj, **kw)
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/sql/ddl.py", line 838, in visit_metadata
metadata.dispatch.before_create(
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/event/attr.py", line 334, in __call__
fn(*args, **kw)
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 875, in __call__
return getattr(self.target, self.name)(*arg, **kw)
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/base.py", line 2149, in _on_metadata_create
self.create(bind=bind, checkfirst=checkfirst)
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/base.py", line 2042, in create
bind._run_ddl_visitor(self.EnumGenerator, self, checkfirst=checkfirst)
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 2211, in _run_ddl_visitor
visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/sql/visitors.py", line 524, in traverse_single
return meth(obj, **kw)
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/base.py", line 2083, in visit_enum
self.connection.execute(CreateEnumType(enum))
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1380, in execute
return meth(self, multiparams, params, _EMPTY_EXECUTION_OPTS)
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/sql/ddl.py", line 80, in _execute_on_connection
return connection._execute_ddl(
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1472, in _execute_ddl
ret = self._execute_context(
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1943, in _execute_context
self._handle_dbapi_exception(
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 2124, in _handle_dbapi_exception
util.raise_(
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
raise exception
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1900, in _execute_context
self.dialect.do_execute(
File "/opt/liberaforms/venv/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.InsufficientPrivilege) permission denied for schema public
[SQL: CREATE TYPE roles_enum AS ENUM ('guest', 'editor', 'admin')]
(Background on this error at: https://sqlalche.me/e/14/f405)
```https://gitlab.com/liberaforms/liberaforms/-/issues/166Format Readme prettier2023-09-07T15:35:26ZPorrumentzioFormat Readme prettierReadme.md file would be more easily readable and beautiful with more images and colors. This is a good reference: https://github.com/searxng/searxng/blob/master/README.rstReadme.md file would be more easily readable and beautiful with more images and colors. This is a good reference: https://github.com/searxng/searxng/blob/master/README.rsthttps://gitlab.com/liberaforms/liberaforms/-/issues/164Feauture: Encrypt form data2023-11-08T00:44:00ZjoenepraatFeauture: Encrypt form dataIt would be great if form data can be encrypted in the database and that only the owner of the form can decrypt it. If I understand correctly, the data is now readable by the Postgresql database admin, so this would make it more usable i...It would be great if form data can be encrypted in the database and that only the owner of the form can decrypt it. If I understand correctly, the data is now readable by the Postgresql database admin, so this would make it more usable in situations that people don't know and shouldn't trust the server admin.
Maybe this is already considered for a reason and declined, but I can't find it.https://gitlab.com/liberaforms/liberaforms/-/issues/161Possibility to force language on standard form elements2023-10-08T10:46:51ZGerald KoglerPossibility to force language on standard form elementsWe offer the same form in different languages, but want the people to see the fixed form elements in a certain language and not in their browser language. Right now I see the following form elements in the browser language:
- _Required f...We offer the same form in different languages, but want the people to see the fixed form elements in a certain language and not in their browser language. Right now I see the following form elements in the browser language:
- _Required fields_
- _Send me confirmation by mail_
- _I agree_
- _Send_
- _Thank you!!_
Would be great to have a form parameter (like Public true/false) saying something like "Force language on standard form elements".https://gitlab.com/liberaforms/liberaforms/-/issues/160Feature request: Ability to limit multiple choices2023-10-08T09:54:18ZGerald KoglerFeature request: Ability to limit multiple choicesFor our forms we have long lists of options on multiple choices. Would be great to have to ability to limit the amount of checked options which are allowed on multiple choices types.For our forms we have long lists of options on multiple choices. Would be great to have to ability to limit the amount of checked options which are allowed on multiple choices types.https://gitlab.com/liberaforms/liberaforms/-/issues/157Replyable email confirmation message2023-11-08T00:26:34ZPorrumentzioReplyable email confirmation messageSending the message from a replyable address, instead of from a Non-reply one
This opens a direct communication channel between both parties.Sending the message from a replyable address, instead of from a Non-reply one
This opens a direct communication channel between both parties.https://gitlab.com/liberaforms/liberaforms/-/issues/156Send an email confirmation message or another depending on the answers receiv...2023-11-08T00:46:36ZPorrumentzioSend an email confirmation message or another depending on the answers received in the formA conditional relation between one or more answer an the email confirmation message to send.
Example:
Question 1
- A
- B
- C
If "Question 1" = A, send message X
If "Question 1" = B, send message Y
If "Question 1" = C, send message ZA conditional relation between one or more answer an the email confirmation message to send.
Example:
Question 1
- A
- B
- C
If "Question 1" = A, send message X
If "Question 1" = B, send message Y
If "Question 1" = C, send message Zhttps://gitlab.com/liberaforms/liberaforms/-/issues/155Editable email confirmation message2023-11-08T00:31:45ZPorrumentzioEditable email confirmation messageMake this message editable from the interface, for each single formMake this message editable from the interface, for each single formhttps://gitlab.com/liberaforms/liberaforms/-/issues/154Two answer element with big buttons2022-11-10T08:21:13ZPorrumentzioTwo answer element with big buttonsWhen having only two possible answers in a single-choice elements, the answer options could be displayed in big buttons, as seen in other form program:
![irudia](/uploads/7a1f56b47614139ea4dd10cfd2db9f68/irudia.png)When having only two possible answers in a single-choice elements, the answer options could be displayed in big buttons, as seen in other form program:
![irudia](/uploads/7a1f56b47614139ea4dd10cfd2db9f68/irudia.png)