| Commit message (Expand) | Author | Age | Files | Lines |
| * | fix: an identity signs a named kind, and a device approval answers a request | Christophe Besson | 17 hours | 17 | -66/+636 |
| * | fix(hub): the pepper and a device key take the passphrase, not a token | Christophe Besson | 17 hours | 9 | -39/+134 |
| * | feat: browser access, decided in the desktop application | Christophe Besson | 21 hours | 19 | -5/+231 |
| * | feat(client): the desktop application keeps M and every node identity in its ... | Christophe Besson | 21 hours | 25 | -59/+873 |
| * | refactor(hub): the transport holds an identity, never a private key | Christophe Besson | 22 hours | 13 | -99/+140 |
| * | chore: bump version to 0.17.0, and the client minimum with it | Christophe Besson | 22 hours | 8 | -9/+13 |
| * | feat: bundles sealed per node under the passphrase and the hub's pepper | Christophe Besson | 23 hours | 30 | -479/+682 |
| * | feat(hub): a bundle pepper per account, handed only to a proven session | Christophe Besson | 24 hours | 5 | -0/+283 |
| * | fix(hub): a downloaded file opens in a tab only under a type that runs nothing | Christophe Besson | 24 hours | 5 | -24/+111 |
| * | fix: the page connects to its own origin and reCAPTCHA, nowhere else | Christophe Besson | 25 hours | 3 | -9/+20 |
| * | fix(client): the page names node operations, and the app confirms what widens... | Christophe Besson | 25 hours | 23 | -191/+548 |
| * | fix(hub): the admin allow-list grants an account, not a username | Christophe Besson | 25 hours | 5 | -18/+269 |
| * | fix(node): the roster, not the key alone, decides who gets a session | Christophe Besson | 26 hours | 4 | -18/+186 |
| * | fix: only the owner decides who hosts a group, and nobody is made a member un... | Christophe Besson | 26 hours | 40 | -84/+1521 |
| * | fix: a member can no longer lock a node, crash it with a link, or stop hub cl... | Christophe Besson | 26 hours | 6 | -84/+484 |
| * | feat(hub): search title, description, canonical and noscript in the shell | Christophe Besson | 27 hours | 3 | -4/+67 |
| * | feat(hub): sitemap.xml, named by robots.txt | Christophe Besson | 27 hours | 3 | -1/+37 |
| * | refactor(hub): remove the closed relay registry | Christophe Besson | 3 days | 4 | -259/+0 |
| * | refactor(node): remove five loopback routes nothing called | Christophe Besson | 3 days | 1 | -45/+0 |
| * | docs: keypair_bundle_delete is reserved for device_policy (O3) | Christophe Besson | 3 days | 1 | -0/+4 |
| * | refactor: drop the unread transfer_limits field from the handshake ack | Christophe Besson | 3 days | 3 | -35/+17 |
| * | feat(client): save files under a name every platform can write | Christophe Besson | 3 days | 18 | -7/+236 |
| * | feat(hub): reports from public-group members, decided by an administrator | Christophe Besson | 3 days | 21 | -113/+908 |
| * | feat: nodes apply the content blocklist in their public groups | Christophe Besson | 3 days | 15 | -55/+627 |
| * | refactor: remove the public-content swarm | Christophe Besson | 3 days | 11 | -329/+57 |
| * | fix: bound pending admin challenges and sign every value an op acts on | Christophe Besson | 3 days | 16 | -110/+540 |
| * | refactor: remove dead code across packages | Christophe Besson | 3 days | 23 | -784/+10 |
| * | refactor: remove the unused GroupIndex.serialize chain | Christophe Besson | 3 days | 11 | -388/+41 |
| * | fix: refuse an unsigned handshake challenge | Christophe Besson | 3 days | 4 | -42/+35 |
| * | feat(hub): new login tagline, dimmer gradient top | Christophe Besson | 3 days | 11 | -11/+11 |
| * | fix(hub): say so when a lazily loaded view cannot be fetched0.16 | Christophe Besson | 3 days | 15 | -5/+277 |
| * | feat(hub): keep a show's detail modal open under the player | Christophe Besson | 3 days | 6 | -4/+373 |
| * | fix(node): tell whether a pid is alive on Linux too | Christophe Besson | 4 days | 1 | -0/+8 |
| * | test: make both suites pass on Windows | Christophe Besson | 4 days | 85 | -266/+293 |
| * | fix(hub): the sidebar's Node section follows the node link | Christophe Besson | 4 days | 3 | -8/+90 |
| * | fix(hub): say "No operator paired" only when the node says so | Christophe Besson | 4 days | 2 | -4/+60 |
| * | fix: Windows installer and desktop app start and stop the node one way | Christophe Besson | 4 days | 14 | -239/+760 |
| * | fix(node): a Windows daemon that stops properly, starts honestly and runs once | Christophe Besson | 4 days | 10 | -215/+948 |
| * | fix(hub): depend on sqlalchemy[asyncio] | Christophe Besson | 4 days | 1 | -1/+1 |
| * | fix(hub): rate-limit per client, not per proxy | Christophe Besson | 4 days | 2 | -3/+55 |
| * | fix(node,client): query TMDB only once a language is chosen, in that language | Christophe Besson | 5 days | 8 | -1/+278 |
| * | fix(node): read the packaged TMDB token in place | Christophe Besson | 5 days | 3 | -74/+58 |
| * | feat(hub): default email opt-outs and match Register to Login styling | Christophe Besson | 5 days | 4 | -16/+37 |
| * | fix(hub): the NAT-punch signal needs a shared active group, like the offer relay | Christophe Besson | 5 days | 3 | -52/+136 |
| * | feat(protocol): bind the MNP token to the node it is for (E10) | Christophe Besson | 5 days | 11 | -13/+100 |
| * | fix(node,client): survive a transient hub state on login, and surface a faile... | Christophe Besson | 6 days | 3 | -5/+135 |
| * | feat(protocol): MNP 4.0 flag day for the node-audience token (B2) | Christophe Besson | 6 days | 5 | -70/+86 |
| * | fix(hub): present a node-audience token in the handshake, not the hub session... | Christophe Besson | 6 days | 15 | -38/+284 |
| * | fix(hub): require the passphrase to change the e-mail on file | Christophe Besson | 6 days | 4 | -12/+110 |
| * | fix(hub): make group revoke admin-only and route it through the broadcasting ... | Christophe Besson | 6 days | 2 | -0/+206 |