mirror of
https://github.com/chatmail/relay.git
synced 2026-05-13 01:24:36 +00:00
Compare commits
2 Commits
link2xt/no
...
default-pa
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5a6f036106 | ||
|
|
7d55d98620 |
@@ -157,6 +157,6 @@ While this file is present, account creation will be blocked.
|
|||||||
[acmetool](https://hlandau.github.io/acmetool/) listens on port 80 (http).
|
[acmetool](https://hlandau.github.io/acmetool/) listens on port 80 (http).
|
||||||
|
|
||||||
Delta Chat apps will, however, discover all ports and configurations
|
Delta Chat apps will, however, discover all ports and configurations
|
||||||
automatically by reading the [autoconfig XML file](https://www.ietf.org/archive/id/draft-bucksch-autoconfig-00.html) from the chatmail service.
|
automatically by reading the [autoconfig XML file](https://web.archive.org/web/20210624004729/https://developer.mozilla.org/en-US/docs/Mozilla/Thunderbird/Autoconfiguration) from the chatmail service.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ def lookup_passdb(db, config: Config, user, cleartext_password):
|
|||||||
VALUES (?, ?, ?)"""
|
VALUES (?, ?, ?)"""
|
||||||
conn.execute(q, (user, encrypted_password, int(time.time())))
|
conn.execute(q, (user, encrypted_password, int(time.time())))
|
||||||
return dict(
|
return dict(
|
||||||
home=f"/home/vmail/mail/{config.mail_domain}/{user}",
|
home=f"/home/vmail/{user}",
|
||||||
uid="vmail",
|
uid="vmail",
|
||||||
gid="vmail",
|
gid="vmail",
|
||||||
password=encrypted_password,
|
password=encrypted_password,
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ password_min_length = 9
|
|||||||
passthrough_senders =
|
passthrough_senders =
|
||||||
|
|
||||||
# list of e-mail recipients for which to accept outbound un-encrypted mails
|
# list of e-mail recipients for which to accept outbound un-encrypted mails
|
||||||
passthrough_recipients =
|
passthrough_recipients = xstore@testrun.org groupsbot@hispanilandia.net
|
||||||
|
|
||||||
#
|
#
|
||||||
# Deployment Details
|
# Deployment Details
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
[privacy]
|
[privacy]
|
||||||
|
|
||||||
passthrough_recipients = privacy@testrun.org
|
passthrough_recipients = privacy@testrun.org xstore@testrun.org groupsbot@hispanilandia.net
|
||||||
|
|
||||||
privacy_postal =
|
privacy_postal =
|
||||||
Merlinux GmbH, Represented by the managing director H. Krekel,
|
Merlinux GmbH, Represented by the managing director H. Krekel,
|
||||||
|
|||||||
@@ -28,5 +28,5 @@ def test_read_config_testrun(make_config):
|
|||||||
assert config.username_min_length == 9
|
assert config.username_min_length == 9
|
||||||
assert config.username_max_length == 9
|
assert config.username_max_length == 9
|
||||||
assert config.password_min_length == 9
|
assert config.password_min_length == 9
|
||||||
assert config.passthrough_recipients == ["privacy@testrun.org"]
|
assert "privacy@testrun.org" in config.passthrough_recipients
|
||||||
assert config.passthrough_senders == []
|
assert config.passthrough_senders == []
|
||||||
|
|||||||
@@ -61,10 +61,7 @@ def test_handle_dovecot_request(db, example_config):
|
|||||||
assert res
|
assert res
|
||||||
assert res[0] == "O" and res.endswith("\n")
|
assert res[0] == "O" and res.endswith("\n")
|
||||||
userdata = json.loads(res[1:].strip())
|
userdata = json.loads(res[1:].strip())
|
||||||
assert (
|
assert userdata["home"] == "/home/vmail/some42123@chat.example.org"
|
||||||
userdata["home"]
|
|
||||||
== "/home/vmail/mail/chat.example.org/some42123@chat.example.org"
|
|
||||||
)
|
|
||||||
assert userdata["uid"] == userdata["gid"] == "vmail"
|
assert userdata["uid"] == userdata["gid"] == "vmail"
|
||||||
assert userdata["password"].startswith("{SHA512-CRYPT}")
|
assert userdata["password"].startswith("{SHA512-CRYPT}")
|
||||||
|
|
||||||
|
|||||||
@@ -254,15 +254,6 @@ def _configure_postfix(config: Config, debug: bool = False) -> bool:
|
|||||||
)
|
)
|
||||||
need_restart |= master_config.changed
|
need_restart |= master_config.changed
|
||||||
|
|
||||||
header_cleanup = files.put(
|
|
||||||
src=importlib.resources.files(__package__).joinpath("postfix/submission_header_cleanup"),
|
|
||||||
dest="/etc/postfix/submission_header_cleanup",
|
|
||||||
user="root",
|
|
||||||
group="root",
|
|
||||||
mode="644",
|
|
||||||
)
|
|
||||||
need_restart |= header_cleanup.changed
|
|
||||||
|
|
||||||
return need_restart
|
return need_restart
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -48,5 +48,3 @@ virtual_mailbox_domains = {{ config.mail_domain }}
|
|||||||
|
|
||||||
smtpd_milters = unix:opendkim/opendkim.sock
|
smtpd_milters = unix:opendkim/opendkim.sock
|
||||||
non_smtpd_milters = $smtpd_milters
|
non_smtpd_milters = $smtpd_milters
|
||||||
|
|
||||||
header_checks = regexp:/etc/postfix/submission_header_cleanup
|
|
||||||
|
|||||||
@@ -14,6 +14,10 @@ smtp inet n - y - - smtpd -v
|
|||||||
{% else %}
|
{% else %}
|
||||||
smtp inet n - y - - smtpd
|
smtp inet n - y - - smtpd
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
#smtp inet n - y - 1 postscreen
|
||||||
|
#smtpd pass - - y - - smtpd
|
||||||
|
#dnsblog unix - - y - 0 dnsblog
|
||||||
|
#tlsproxy unix - - y - 0 tlsproxy
|
||||||
submission inet n - y - - smtpd
|
submission inet n - y - - smtpd
|
||||||
-o syslog_name=postfix/submission
|
-o syslog_name=postfix/submission
|
||||||
-o smtpd_tls_security_level=encrypt
|
-o smtpd_tls_security_level=encrypt
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
/^Received:/ IGNORE
|
|
||||||
/^X-Originating-IP:/ IGNORE
|
|
||||||
/^X-Mailer:/ IGNORE
|
|
||||||
/^User-Agent:/ IGNORE
|
|
||||||
@@ -1,10 +1,7 @@
|
|||||||
import time
|
import time
|
||||||
import re
|
import re
|
||||||
import random
|
import random
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import requests
|
|
||||||
import ipaddress
|
|
||||||
|
|
||||||
|
|
||||||
class TestEndToEndDeltaChat:
|
class TestEndToEndDeltaChat:
|
||||||
@@ -122,17 +119,3 @@ class TestEndToEndDeltaChat:
|
|||||||
for msg in msgs:
|
for msg in msgs:
|
||||||
assert "error" not in m.get_message_info()
|
assert "error" not in m.get_message_info()
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
|
|
||||||
def test_hide_senders_ip_address(cmfactory):
|
|
||||||
public_ip = requests.get("http://icanhazip.com").content.decode().strip()
|
|
||||||
assert ipaddress.ip_address(public_ip)
|
|
||||||
|
|
||||||
user1, user2 = cmfactory.get_online_accounts(2)
|
|
||||||
chat = cmfactory.get_accepted_chat(user1, user2)
|
|
||||||
|
|
||||||
chat.send_text("testing submission header cleanup")
|
|
||||||
user2.wait_next_incoming_message()
|
|
||||||
user2.direct_imap.select_folder("Inbox")
|
|
||||||
msg = user2.direct_imap.get_all_messages()[0]
|
|
||||||
assert public_ip not in msg.obj.as_string()
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
## More information
|
## More information
|
||||||
|
|
||||||
{{ config.mail_domain }} provides a low-maintenance, resource efficient and
|
`nine.testrun.org` provides a low-maintenance, resource efficient and
|
||||||
interoperable e-mail service for everyone. What's behind a `chatmail` is
|
interoperable e-mail service for everyone. What's behind a `chatmail` is
|
||||||
effectively a normal e-mail address just like any other but optimized
|
effectively a normal e-mail address just like any other but optimized
|
||||||
for the usage in chats, especially DeltaChat.
|
for the usage in chats, especially DeltaChat.
|
||||||
|
|||||||
Reference in New Issue
Block a user