aboutsummaryrefslogtreecommitdiffstats
path: root/src/state
Commit message (Collapse)AuthorAgeFilesLines
* access: an epoch's root is never droppedtv5 days1-2/+9
| | | | | | | | | | | | | | | A REFUSALS naming the swarm's first change made the node receiving it judge that change again in a document that isn't empty, refuse it as "a change without dependencies that isn't the epoch's root", and drop it with everything built on it: its whole document. The first epoch's root is now the first change a document holds, as it comes to an empty one or as it is in one; a change judged again on a peer's word is never refused for having no dependencies; and drop_taken refuses to drop an epoch's root, or anything that would leave nothing kept, logging an error instead. Review finding 1 (critical).
* swarm: changes taken unjudged, dropped (REFUSALS)tv6 days1-1/+85
| | | | | | | | | A node refusing changes a peer brought tells it which broke a rule; the peer judges them itself, and if its rules refuse them too, drops them with all built on them (its document forked without them, a fresh actor), quarantining its own writes among them. Wire version 42. Auth plan M6 (rejoin on taint).
* auth: logging in by keytv6 days1-0/+2
| | | | | | | | POST /auth/challenge and /auth/login/key: a node-signed challenge, valid five minutes and taken once, signed with one of the user's SSH keys (ssh-keygen -Y sign -n continuum-login), for a token. Auth plan M7 (key login, M2b).
* access: a node registers before it writestv6 days1-19/+83
| | | | | | | | | Under a policy, a change by a node that isn't a member is refused with all built on it: a node's registration is written before any write of its own or through the API, not after (the registration itself exempt). Auth plan M6 (fix).
* access: signatures requiredtv6 days2-3/+19
| | | | | | | | "signatures": "required": a change counts only once a signature by its committer vouches for it, and waits until then; every node then signs every change it makes. Auth plan M6.
* access: the policy enforcedtv6 days2-3/+29
| | | | | | | | _continuum/access/policy ({"version": 1}) has every node screen every change it receives, on every path changes come in. A policy a node doesn't know stops its writes through the API. GET /admin/refused. Auth plan M6.
* remake: forgetting and releasing name their usertv6 days1-0/+19
| | | | | | | Forget records and released quarantines name the user who made them, so they are judged by its capabilities. Auth plan M6.
* signatures: with sync messagestv6 days2-3/+12
| | | | | | | Sync messages carry, for each actor's writes, the latest signature the sender checked; the receiver checks it once it holds the change. Auth plan M5.
* signatures: --sign-everytv6 days1-3/+30
| | | | | | | | 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.
* signatures: changes signed by their nodetv6 days2-5/+27
| | | | | | | | | | Every node signs the changes it commits with its node key, an Ed25519 signature over the change's hash, kept beside the document. One signature on an actor's latest change vouches for its earlier ones. Protocol data and paths listed in _continuum/access/signed are signed, and writes with ?signed=true. Auth plan M5.
* dashboard: without LINKS; LINKS removedtv6 days1-2/+0
| | | | | | | | | The dashboard reads every member's links from the members themselves; LINKS and LINKS_REPLY, swarm::links and their wire tags go (wire version bumped). Nodes the browser can't reach are drawn from what the reachable ones measure. Auth plan M3.
* dashboard: own links over the API, and CORStv6 days1-0/+2
| | | | | | | | | 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 bearerstv6 days1-0/+4
| | | | | | | | | 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: first users at genesistv6 days1-0/+2
| | | | | | | | --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.
* refuse misplaced authorstv7 days1-0/+5
|
* HyParView (slim)tv7 days1-4/+21
|
* dissemination traittv7 days1-0/+2
|
* topology traittv7 days1-0/+2
|
* handshakes countedtv7 days1-0/+56
|
* working links recordedtv7 days1-0/+2
|
* worker sends off the passtv7 days1-1/+6
|
* suspend detectedtv7 days1-0/+12
|
* one grace wait per peertv7 days1-0/+4
|
* asks by askertv8 days1-0/+5
|
* round trips in treestv8 days1-0/+5
|
* push by defaulttv8 days1-4/+0
|
* push changes experimenttv8 days1-0/+4
|
* announce only to those behindtv9 days1-2/+2
|
* asked again countertv9 days1-0/+5
|
* hop delaystv9 days1-0/+3
|
* slow round back offtv9 days2-0/+5
|
* hello again when heard fromtv9 days1-0/+52
| | | | | | While we wait for a peer's HELLO_REPLY, anything else that comes from it makes our HELLO go again at once, at most once a second, instead of when the backoff says.
* no heal while both move ontv9 days1-3/+49
| | | | | | | The heal clock now also restarts when our heads and the peer's have both changed since the last STATUS that showed them differing. While writes go on, two neighbours's heads differ because of changes still on their way, and that alone no longer leads to a heal.
* overdue sync asked after from thentv9 days1-45/+88
|
* unanswered sync asked aftertv9 days1-6/+28
| | | | | An overdue sync answer is now followed by a PING too, and the peer stays reached once it answers the PING.
* unanswered members not reachedtv10 days2-3/+88
|
* announce what trees misstv10 days1-0/+3
|
* replace eager links by treestv10 days1-10/+0
|
* add writer treestv10 days2-3/+8
|
* measure 2-hop neighbourhoodtv10 days2-0/+7
|
* introduce eager linkstv11 days1-0/+10
|
* skip neighbours with our headstv11 days1-0/+5
|
* retry new peers before probingtv11 days1-5/+37
|
* probe list memberstv11 days1-3/+8
|
* add stream heartbeattv11 days1-0/+3
|
* dashboard: double-click opens peer dashboardtv11 days1-0/+3
|
* api: add x-continuum-heads to writestv12 days1-6/+10
|
* record node ID and API user for every writetv12 days1-1/+24
|
* large messages over slow links are deltastv12 days1-0/+29
|
* introduce per-transport sync reply timeouttv12 days2-11/+14
|