Compare commits

...

8 Commits

Author SHA1 Message Date
holger krekel
d547435d6a make headlines as big as normal text 2023-11-16 11:46:26 +01:00
missytake
6c12849599 Changed typo to sans-serif, feel free to revert 2023-11-16 10:02:09 +01:00
holger krekel
d82d57b2b2 reduce retro-ness of design after @hocuri's comment :) 2023-11-15 21:36:31 +01:00
holger krekel
6c3ec903c2 Update www/nine.testrun.org/index.html
Co-authored-by: Hocuri <hocuri@gmx.de>
2023-11-15 20:48:30 +01:00
holger krekel
7d9b81863f refining the entry point, more info, more directly speaking to DC users
(we don't want to get arbitrary users to report issues)
2023-11-15 20:48:30 +01:00
missytake
af90d0a7de rename doveauth-dictproxy to doveauth 2023-11-15 15:00:27 +01:00
link2xt
322bc9a3aa Set critical flag on generated CAA record
This does not really matter as Let's Encrypt
supports current CAA `issue` syntax,
but may be useful if more records are added and this flag is copy-pasted.

For reference: <https://www.rfc-editor.org/rfc/rfc8659#name-critical-flag>
2023-11-13 15:12:32 +00:00
link2xt
e4009854dc Add NOTIFY capability
Delta Chat does not use it now,
but should: <https://github.com/deltachat/deltachat-core-rust/issues/4983>
Having no capability will confuse whoever develops it.
2023-11-12 20:41:29 +01:00
9 changed files with 57 additions and 32 deletions

View File

@@ -81,10 +81,11 @@ comprised of minimal setups of
as well as two custom services that are integrated with these two: as well as two custom services that are integrated with these two:
- `chatmaild/src/chatmaild/dictproxy.py` implements - `chatmaild/src/chatmaild/doveauth.py` implements
create-on-login account creation semantics and is used create-on-login account creation semantics and is used
by Dovecot during login authentication and by Postfix by Dovecot during login authentication and by Postfix
which in turn uses Dovecot SASL to authenticate users which in turn uses [Dovecot SASL](https://doc.dovecot.org/configuration_manual/authentication/dict/#complete-example-for-authenticating-via-a-unix-socket)
to authenticate users
to send mails for them. to send mails for them.
- `chatmaild/src/chatmaild/filtermail.py` prevents - `chatmaild/src/chatmaild/filtermail.py` prevents

View File

@@ -10,7 +10,7 @@ dependencies = [
] ]
[project.scripts] [project.scripts]
doveauth-dictproxy = "chatmaild.dictproxy:main" doveauth = "chatmaild.doveauth:main"
filtermail = "chatmaild.filtermail:main" filtermail = "chatmaild.filtermail:main"
[tool.pytest.ini_options] [tool.pytest.ini_options]

View File

@@ -2,7 +2,7 @@
Description=Dict authentication proxy for dovecot Description=Dict authentication proxy for dovecot
[Service] [Service]
ExecStart=/usr/local/bin/doveauth-dictproxy /run/dovecot/doveauth.socket vmail /home/vmail/passdb.sqlite ExecStart=/usr/local/bin/doveauth /run/dovecot/doveauth.socket vmail /home/vmail/passdb.sqlite
Restart=always Restart=always
RestartSec=30 RestartSec=30

View File

@@ -7,6 +7,7 @@ from pathlib import Path
from pyinfra import host from pyinfra import host
from pyinfra.operations import apt, files, server, systemd from pyinfra.operations import apt, files, server, systemd
from pyinfra.facts.files import File from pyinfra.facts.files import File
from pyinfra.facts.systemd import SystemdEnabled
from .acmetool import deploy_acmetool from .acmetool import deploy_acmetool
@@ -34,8 +35,17 @@ def _install_chatmaild() -> None:
commands=[f"pip install --break-system-packages {remote_path}"], commands=[f"pip install --break-system-packages {remote_path}"],
) )
# disable legacy doveauth-dictproxy.service
if host.get_fact(SystemdEnabled).get("doveauth-dictproxy.service"):
systemd.service(
name="Disable legacy doveauth-dictproxy.service",
service="doveauth-dictproxy.service",
running=False,
enabled=False,
)
for fn in ( for fn in (
"doveauth-dictproxy", "doveauth",
"filtermail", "filtermail",
): ):
files.put( files.put(

View File

@@ -19,7 +19,7 @@ mail_plugins = quota
# these are the capabilities Delta Chat cares about actually # these are the capabilities Delta Chat cares about actually
# so let's keep the network overhead per login small # so let's keep the network overhead per login small
# https://github.com/deltachat/deltachat-core-rust/blob/master/src/imap/capabilities.rs # https://github.com/deltachat/deltachat-core-rust/blob/master/src/imap/capabilities.rs
imap_capability = IMAP4rev1 IDLE MOVE QUOTA CONDSTORE imap_capability = IMAP4rev1 IDLE MOVE QUOTA CONDSTORE NOTIFY
# Authentication for system users. # Authentication for system users.

View File

@@ -15,6 +15,6 @@ _submission._tcp.$CHATMAIL_DOMAIN. SRV 0 1 587 $CHATMAIL_DOMAIN.
_submissions._tcp.$CHATMAIL_DOMAIN. SRV 0 1 465 $CHATMAIL_DOMAIN. _submissions._tcp.$CHATMAIL_DOMAIN. SRV 0 1 465 $CHATMAIL_DOMAIN.
_imap._tcp.$CHATMAIL_DOMAIN. SRV 0 1 143 $CHATMAIL_DOMAIN. _imap._tcp.$CHATMAIL_DOMAIN. SRV 0 1 143 $CHATMAIL_DOMAIN.
_imaps._tcp.$CHATMAIL_DOMAIN. SRV 0 1 993 $CHATMAIL_DOMAIN. _imaps._tcp.$CHATMAIL_DOMAIN. SRV 0 1 993 $CHATMAIL_DOMAIN.
$CHATMAIL_DOMAIN. IN CAA 0 issue "letsencrypt.org; accounturi=$ACME_ACCOUNT_URL" $CHATMAIL_DOMAIN. IN CAA 128 issue "letsencrypt.org; accounturi=$ACME_ACCOUNT_URL"
EOF EOF
$SSH opendkim-genzone -F | sed 's/^;.*$//;/^$/d' $SSH opendkim-genzone -F | sed 's/^;.*$//;/^$/d'

View File

@@ -5,8 +5,8 @@ import threading
import queue import queue
import traceback import traceback
import chatmaild.dictproxy import chatmaild.doveauth
from chatmaild.dictproxy import get_user_data, lookup_passdb, handle_dovecot_request from chatmaild.doveauth import get_user_data, lookup_passdb, handle_dovecot_request
from chatmaild.database import Database, DBError from chatmaild.database import Database, DBError
@@ -30,7 +30,7 @@ def test_dont_overwrite_password_on_wrong_login(db):
def test_nocreate_file(db, monkeypatch, tmpdir): def test_nocreate_file(db, monkeypatch, tmpdir):
p = tmpdir.join("nocreate") p = tmpdir.join("nocreate")
p.write("") p.write("")
monkeypatch.setattr(chatmaild.dictproxy, "NOCREATE_FILE", str(p)) monkeypatch.setattr(chatmaild.doveauth, "NOCREATE_FILE", str(p))
lookup_passdb(db, "newuser1@something.org", "zequ0Aimuchoodaechik") lookup_passdb(db, "newuser1@something.org", "zequ0Aimuchoodaechik")
assert not get_user_data(db, "newuser1@something.org") assert not get_user_data(db, "newuser1@something.org")

View File

@@ -20,15 +20,14 @@
box-sizing: border-box; box-sizing: border-box;
padding: 9px; padding: 9px;
font-size: 18px; font-size: 18px;
font-family: "Courier New", monospace; font-family: "Swansea", "Helvetica", sans-serif;
color: white; color: black;
background-position: left top; }
background-image: url(collage-bg.png); a {
background-repeat: no-repeat; color: black;
background-size: 100% 100%;
} }
h1, h2, h3 { h1, h2, h3 {
font-size: 16px; font-size: 18px;
font-weight: bold; font-weight: bold;
} }
</style> </style>
@@ -37,24 +36,39 @@
<div class="wrapper"> <div class="wrapper">
<img class="section" src="collage-top.png" /> <img class="section" src="collage-top.png" />
<div class="section text"> <div class="section text">
<h1>welcome to nine.testrun.org</h1> <h1>Dear Delta Chat users and newcomers,</h1>
<p> <p>
to get an account, welcome to the first public "chat-mail instance",
invent a word with <i>exactly</i> nine characters a small and lean e-mail provider for smooth chatting.
and append @nine.testrun.org to it. Install Delta Chat or add an account:
eg. <b>hellofits@nine.testrun.org</b> <ul>
<li>Tap "LOG INTO YOUR E-MAIL ACCOUNT".</li>
<li>Address: invent a word with <i>exactly</i> nine characters
and append @nine.testrun.org to it.</li>
<li>Password: invent at least 10 characters. The first login sets your password.</li>
</ul>
If the e-mail address is not yet taken, you'll get that account.
</p> </p>
<p> <p>
if the email address is not yet taken, you'll get that account. <img class="section" src="collage-down.png" />
the first login sets your password.
that's it. <h2>What's behind it, how does it operate?</h2>
</p> <p>nine.testrun.org is run
</div> by a small group of devs and sysadmins, reachable via root@.
<img class="section" src="collage-down.png" /> They want to keep this instance running at least until end 2024.
<div class="section text"> Current limits:
<h1>faq</h1> <ul>
<p><i>why are other email providers 1000 times more complicated?</i></p> <li>Un-encrypted mails can not leave the chat-mail instance.</li>
<p>because they want to for $reasons</p> <li>Use <a href="https://delta.chat/en/help#howtoe2ee">
guaranteed end-to-end encryption via QR code scans</a>
to setup contact with users outside of the chat-mail instance.
</li>
<li>You may send up to 60 messages per minute.</li>
<li>Messages are unconditionally removed 40 days after arrival.</li>
<li>Max storage per user is 100MB.</li>
</ul>
<h2>Why are other email providers 1000 times more complicated?</h2>
<p>¯\_(ツ)_/¯</p>
</div> </div>
</div> </div>
</body> </body>