aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
Commit message (Collapse)AuthorAgeFilesLines
* remake: no --follow-strict-remakes; a strict remake failing says whotv3 days1-1/+0
| | | | | | | | | | | | | | | | | A strict remake takes a majority of members whose --strict-keys take its manifest's signer: no node votes for one without, so --follow-strict-remakes (1173) goes. A node that doesn't vote still switches once the others commit, as with any remake. So that an operator can tell why one fails: a strict remake aborted for want of a majority (the voting period over, or a majority out of reach) says in its reason (GET /admin/remakes/{id}, and the coordinator's log) which members didn't vote, and that a member votes for one only with its manifest signed by a key of its --strict-keys. Each of those logs why itself (`Not voting for a strict remake`). The sim a_strict_remake_too_few_take: only a takes the manifest; the remake aborts, naming b and c.
* remake: turning a running swarm strict, keeping what an operator signedtv3 days1-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Until a swarm is strict, the user a change names is its node's word, so any member could have planted registry entries, policy, bans or user-signed values as any user, plain or signed by a key it put there itself; writing the strict policy trusted all of it as it was. A remake of a new kind, `strict`, turns a swarm strict instead: * Its content is a manifest (access::strict): the swarm, the strict policy, and each value kept at the places values are signed, by the SHA-256 of its JSON, signed by an operator (ssh-keygen -Y sign -n continuum-strict). * Every node builds the next epoch as compaction does, keeping at the signed places only the values the manifest names, as they were at the base, and writing its policy (RemakeKind::protocol, the one kind that changes protocol data). Writes after the base reach the new epoch only by replays, judged by the strict policy. * A node votes for one only with its manifest signed by one of --strict-keys, keys given out of the document; without any, for none (logged once, `Not voting for a strict remake`), unless --follow-strict-remakes. A coordinator proposes only what it would vote for (403). Once a majority commits one, every node switches, as with any remake: refusing to switch would only cut a node off. * GET /admin/strict-manifest gives the manifest keeping everything held now, the values for review and the heads they are at; continuum-signed strict shows them, signs once confirmed and proposes at those heads. The sim a_swarm_turning_strict_through_a_remake: a member plants a registry entry as a manager; the operator's manifest leaves it out; a and b, given the key, commit; c, without, follows; the entry is gone and the policy strict everywhere.
* login: logins by key capped per usertv3 days1-0/+2
| | | | | | | | | | | | Review 6: a node remembers the challenges used until they expire, 10 000 at most, and refused every login by key once full. One user holding a key could make 10 000 logins within five minutes and keep everyone else out. A user may now log in by key at most --key-logins-per-user times (100) on a node within a challenge's lifetime, past which that user waits and others don't; the 10 000 stay as the cap for all users together. The lifetime, five minutes until now, is --challenge-lifetime.
* access: --bootstrap-keystv3 days1-2/+3
| | | | | | | The first users' SSH keys, recorded at genesis with their entries, so a swarm can be strict from its start. Auth plan M7.
* signatures: kept in the document filetv3 days1-9/+12
| | | | | | | A node's signatures are saved with its document (--document-file) and loaded with it. Auth plan M5.
* signatures: --sign-everytv3 days1-0/+1
| | | | | | | | Changes left unsigned are vouched for by the node's next signature: --sign-every 1s (default) signs the latest within a second, all signs every change, none only those that must be. Auth plan M5.
* dashboard: own links over the API, and CORStv3 days1-0/+1
| | | | | | | | | GET /admin/dashboard/links/own and its event stream: a node's own links, as LINKS_REPLY carried them, for other members' dashboards with a token. CORS for the members' dashboard origins and --cors-origins, without credentials. Auth plan M3.
* auth: logging in, and tokens as bearerstv3 days1-0/+3
| | | | | | | | | POST /auth/login (by htpasswd or the proxy), /auth/refresh, /auth/logout, GET /auth/whoami; every request may bring Authorization: Bearer instead of a password. --token-lifetime and --session-lifetime. Auth plan M2.
* access: bootstrap users onlytv3 days1-7/+15
| | | | | | | The first users come only from --bootstrap-users; the genesis node warns of htpasswd users that aren't among them. Auth plan M1.
* access: genesis of swarms from before the registrytv3 days1-4/+3
| | | | | | | | Swarms started before the registry keep working without one; the genesis node's options for a registry apply only to new swarms. What tests and migration leave is noted in future-work. Auth plan M1, bootstrap and migration (2.5).
* access: first users at genesistv3 days1-0/+12
| | | | | | | | --bootstrap-users gives a new swarm a registry from its first change, each first user with everything; other users may do nothing until added. Without it the swarm has no registry and works as before. Auth plan M1.
* access: the user registrytv3 days1-0/+1
| | | | | | | | | _continuum/users/<name>: one entry per user, with capabilities by path (read, write) granted by whom and when, and a disabled flag. Read leniently: a damaged entry gives less, never more. Protocol data stays apart: a capability outside _continuum never covers it. Auth plan M1.
* HyParView (slim)tv5 days1-0/+1
|
* plumtreetv5 days1-0/+1
|
* push by defaulttv6 days1-1/+0
|
* push changes experimenttv6 days1-0/+1
|
* deflate blob chunkstv6 days1-0/+1
|
* add stream heartbeattv8 days1-0/+1
|
* api: allow listening to Unix socketstv8 days1-30/+13
|
* dashboard: double-click opens peer dashboardtv9 days1-0/+1
|
* api: allow auth delegationtv9 days1-6/+13
|
* we're a replicated document, not KV storetv10 days1-2/+2
|
* introduce per-transport sync reply timeouttv10 days1-1/+7
|
* LWW everywhere, mostlytv10 days1-0/+1
|
* config: use individual transport enable flagstv10 days1-1/+2
|
* allow creating all key filestv10 days1-2/+5
|
* rename AutoMerge to Documenttv11 days1-2/+2
|
* add peer clock skew warningtv11 days1-0/+1
|
* main: drop stopping state clonetv11 days1-4/+3
|
* talk about all transports not just myceliumtv11 days1-1/+2
|
* document: move knowledge about node to swarmtv11 days1-1/+1
|
* main: call relay_only only with libp2p featuretv11 days1-5/+2
|
* unify closing logictv11 days1-12/+7
|
* dasboard cannot block shutdowntv12 days1-7/+12
|
* move transport config checks to respective modulestv12 days1-0/+8
|
* refactor transports to start themselvestv12 days1-98/+4
|
* add dormant-probe-max optiontv12 days1-1/+2
|
* libp2p: add ignore optiontv13 days1-0/+5
|
* libp2p: add UPnP supporttv13 days1-0/+1
|
* log to journal sanelytv14 days1-0/+3
|
* introduce relay only modetv14 days1-48/+91
|
* add support for renaming IDs in the loggertv14 days1-3/+8
|
* log slow libp2p sendstv2026-10-281-1/+1
|
* start API earliertv2026-10-281-19/+31
|
* cleanup log messagestv2026-10-281-1/+1
|
* rename transport::p2p to transport::libp2ptv2026-10-281-3/+4
|
* add tor transporttv2026-10-281-2/+21
|
* add support for public libp2p infrastructuretv2026-10-271-0/+1
|
* use libp2p mDNStv2026-10-271-0/+1
|
* add libp2p relay supporttv2026-10-271-0/+11
|