Compare commits

..

1 Commits

Author SHA1 Message Date
missytake
570d75dcd4 www: point link to e2ee FAQ from staging to production 2023-11-16 09:47:16 +01:00
6 changed files with 52 additions and 63 deletions

View File

@@ -15,9 +15,6 @@ filtermail = "chatmaild.filtermail:main"
[tool.pytest.ini_options] [tool.pytest.ini_options]
addopts = "-v -ra --strict-markers" addopts = "-v -ra --strict-markers"
log_format = "%(asctime)s %(levelname)s %(message)s"
log_date_format = "%Y-%m-%d %H:%M:%S"
log_level = "INFO"
[tool.tox] [tool.tox]
legacy_tox_ini = """ legacy_tox_ini = """

View File

@@ -116,7 +116,7 @@ def handle_dovecot_request(msg, db, mail_domain):
class ThreadedUnixStreamServer(ThreadingMixIn, UnixStreamServer): class ThreadedUnixStreamServer(ThreadingMixIn, UnixStreamServer):
request_queue_size = 100 pass
def main(): def main():
@@ -128,20 +128,14 @@ def main():
class Handler(StreamRequestHandler): class Handler(StreamRequestHandler):
def handle(self): def handle(self):
try: while True:
while True: msg = self.rfile.readline().strip().decode()
msg = self.rfile.readline().strip().decode() if not msg:
if not msg: break
break res = handle_dovecot_request(msg, db, mail_domain)
res = handle_dovecot_request(msg, db, mail_domain) if res:
if res: self.wfile.write(res.encode("ascii"))
self.wfile.write(res.encode("ascii")) self.wfile.flush()
self.wfile.flush()
else:
logging.warn("request had no answer: %r", msg)
except Exception:
logging.exception("Exception in the handler")
raise
try: try:
os.unlink(socket) os.unlink(socket)

View File

@@ -149,7 +149,7 @@ class SendRateLimiter:
def main(): def main():
args = sys.argv[1:] args = sys.argv[1:]
assert len(args) == 1 assert len(args) == 1
logging.basicConfig(level=logging.WARN) logging.basicConfig(level=logging.INFO)
loop = asyncio.new_event_loop() loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop) asyncio.set_event_loop(loop)
task = asyncmain_beforequeue(port=int(args[0])) task = asyncmain_beforequeue(port=int(args[0]))

View File

@@ -32,7 +32,6 @@ submission inet n - y - - smtpd
-o smtpd_recipient_restrictions= -o smtpd_recipient_restrictions=
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING -o milter_macro_daemon_name=ORIGINATING
-o smtpd_client_connection_count_limit=1000
-o smtpd_proxy_filter=127.0.0.1:10080 -o smtpd_proxy_filter=127.0.0.1:10080
smtps inet n - y - - smtpd smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps -o syslog_name=postfix/smtps
@@ -47,7 +46,6 @@ smtps inet n - y - - smtpd
-o smtpd_sender_restrictions=$mua_sender_restrictions -o smtpd_sender_restrictions=$mua_sender_restrictions
-o smtpd_recipient_restrictions= -o smtpd_recipient_restrictions=
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o smtpd_client_connection_count_limit=1000
-o milter_macro_daemon_name=ORIGINATING -o milter_macro_daemon_name=ORIGINATING
-o smtpd_proxy_filter=127.0.0.1:10080 -o smtpd_proxy_filter=127.0.0.1:10080
#628 inet n - y - - qmqpd #628 inet n - y - - qmqpd

View File

@@ -1,5 +1,5 @@
import json import json
import sys
import pytest import pytest
import threading import threading
import queue import queue
@@ -60,31 +60,27 @@ def test_handle_dovecot_request(db):
assert userdata["password"].startswith("{SHA512-CRYPT}") assert userdata["password"].startswith("{SHA512-CRYPT}")
def test_100_concurrent_lookups_different_accounts(db, gencreds): def test_100_concurrent_lookups(db):
num_threads = 100 num = 100
req_per_thread = 5 dbs = [Database(db.path) for i in range(num)]
print(f"created {num} databases")
results = queue.Queue() results = queue.Queue()
def lookup(db): def lookup(db):
for i in range(req_per_thread): try:
addr, password = gencreds() lookup_passdb(db, "something@c1.testrun.org", "Pieg9aeToe3eghuthe5u")
try: except Exception:
lookup_passdb(db, addr, password) results.put(traceback.format_exc())
except Exception: else:
results.put(traceback.format_exc()) results.put(None)
else:
results.put(None)
threads = [] threads = [threading.Thread(target=lookup, args=(db,), daemon=True) for db in dbs]
for i in range(num_threads):
thread = threading.Thread(target=lookup, args=(db,), daemon=True)
threads.append(thread)
print(f"created {num_threads} threads, starting them and waiting for results") print(f"created {num} threads, starting them and waiting for results")
for thread in threads: for thread in threads:
thread.start() thread.start()
for i in range(num_threads * req_per_thread): for _ in dbs:
res = results.get() res = results.get()
if res is not None: if res is not None:
pytest.fail(f"concurrent lookup failed\n{res}") pytest.fail(f"concurrent lookup failed\n{res}")

View File

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