Compare commits

..

1 Commits

Author SHA1 Message Date
missytake ccd58da8e9 fix: show privacy email or invite as link
fix #635
2026-06-17 11:39:07 +02:00
7 changed files with 15 additions and 23 deletions
+1 -1
View File
@@ -29,7 +29,7 @@ jobs:
ref: ${{ github.event.pull_request.head.sha }} ref: ${{ github.event.pull_request.head.sha }}
persist-credentials: false persist-credentials: false
- name: download filtermail - name: download filtermail
run: curl -L https://github.com/chatmail/filtermail/releases/download/v0.7.3/filtermail-x86_64 -o /usr/local/bin/filtermail && chmod +x /usr/local/bin/filtermail run: curl -L https://github.com/chatmail/filtermail/releases/download/v0.7.1/filtermail-x86_64 -o /usr/local/bin/filtermail && chmod +x /usr/local/bin/filtermail
- name: run chatmaild tests - name: run chatmaild tests
working-directory: chatmaild working-directory: chatmaild
run: pipx run tox run: pipx run tox
+1 -6
View File
@@ -8,12 +8,7 @@ Chatmail relay servers are interoperable Mail Transport Agents (MTAs) designed f
- **Instant/Realtime:** sub-second message delivery, realtime P2P - **Instant/Realtime:** sub-second message delivery, realtime P2P
streaming, privacy-preserving Push Notifications for Apple, Google, and Huawei; streaming, privacy-preserving Push Notifications for Apple, Google, and Huawei;
- **Security Enforcement**: Only connections with strict TLS are accepted; - **Security Enforcement**: only strict TLS, DKIM and OpenPGP with minimized metadata accepted
all messages must be correctly signed with DKIM and OpenPGP-encrypted with minimized metadata.
There are experimental exceptions for no-DNS relays,
which are allowed use self-signed TLS certificates
and which do not need to DKIM-sign their messages.
Unencrypted messages are allowed in neither case.
- **Reliable Federation and Decentralization:** No spam or IP reputation checks, federating - **Reliable Federation and Decentralization:** No spam or IP reputation checks, federating
depends on established IETF standards and protocols. depends on established IETF standards and protocols.
+1 -1
View File
@@ -71,7 +71,7 @@ class Config:
self.iroh_relay = iroh_relay.strip() self.iroh_relay = iroh_relay.strip()
self.enable_iroh_relay = False self.enable_iroh_relay = False
self.privacy_postal = params.pop("privacy_postal", None) self.privacy_postal = params.pop("privacy_postal", None)
self.privacy_mail = params.pop("privacy_mail", None) self.privacy_mail = params.pop("admin_contact", params.pop("privacy_mail", None))
self.privacy_pdo = params.pop("privacy_pdo", None) self.privacy_pdo = params.pop("privacy_pdo", None)
self.privacy_supervisor = params.pop("privacy_supervisor", None) self.privacy_supervisor = params.pop("privacy_supervisor", None)
+2 -2
View File
@@ -109,8 +109,8 @@ mail_domain = {mail_domain}
# postal address of privacy contact # postal address of privacy contact
privacy_postal = privacy_postal =
# email address of privacy contact # email address or invite link of admin contact
privacy_mail = admin_contact =
# postal address of the privacy data officer # postal address of the privacy data officer
privacy_pdo = privacy_pdo =
+3 -3
View File
@@ -20,10 +20,10 @@ class FiltermailDeployer(Deployer):
return return
arch = host.get_fact(facts.server.Arch) arch = host.get_fact(facts.server.Arch)
url = f"https://github.com/chatmail/filtermail/releases/download/v0.7.3/filtermail-{arch}" url = f"https://github.com/chatmail/filtermail/releases/download/v0.7.1/filtermail-{arch}"
sha256sum = { sha256sum = {
"x86_64": "bd4be15b27199909a44499cacf23e634249219f8cd715e5ce707de7eb711d7d9", "x86_64": "fc2d8141166f8561b9711fb68c5327fc9421f814c46dc69671a4605a95b175c0",
"aarch64": "a13038b5ca421c3b2c4c4aa50dbc3c8c4de6f9aaa877a05c0ec978b131550c6b", "aarch64": "37e52c5ddb373ef29b5ead89658407c53f48d10ce055a2dbd9c606fa1ebd5f7f",
}[arch] }[arch]
self.download_executable(url, self.bin_path, sha256sum) self.download_executable(url, self.bin_path, sha256sum)
+6 -9
View File
@@ -94,15 +94,12 @@ def _build_webpages(src_dir, build_dir, config):
for path in src_dir.iterdir(): for path in src_dir.iterdir():
if path.suffix == ".md": if path.suffix == ".md":
render_vars, content = prepare_template(path) render_vars, content = prepare_template(path)
render_vars["username_min_length"] = int_to_english( if config.privacy_mail.startswith("https://"):
config.username_min_length render_vars["admin_contact"] = f"<a href='{config.privacy_mail}'>{config.privacy_mail}</a>"
) elif "@" in config.privacy_mail:
render_vars["username_max_length"] = int_to_english( render_vars["admin_contact"] = f"<a href='mailto:{config.privacy_mail}'>{config.privacy_mail}</a>"
config.username_max_length else:
) render_vars["admin_contact"] = config.privacy_mail
render_vars["password_min_length"] = int_to_english(
config.password_min_length
)
target = build_dir.joinpath(path.stem + ".html") target = build_dir.joinpath(path.stem + ".html")
# recursive jinja2 rendering # recursive jinja2 rendering
+1 -1
View File
@@ -48,7 +48,7 @@ Responsible for the processing of your personal data is:
{{ config.privacy_postal }} {{ config.privacy_postal }}
``` ```
E-mail: {{ config.privacy_mail }} E-mail: {{ admin_contact }}
We have appointed a data protection officer: We have appointed a data protection officer: