<feed xmlns='http://www.w3.org/2005/Atom'>
<title>coinos-server.git, 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-13T23:23:37Z</updated>
<entry>
<title>users: let a password unlock the encrypted nostr key for any session</title>
<updated>2026-10-13T23:23:37Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-13T23:23:37Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=12349761c03e769e1d54e878746a10d0a464b38d'/>
<id>urn:sha1:12349761c03e769e1d54e878746a10d0a464b38d</id>
<content type='text'>
/me only reports hasnsec now, so sessions that didn't start with a
password login had no way to reveal or sign with their key. POST /nsec
returns it after re-checking the password, under the login per-IP
failure limit.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01UjHzoBmW1iPpEe5qC2LDYB
</content>
</entry>
<entry>
<title>login: drop the unused per-username failure counter</title>
<updated>2026-10-13T14:52:33Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-13T14:52:33Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=d1a12bc0585aa583263362304218803ebf0afa9a'/>
<id>urn:sha1:d1a12bc0585aa583263362304218803ebf0afa9a</id>
<content type='text'>
The counter was incremented on every failed login and read but never
acted on; the per-IP limits do the throttling. Its keys never expired
and had grown to most of the keyspace.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01UjHzoBmW1iPpEe5qC2LDYB
</content>
</entry>
<entry>
<title>bolt12: put the requested expiry and single-use on the offer itself</title>
<updated>2026-10-09T06:16:37Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-09T06:16:37Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=0cbfab4779545afcc621d019ec93b30e5aec99df'/>
<id>urn:sha1:0cbfab4779545afcc621d019ec93b30e5aec99df</id>
<content type='text'>
The expiry was only stored on our invoice record, so CLN kept issuing
invoices for the offer after it had expired. Pass it as absolute_expiry,
and accept single_use to cap an offer at one payment.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>users: keep the encrypted nostr key and 2FA seed away from bearer tokens</title>
<updated>2026-10-08T19:15:15Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-08T19:15:15Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=5df9bc39ac48fdf1b19b00b9b457f9ebc1ee157c'/>
<id>urn:sha1:5df9bc39ac48fdf1b19b00b9b457f9ebc1ee157c</id>
<content type='text'>
/me and user emits return a hasnsec flag instead of the encrypted key, which
is now only sent with a password login or registration. /otpsecret refuses
once 2FA is enabled, and disabling 2FA rotates the seed.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>analytics-geo: read rotated request log chunks</title>
<updated>2026-10-08T19:03:38Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-08T19:03:38Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=621cb7b6ae6655db60971f248d2e799dbb8c4b3d'/>
<id>urn:sha1:621cb7b6ae6655db60971f248d2e799dbb8c4b3d</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Remove response logger</title>
<updated>2026-10-08T19:03:38Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-08T19:03:38Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=b3d6c983719560b6d3e2eb17b413f1147f2522a1'/>
<id>urn:sha1:b3d6c983719560b6d3e2eb17b413f1147f2522a1</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>me: stop reporting archived balance as locked for frozen accounts</title>
<updated>2026-10-08T19:03:38Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-08T19:03:38Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=fbf99d4d212baeae1750cec12244d0f904dfe669'/>
<id>urn:sha1:fbf99d4d212baeae1750cec12244d0f904dfe669</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>lightningd: bump to v26.06.9</title>
<updated>2026-10-07T15:10:19Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-07T15:10:19Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=d2d86384ee203bdaefa7c5fcaf147f44b0d2c6ee'/>
<id>urn:sha1:d2d86384ee203bdaefa7c5fcaf147f44b0d2c6ee</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<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>payments: lowercase payreq before looking up our own invoices</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=f53e70ed98eb723479b4276c5b621b599fe570a0'/>
<id>urn:sha1:f53e70ed98eb723479b4276c5b621b599fe570a0</id>
<content type='text'>
An uppercase bolt11 for a coinos invoice missed the getInvoice lookup, so
it was paid over lightning to our own node instead of internally. The
listener then saw the sender's payment pointer for that bolt11 and skipped
crediting the recipient. Normalize in POST /payments and nwc pay_invoice.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
