torrust / torrust-index

This repository serves as the backend for the Torrust Index project.
https://torrust.com
GNU Affero General Public License v3.0
54 stars 19 forks source link

CMS: Terms and demo #730

Closed josecelano closed 2 months ago

josecelano commented 2 months ago

Relates to: https://github.com/torrust/torrust-index-gui/issues/617

Context

We need to include legal information in the web app. The info will be provided by the API. Ideally, we should build a proper CMS, but since we don't want to postpone the version 3.0.0 release, we will use config values to allow users to easily customize those texts.

Temporary Solution

Add new config values for static content about terms (Usage Policies and Content Restrictions)

[website]
name = "Torrust"

# The app will run in demo mode if this section is provided. For now, that means to include a top banner with this warning.
[website.demo]
warning = """
⚠️ Please be aware: This demo resets all data weekly. Torrents not complying with our Usage Policies will be removed immediately without notice. We encourage the responsible use of this software in compliance with all legal requirements.
"""

[website.terms]

# The text for the checkbox in the upload torrent form.
[website.terms.upload]
content_upload_agreement = """
"I confirm that the content I am uploading is authorized, and I have read and agree to the [Usage Policies](./terms)."
"""

[website.terms.page]
title = "Usage Policies and Content Restrictions"
content = """
Our software is designed to support the distribution of legal, authorized content only. Users may only upload or share files that fall under the following categories:

- **Open-Source Licenses:** Content licensed under recognized open-source licenses, allowing for free distribution and modification.
- **Creative Commons Licenses:** Content released under Creative Commons licenses that permit sharing and distribution.
- **Public Domain:** Content that is free of copyright restrictions and available for public use.

**Prohibited Content:** Any content that infringes copyright, is subject to copyright protection, or is illegal under applicable laws is strictly prohibited. This includes but is not limited to copyrighted movies, music, software, books, and any other media.

**Enforcement:** We reserve the right to remove any content that does not comply with these policies without notice. We may also take additional steps, including reporting violations to the relevant authorities, if necessary.
"""

NOTES

We did something similar this for the casbin configuration https://github.com/torrust/torrust-index/issues/702

However, that is app configuration not content.

cc @da2ce7 @cgbosse @mario-nt

josecelano commented 2 months ago

Notice the [demo] section in the TOML file follows the same convention as the [registration]:

# ...
[demo]
# ...
[registration]
# ...

If the section is present, then it's enabled, meaning the demo mode is enabled when the configuration contains the [demo] section. In previous versions of the configuration for other sections we were using an explicit field enabled like this:

# ...
[demo]
enabled = true
# ...
[registration]
enabled = true
# ...

We decided to change it to not force the user to add that section when they don't need it. The final config file is shorter and clearer. However, I've just realized that it's not possible to enable the section by just using env vars. The configuration is loaded from the TOML file and merged with env vars. Env vars only allow overriding final values. It's impossible to add a new section when it's not present in the initial configuration. That could be a problem in the containerized environment where you maybe want to use only env vars. Anyway, since we allow injecting the whole TOML file as an env var, that env var can be used to define these empty sections to enable them.

cc @da2ce7