<feed xmlns='http://www.w3.org/2005/Atom'>
<title>coinos-server.git/routes/email.ts, branch master</title>
<subtitle>coinos server — legacy coinos.io backend (Lightning, on-chain, Liquid)</subtitle>
<id>https://git.coinos.io/coinos-server.git/atom?h=master</id>
<link rel='self' href='https://git.coinos.io/coinos-server.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/'/>
<updated>2026-10-07T04:12:19Z</updated>
<entry>
<title>email: escape support form HTML and enforce recaptcha v3 score</title>
<updated>2026-10-07T04:12:19Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-07T04:12:19Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=fb7c0086bbfcf17fbaba1ea83a1e3faf2849315b'/>
<id>urn:sha1:fb7c0086bbfcf17fbaba1ea83a1e3faf2849315b</id>
<content type='text'>
Escape the message body, stop accepting a client-supplied subject, strip
control characters from header values, require the expected action and a
minimum score from siteverify, and drop the adminpass captcha bypass.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>auth: fail closed on adminpass, scrub sample secrets (S3)</title>
<updated>2026-08-08T06:29:25Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-08-08T05:59:21Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=d513ab75131bfaa16b1f0820d0fb18ad9e7f6ab1'/>
<id>urn:sha1:d513ab75131bfaa16b1f0820d0fb18ad9e7f6ab1</id>
<content type='text'>
The master-password path (isAdmin = password === config.adminpass) logs
in as any user, skipping password, 2FA, and captcha. Worse, when
adminpass is unset an omitted password field made undefined === undefined
true, authenticating as anyone. Require both the configured value and the
supplied password to be non-empty and match exactly, across every
adminpass comparison (login, recaptcha bypass, support email, freeze).

Also scrub config.ts.sample: the sample shipped a working-looking JWT
secret, two server nsec keys, and adminpass "pwa". Replace with
fail-closed placeholders and regenerate instructions. Rotate any
deployment that ever shipped the sample values.

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>remove logs</title>
<updated>2026-03-17T06:53:13Z</updated>
<author>
<name>Adam Soltys</name>
<email>asoltys@gmail.com</email>
</author>
<published>2026-03-17T06:53:13Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=92e7d1564deb25f9e58e3b268c077018c4b2c4c4'/>
<id>urn:sha1:92e7d1564deb25f9e58e3b268c077018c4b2c4c4</id>
<content type='text'>
</content>
</entry>
<entry>
<title>biome lint</title>
<updated>2024-10-31T16:34:42Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2024-10-31T16:29:04Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=aa4cd39c943b67169def224e224bd07b815b70ec'/>
<id>urn:sha1:aa4cd39c943b67169def224e224bd07b815b70ec</id>
<content type='text'>
</content>
</entry>
<entry>
<title>typescript</title>
<updated>2024-08-27T04:17:43Z</updated>
<author>
<name>Adam Soltys</name>
<email>asoltys@gmail.com</email>
</author>
<published>2024-08-27T04:17:43Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=fe62cadd6fb4a7e49f7d59401fc74ae0411e32a7'/>
<id>urn:sha1:fe62cadd6fb4a7e49f7d59401fc74ae0411e32a7</id>
<content type='text'>
</content>
</entry>
</feed>
