Add config for admin contact url

This commit is contained in:
rubenwardy 2024-03-04 18:05:16 +00:00
parent ba6b7d6dcf
commit 2867856d40
12 changed files with 39 additions and 14 deletions

@ -18,9 +18,10 @@ import datetime
import os import os
import redis import redis
from flask import redirect, url_for, render_template, flash, request, Flask, send_from_directory, make_response from flask import redirect, url_for, render_template, flash, request, Flask, send_from_directory, make_response, render_template_string
from flask_babel import Babel, gettext from flask_babel import Babel, gettext
from flask_flatpages import FlatPages from flask_flatpages import FlatPages
from flask_flatpages.utils import pygmented_markdown
from flask_github import GitHub from flask_github import GitHub
from flask_gravatar import Gravatar from flask_gravatar import Gravatar
from flask_login import logout_user, current_user, LoginManager from flask_login import logout_user, current_user, LoginManager
@ -30,10 +31,20 @@ from flask_wtf.csrf import CSRFProtect
from app.markdown import init_markdown, MARKDOWN_EXTENSIONS, MARKDOWN_EXTENSION_CONFIG from app.markdown import init_markdown, MARKDOWN_EXTENSIONS, MARKDOWN_EXTENSION_CONFIG
app = Flask(__name__, static_folder="public/static") app = Flask(__name__, static_folder="public/static")
def my_flatpage_renderer(text):
# Render with jinja first
prerendered_body = render_template_string(text)
return pygmented_markdown(prerendered_body)
app.config["FLATPAGES_ROOT"] = "flatpages" app.config["FLATPAGES_ROOT"] = "flatpages"
app.config["FLATPAGES_EXTENSION"] = ".md" app.config["FLATPAGES_EXTENSION"] = ".md"
app.config["FLATPAGES_MARKDOWN_EXTENSIONS"] = MARKDOWN_EXTENSIONS app.config["FLATPAGES_MARKDOWN_EXTENSIONS"] = MARKDOWN_EXTENSIONS
app.config["FLATPAGES_EXTENSION_CONFIG"] = MARKDOWN_EXTENSION_CONFIG app.config["FLATPAGES_EXTENSION_CONFIG"] = MARKDOWN_EXTENSION_CONFIG
app.config["FLATPAGES_HTML_RENDERER"] = my_flatpage_renderer
app.config["BABEL_TRANSLATION_DIRECTORIES"] = "../translations" app.config["BABEL_TRANSLATION_DIRECTORIES"] = "../translations"
app.config["LANGUAGES"] = { app.config["LANGUAGES"] = {
"en": "English", "en": "English",
@ -55,6 +66,9 @@ app.config["LANGUAGES"] = {
app.config.from_pyfile(os.environ["FLASK_CONFIG"]) app.config.from_pyfile(os.environ["FLASK_CONFIG"])
if not app.config["ADMIN_CONTACT_URL"]:
raise Exception("Missing config property: ADMIN_CONTACT_URL")
redis_client = redis.Redis.from_url(app.config["REDIS_URL"]) redis_client = redis.Redis.from_url(app.config["REDIS_URL"])
github = GitHub(app) github = GitHub(app)

@ -12,8 +12,10 @@ ContentDB is open source software, licensed under AGPLv3.0.
<a href="https://github.com/minetest/contentdb/" class="btn btn-primary me-1">Source code</a> <a href="https://github.com/minetest/contentdb/" class="btn btn-primary me-1">Source code</a>
<a href="https://github.com/minetest/contentdb/issues/" class="btn btn-secondary me-1">Issue tracker</a> <a href="https://github.com/minetest/contentdb/issues/" class="btn btn-secondary me-1">Issue tracker</a>
<a href="https://rubenwardy.com/contact/" class="btn btn-secondary me-1">Contact admin</a> <a href="{{ admin_contact_url }}" class="btn btn-secondary me-1">Contact admin</a>
<a href="https://monitor.rubenwardy.com/d/3ELzFy3Wz/contentdb" class="btn btn-secondary">Stats / monitoring</a> {% if monitoring_url -%}
<a href="{{ monitoring_url }}" class="btn btn-secondary">Stats / monitoring</a>
{%- endif %}
## Why was ContentDB created? ## Why was ContentDB created?

@ -11,4 +11,4 @@ We take copyright violation and other offenses very seriously.
## Other ## Other
<a href="https://rubenwardy.com/contact/" class="btn btn-primary">Contact the admin</a> <a href="{{ admin_contact_url }}" class="btn btn-primary">Contact the admin</a>

@ -135,7 +135,8 @@ ContentDB editors will check packages to make sure the package page's license ma
inside the package download, but do not investigate each piece of media or line of code. inside the package download, but do not investigate each piece of media or line of code.
If a copyright violation is reported to us, we will unlist the package and contact the author/maintainers. If a copyright violation is reported to us, we will unlist the package and contact the author/maintainers.
Once the problem has been fixed, the package can be restored. Once the problem has been fixed, the package can be restored. Repeated copyright infringement may lead to
permanent bans.
## Where can I get help? ## Where can I get help?

@ -54,5 +54,4 @@ A simplified process for reviewing a package is as follows:
usually incorrect. usually incorrect.
4. check source, etc links to make sure they work and are correct. 4. check source, etc links to make sure they work and are correct.
5. verify that the package has license file that matches what is on the contentdb fields 5. verify that the package has license file that matches what is on the contentdb fields
6. verify that all assets and code are licensed correctly 6. if the above steps pass, approve the package, else request changes needed from the author
7. if the above steps pass, approve the package, else request changes needed from the author

@ -34,7 +34,7 @@ then you can just set a new email in
[Settings > Email and Notifications](/user/settings/email/). [Settings > Email and Notifications](/user/settings/email/).
If you have previously unsubscribed this email, then ContentDB is completely prevented from sending emails to that If you have previously unsubscribed this email, then ContentDB is completely prevented from sending emails to that
address. You'll need to use a different email address, or [contact rubenwardy](https://rubenwardy.com/contact/) to address. You'll need to use a different email address, or [contact the admin]({{ admin_contact_url }}) to
remove your email from the blacklist. remove your email from the blacklist.

@ -9,11 +9,13 @@ and modern alerting approach".
Prometheus Metrics can be accessed at [/metrics](/metrics), or you can view them Prometheus Metrics can be accessed at [/metrics](/metrics), or you can view them
on the Grafana instance below. on the Grafana instance below.
{% if monitoring_url %}
<p> <p>
<a class="btn btn-primary" href="https://monitor.rubenwardy.com/d/3ELzFy3Wz/contentdb"> <a class="btn btn-primary" href="{{ monitoring_url }}">
View ContentDB on Grafana View ContentDB on Grafana
</a> </a>
</p> </p>
{% endif %}
## Metrics ## Metrics

@ -34,7 +34,9 @@ def inject_misc():
hide_nonfree = False hide_nonfree = False
if has_request_context(): if has_request_context():
hide_nonfree = request.cookies.get("hide_nonfree") == "1" hide_nonfree = request.cookies.get("hide_nonfree") == "1"
return dict(debug=app.debug, hide_nonfree=hide_nonfree, locale=get_locale()) return dict(debug=app.debug, hide_nonfree=hide_nonfree, locale=get_locale(),
admin_contact_url=app.config["ADMIN_CONTACT_URL"],
monitoring_url=app.config.get("MONITORING_URL"))
@app.context_processor @app.context_processor

@ -6,7 +6,7 @@
</p> </p>
<p> <p>
{{ _("You can use GitHub to log in if it is associated with your account.") }} {{ _("You can use GitHub to log in if it is associated with your account.") }}
{{ _("Otherwise, you may need to contact rubenwardy for help.") }} {{ _("Otherwise, you may need to contact the admin for help.") }}
</p> </p>
<p> <p>
{{ _("If you weren't expecting to receive this email, then you can safely ignore it.") }} {{ _("If you weren't expecting to receive this email, then you can safely ignore it.") }}

@ -13,11 +13,11 @@
<p> <p>
{{ _("Due to spam, we no longer accept reports from anonymous users on this form.") }} {{ _("Due to spam, we no longer accept reports from anonymous users on this form.") }}
{{ _("Please sign in or contact the admin in another way") }} {{ _("Please sign in or contact the admin using the link below.") }}
</p> </p>
<p> <p>
<a href="{{ url_for('users.login') }}" class="btn btn-primary me-2">Login</a> <a href="{{ url_for('users.login') }}" class="btn btn-primary me-2">Login</a>
<a href="https://rubenwardy.com/contact/" class="btn btn-secondary">Contact the admin</a> <a href="{{ admin_contact_url }}" class="btn btn-secondary">Contact the admin</a>
</p> </p>
{% else %} {% else %}

@ -35,3 +35,6 @@ TEMPLATES_AUTO_RELOAD = False
LOG_SQL = False LOG_SQL = False
BLOCKED_DOMAINS = [] BLOCKED_DOMAINS = []
ADMIN_CONTACT_URL = ""
MONITORING_URL = None

@ -29,3 +29,5 @@ TEMPLATES_AUTO_RELOAD = True
LANGUAGES = { LANGUAGES = {
'en': 'English', 'en': 'English',
} }
ADMIN_CONTACT_URL = "https://example.org"