| 1 | # Census overlay email-signin (the console's email sign-in: an address with no Keymail mailbox signs in by an emailed link and code, an email session re-confirms by email, and the old Apps-inbox confirmation link is retired; docs/superpowers/specs/2026-10-21-console-email-signin-design.md), loaded LAST, after claim-merge-main-4. Proposed: every row carries rev3=PROPOSED-email-signin, and the ruling is asked of the census owner on #280 (docs/superpowers/notes/census-proposal-email-signin.md). |
| 2 | # Every unit here runs in the console (cmd/console serve under console.service, user carlos-console). The root carlos binary links neither internal/console nor internal/mail; TestRootBinaryLinksNoConsoleOrMail (root_binary_deps_test.go) pins that with go list -deps. No root read is added. |
| 3 | # Ten changed legacy units are re-frozen at their main disposition with this branch's appended (serve, NewServer, Server.handleCLIApprovePage, Server.handleCallback, Store.PurgeExpired, Store.migrate, and the check, home, layout and team templates). Eighteen new units are proposed accepted legacy at their siblings' class: console SQL on the console's own database (the email_challenges store methods, SessionInfo, PendingInviteAddress, CreateSessionMethod, takePendingActionByHash), newStore's two crypto/rand reads for an in-memory key, request URL query reads (handleHome, handleSignin, handleEmailLinkPage), and two new embedded templates. Frozen declarations are added, so the seal moves. |
| 4 | @legacy 006b0fb7c42c5f08b48695f1c9b54fc9e510a0ab0bb52fa6e360305c02d33b6d internal/console/templates/check.html external legacy accepted-legacy accepted-legacy;rev3=J4;basis=root-input;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=Check your email: the approved copy, a code form posting to /auth/email/code and a send-again form; whole embedded template remains frozen as legacy UI input file:external@0 4e48af64d20853805ded890a2e79be77808f2070167cb5127bbd147b5ecb23d6 |
| 5 | @legacy 06700ab26d8a524d543c3ecff9e19ed21817d4781ed8c9d07318a1a8011015c6 internal/console/templates/stepup_email.html external legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: the email step-up's Confirm it's you page: one code form posting to /auth/email/stepup/code; embedded at build time and rendered per request as legacy UI input, as its sibling templates (J4 root-input) file:external@0 092bc86b580a9cf5de260be9ff2ece3392c05849365fa4bd789510c44a437b04 |
| 6 | @legacy 1a2394f940d20ebc92a7c9f010ebd92d9497bbf94f351c81ea6acd99515e04d3 internal/console/emailsignin_store.go Store.TakeEmailLink legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one transaction: a QueryRow of the challenge by its link hash and its DELETE; console SQL on its own email_challenges table (CONSOLE_DB), as its store siblings (J4 root-input) file:Exec@362,file:QueryRow@205 49b1dbedf7a6af718368d3492610c16678d79921156247aa9e5028060138e212 |
| 7 | @legacy 21e0acb56c4325dee1d35cb1417eaba757d67f1499e6fb1a7fb24bdce1a09473 internal/console/templates/home.html external legacy accepted-legacy accepted-legacy;rev3=J4;basis=root-input;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=the front page's one address form posting to /auth/continue, with the approved copy, a banner and a no-mail note; whole embedded template remains frozen as legacy UI input file:external@0 d4fc1163306864dc5dbc3714fb2734cab49bbffffab4971ab8738934f3c0e818 |
| 8 | @legacy 2f2c601ae245fba68aeaa0b08d0b63f7cb6f56528753d2c16b0762e8ed22eb2a internal/console/templates/team.html external legacy accepted-legacy accepted-legacy;rev3=J4;basis=root-input;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=the confirm and invite notes and the invite placeholder come from approved copy fields; whole embedded template remains frozen as legacy UI input file:external@0 9f4dd7d37f5589b3495f090e83e084a9aeee278cea754ed8af85bacd89f0696e |
| 9 | @legacy 3741a389f9d4ee7daeb546ff62393dcca237f83463c85a0640e977262f67f67d internal/console/emailsignin_store.go Store.LiveEmailChallenge legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one QueryRow of a binding's newest live challenge; console SQL on its own email_challenges table (CONSOLE_DB), as its store siblings (J4 root-input) file:QueryRow@244 32351c70194532f6e778070ee910ee5462572a628107dba992759ef986a9b8be |
| 10 | @legacy 3a20fefebf829d02238900b3d09d0db8e2e882be1a7f788e51d6e9b3d5b51ac1 internal/console/store.go Store.migrate legacy accepted-legacy accepted-legacy;rev3=J4;basis=root-input;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=adds the sessions.method column (default keymail, the backfill) and calls migrateEmailSignin; SQLite DDL on CONSOLE_DB; the existing site moves file:Exec@12017,file:Exec@18103 1efcdb4a2abf964e42e30d87faa0698c6013684b6f0bb3d1acb13b3e9bdc3141 |
| 11 | @legacy 4ebae1e28d51d8a7bd6e9e86c07ee056757365f77bfc4b2ad18623ab65e8fe72 internal/console/emailsignin_store.go Store.PeekEmailLink legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one QueryRow of a challenge by its link hash, deleting nothing; console SQL on its own email_challenges table (CONSOLE_DB), as its store siblings (J4 root-input) file:QueryRow@119 4c899382f8ee2628137714c0dbabfa1b85aa9a9d306c950fd8bea37dad5bd66f |
| 12 | @legacy 510d507b21da01220f5c322eb2a3ed2c77645412edca18ac97028c1f70d14650 internal/console/emailsignin_store.go Store.migrateEmailSignin legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: CREATE TABLE IF NOT EXISTS email_challenges and one additive ALTER, called from Store.migrate; console SQL on its own email_challenges table (CONSOLE_DB), as its store siblings (J4 root-input) file:Exec@56,file:Exec@801 54f0a37a8bbfc24db86cf9d2b0bf307bd5bba67ecdea4cc86fa7c0145116acb8 |
| 13 | @legacy 55e6a4bf2f00fd349cc31217828006866ff368b9bf086b7cf53387d32ca72ebe internal/console/server.go Server.handleSignin legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: keeps a safe local next from the request URL in a short-lived cookie for handleCallback; its one site is r.URL.Query() of the request URL, not a file; the same class as handleCallback's URL query (J4 root-input) file:Query@656 50a233daa82e6afed6c5d977a90033d457a0006c9cb4ad8db01a3f1c4d1aa179 |
| 14 | @legacy 56842d4ce9e3841b0402675c578b06354fbbd116edcc75222f821ef99d0f61f9 internal/console/emailsignin_store.go Store.TakeEmailCode legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one transaction: a QueryRow of the challenge, then an attempt count UPDATE or a DELETE of it and its binding's others; console SQL on its own email_challenges table (CONSOLE_DB), as its store siblings (J4 root-input) file:Exec@1338,file:Exec@1431,file:Exec@1674,file:Exec@739,file:QueryRow@355 a222b3f6309d1832408b9815525a3d1bd3da100833c6f8d0ce5d1dc34dd11cfc |
| 15 | @legacy 5aac2d57e856a3709686b5f98fe70b6f0e77025c19f4464925104219eff4e75f internal/console/emailsignin_store.go Store.HoldEmailChallenge legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one QueryRow counting a binding's live challenges, then the delete and insert of a refused request's unsent challenge; console SQL on its own email_challenges table (CONSOLE_DB), as its store siblings (J4 root-input) file:QueryRow@312 b9e810b3c2a7175063958b1a099a9d9b79a595b251744c11db10ca1e54932515 |
| 16 | @legacy 5ae6f37ca5abfccecb5fda3807725b6acc550f6aa0391c0c3e6fecbe2a6dd59b internal/console/store.go newStore legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: two crypto/rand.Read calls from the kernel's random source: a 32-byte in-memory HMAC key for emailed codes and an 8-byte epoch label, never written down; no file, no store, no box state; the same class as Keymail.sealEnvelope's crypto/rand read (accepted-legacy, census-ruling-console-invite-delivery) file:Read@213,file:Read@259 d349c559879ad5a2dcd40d87da721b7f72ba744ce8fe5ce8cd0b1a86dd58b2d1 |
| 17 | @legacy 6667720ec8636d3eccf87309b30f08c4d32995fd3b063d6da5e2a47989f70461 internal/console/server.go NewServer legacy accepted-legacy accepted-legacy;rev3=PROPOSED-scan-demand-revival;basis=Console construction adds queue and notification state. The existing logs/data route literal moves; it is not a filesystem read.;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=sets consoleNameCfg from Config.ConsoleName and the challengeSem send bound, and registers the four /auth/email routes; no goroutine; the one data-literal is still the logs/data route pattern, moved; the record-write census re-digests the same unit data-literal@9511 9a49c1fc11bbe553672d824a6efb619612b3a9a9d1589db814aef6db81418169 |
| 18 | @legacy 80f85672905dbec4711c38ecd46e7458353e608c1d1673e34a91f3aa76753804 internal/console/templates/email_link.html external legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: the emailed link's confirm page: one form posting the link token and a login-CSRF nonce to /auth/email/link; embedded at build time and rendered per request as legacy UI input, as its sibling templates (J4 root-input) file:external@0 10a416ee3e92136a91c83564edaedd23b78465659b213c389237c5401a1ac69e |
| 19 | @legacy 917d4f9bff29cf8742a9f7c9c0890d3574d9c5069fdb519f350282c2ca7cd1ba internal/console/store.go Store.SessionInfo legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one QueryRow of a session's address, method and expiry in the console's own sessions table; the same class as Store.SessionAddress (J4 root-input) file:QueryRow@119 9be462c390ba21ce3ff91e393cd231fc9c7cb733817add8f8cd81cc2aa414a06 |
| 20 | @legacy a4f3b08af53655216841405f3764de45b14876225e42e00849c78d43a057c135 cmd/console/main.go serve legacy accepted-legacy accepted-legacy;rev3=PROPOSED-scan-demand-revival;basis=Console service wires the optional callback signer and starts the claim-guarded queue worker. The same three data path literals move; it does not add a privileged reader.;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=passes CARLOS_CONSOLE_NAME to NewServer as Config.ConsoleName, the name the console's emails use; the same three /data literals at the same offsets; no read added data-literal@4077,data-literal@5178,data-literal@5415 d13aeef31223db8c798e4e24860f878784416acae3cf4d8e7ed32a8a5d8b9d91 |
| 21 | @legacy a59f02afda1b85b8cc2c4a6261d7f20a53e834ea76dfd57f58947b760174e1b6 internal/console/templates/layout.html external legacy accepted-legacy accepted-legacy;rev3=PROPOSED-console-switcher-filter;basis=Account switcher adds a client-side filter box and a scrolling list; whole embedded template remains frozen as legacy UI input.;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=CSS only: email inputs styled as text inputs and sign-in form labels; whole embedded template remains frozen as legacy UI input file:external@0 8581a554a918e7664f6f6dc3432b8819341aee657df5f5be5b0db681a8ba2c24 |
| 22 | @legacy a7825af298422e6d81470f4b804bf99527eb18f0c8a94059140e39a607b1b346 internal/console/stepup.go Store.takePendingActionByHash legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: TakePendingAction's body moved unchanged, keyed by the token's hash so an email step-up challenge (which stores only the hash) can redeem it; the same QueryRow and DELETE on the console's own pending_actions table that TakePendingAction held as file:Exec@599,file:QueryRow@304 (J4 root-input) file:Exec@582,file:QueryRow@302 0c9c9568cb9e5fc1c0b0ab4ead23ed6de772b0fada086ac29775f0f994b6a35c |
| 23 | @legacy abb6a8a53c38a1bef3c8cc8450a07a604905bfc424fb87a9880d26235a0a7013 internal/console/store.go Store.PendingInviteAddress legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one QueryRow of an invite's address, expiry and acceptance in the console's own invites table, read without consuming it, for the signed-out invite page's prefill; the same class as Store.PendingInviteFor and CountPendingInvites (J4 root-input) file:QueryRow@137 c13d4b6f7397d6a2fbd51dc122dc6adbe04e1d773d0417d769d07063831fc643 |
| 24 | @legacy acbb55d5d6788a8523b713d5d118c8bc581d3e1713ea9976286685659419c87a internal/console/emailsignin_store.go deleteBound legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one DELETE of a binding's challenges inside the caller's transaction; console SQL on its own email_challenges table (CONSOLE_DB), as its store siblings (J4 root-input) file:Exec@148 bdb9d1c1b7780710a75f3f74bb1ae1f4b8191d3a4dae6dcef9d4e660ee970a07 |
| 25 | @legacy b6aaab60628651fdf65a0eaa980c4db2988d445e0ae4c258b640b14c5a6de0e2 internal/console/store.go Store.CreateSessionMethod legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: CreateSession's INSERT into the console's own sessions table moved here with the method column (keymail or email); the site CreateSession held as file:Exec@167 (J4 root-input) file:Exec@181 7fe480594b99ed5e22eb8ca72eccf6d081b446001a54fb717c9f555e50d51838 |
| 26 | @legacy bafabc3cd8ab9d83c11237cc03355cee73f2be2cfc79898ec2f67cb9b43bf80f internal/console/store.go Store.PurgeExpired legacy accepted-legacy accepted-legacy;rev3=J4;basis=root-input;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=also deletes expired rows of the console's own email_challenges table: one more SQLite Exec on CONSOLE_DB file:Exec@177,file:Exec@293,file:Exec@66 2abacdba9ce796d4084a233119ff9aef91dbaac7aa8995212b220369b8a9fb46 |
| 27 | @legacy bd8e908ba78f2b376ee306fb695819d9006737404996b02fe0238e23d1fc2ebb internal/console/authcli.go Server.handleCLIApprovePage legacy accepted-legacy accepted-legacy;rev3=J4;basis=root-input;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=signed out, renders the sign-in front page with next set back to /auth/cli (a code-shaped ?code= kept only for display) instead of redirecting; the added site is r.URL.Query() of the request URL, not a file; the existing site moves file:Query@171,file:Query@648 52b0fb7aaf3e10ededce8e9e7e399dc666cae734716f9b419c9a41d1f6248948 |
| 28 | @legacy dfceefa98c2e6e18edc72d3323eb9617ca0cbd5bc587fff57abf9a28961627e4 internal/console/server.go Server.handleHome legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: the signed-out front page now carries next; its one site is r.URL.Query() of the request URL, not a file; the same class as handleCallback's URL query (J4 root-input) file:Query@214 4358941da24be00cdee19a9401a45046f81cee94eedceeba18a80ef74c67181c |
| 29 | @legacy f0e5b3e7e6cbd1e0be4f70ea412d5e8b6718c4fe85a33147bed998e550ef0d90 internal/console/server.go Server.handleCallback legacy accepted-legacy accepted-legacy;rev3=J4;basis=root-input;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=the Keymail sign-in's session minting moves into finishSignin, shared with the email doors, and it reads the next cookie handleSignin set; its one site, r.URL.Query() of the callback URL, unchanged file:Query@80 f0d39185734b88859031d6462d8530c9ee343fb79cee32d2160e10f9f1cf4e5d |
| 30 | @legacy f1aa9e9bd78037515adb709a5560c739b108a8fb61e384d3b695aa90cb2874d8 internal/console/emailsignin.go Server.handleEmailLinkPage legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: GET /auth/email/link; its one site is r.URL.Query() of the request URL (the t parameter), not a file; it peeks the challenge in the console's own database without spending it and renders a confirm page; the same class as handleCallback's URL query (J4 root-input) file:Query@88 29ad3d44c4ac35a3f9615a6738253d700966b793940c76c7a7a8aa1b4322de5e |
| 31 | @legacy f66bf3fc801e99ca632bded15417efd42be4d8a188f8ac465e437bcd402bfaa7 internal/console/emailsignin_store.go Store.insertEmailChallenge legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one INSERT of a challenge row whose row key, link and code it mints from crypto/rand (randomToken, rand.Int), the code kept only as an HMAC under the in-memory key; console SQL on its own email_challenges table (CONSOLE_DB), as its store siblings (J4 root-input) file:Exec@476 6ed9a6f94f949896b808cfb54791af7034f08b6f494eaa380cd18ffeaf5ec674 |
| 32 | cmd/console/main.go serve legacy accepted-legacy accepted-legacy;rev3=PROPOSED-scan-demand-revival;basis=Console service wires the optional callback signer and starts the claim-guarded queue worker. The same three data path literals move; it does not add a privileged reader.;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=passes CARLOS_CONSOLE_NAME to NewServer as Config.ConsoleName, the name the console's emails use; the same three /data literals at the same offsets; no read added data-literal@4077,data-literal@5178,data-literal@5415 d13aeef31223db8c798e4e24860f878784416acae3cf4d8e7ed32a8a5d8b9d91 |
| 33 | internal/console/authcli.go Server.handleCLIApprovePage legacy accepted-legacy accepted-legacy;rev3=J4;basis=root-input;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=signed out, renders the sign-in front page with next set back to /auth/cli (a code-shaped ?code= kept only for display) instead of redirecting; the added site is r.URL.Query() of the request URL, not a file; the existing site moves file:Query@171,file:Query@648 52b0fb7aaf3e10ededce8e9e7e399dc666cae734716f9b419c9a41d1f6248948 |
| 34 | internal/console/emailsignin.go Server.handleEmailLinkPage legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: GET /auth/email/link; its one site is r.URL.Query() of the request URL (the t parameter), not a file; it peeks the challenge in the console's own database without spending it and renders a confirm page; the same class as handleCallback's URL query (J4 root-input) file:Query@88 29ad3d44c4ac35a3f9615a6738253d700966b793940c76c7a7a8aa1b4322de5e |
| 35 | internal/console/emailsignin_store.go Store.HoldEmailChallenge legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one QueryRow counting a binding's live challenges, then the delete and insert of a refused request's unsent challenge; console SQL on its own email_challenges table (CONSOLE_DB), as its store siblings (J4 root-input) file:QueryRow@312 b9e810b3c2a7175063958b1a099a9d9b79a595b251744c11db10ca1e54932515 |
| 36 | internal/console/emailsignin_store.go Store.LiveEmailChallenge legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one QueryRow of a binding's newest live challenge; console SQL on its own email_challenges table (CONSOLE_DB), as its store siblings (J4 root-input) file:QueryRow@244 32351c70194532f6e778070ee910ee5462572a628107dba992759ef986a9b8be |
| 37 | internal/console/emailsignin_store.go Store.PeekEmailLink legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one QueryRow of a challenge by its link hash, deleting nothing; console SQL on its own email_challenges table (CONSOLE_DB), as its store siblings (J4 root-input) file:QueryRow@119 4c899382f8ee2628137714c0dbabfa1b85aa9a9d306c950fd8bea37dad5bd66f |
| 38 | internal/console/emailsignin_store.go Store.TakeEmailCode legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one transaction: a QueryRow of the challenge, then an attempt count UPDATE or a DELETE of it and its binding's others; console SQL on its own email_challenges table (CONSOLE_DB), as its store siblings (J4 root-input) file:Exec@1338,file:Exec@1431,file:Exec@1674,file:Exec@739,file:QueryRow@355 a222b3f6309d1832408b9815525a3d1bd3da100833c6f8d0ce5d1dc34dd11cfc |
| 39 | internal/console/emailsignin_store.go Store.TakeEmailLink legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one transaction: a QueryRow of the challenge by its link hash and its DELETE; console SQL on its own email_challenges table (CONSOLE_DB), as its store siblings (J4 root-input) file:Exec@362,file:QueryRow@205 49b1dbedf7a6af718368d3492610c16678d79921156247aa9e5028060138e212 |
| 40 | internal/console/emailsignin_store.go Store.insertEmailChallenge legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one INSERT of a challenge row whose row key, link and code it mints from crypto/rand (randomToken, rand.Int), the code kept only as an HMAC under the in-memory key; console SQL on its own email_challenges table (CONSOLE_DB), as its store siblings (J4 root-input) file:Exec@476 6ed9a6f94f949896b808cfb54791af7034f08b6f494eaa380cd18ffeaf5ec674 |
| 41 | internal/console/emailsignin_store.go Store.migrateEmailSignin legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: CREATE TABLE IF NOT EXISTS email_challenges and one additive ALTER, called from Store.migrate; console SQL on its own email_challenges table (CONSOLE_DB), as its store siblings (J4 root-input) file:Exec@56,file:Exec@801 54f0a37a8bbfc24db86cf9d2b0bf307bd5bba67ecdea4cc86fa7c0145116acb8 |
| 42 | internal/console/emailsignin_store.go deleteBound legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one DELETE of a binding's challenges inside the caller's transaction; console SQL on its own email_challenges table (CONSOLE_DB), as its store siblings (J4 root-input) file:Exec@148 bdb9d1c1b7780710a75f3f74bb1ae1f4b8191d3a4dae6dcef9d4e660ee970a07 |
| 43 | internal/console/server.go NewServer legacy accepted-legacy accepted-legacy;rev3=PROPOSED-scan-demand-revival;basis=Console construction adds queue and notification state. The existing logs/data route literal moves; it is not a filesystem read.;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=sets consoleNameCfg from Config.ConsoleName and the challengeSem send bound, and registers the four /auth/email routes; no goroutine; the one data-literal is still the logs/data route pattern, moved; the record-write census re-digests the same unit data-literal@9511 9a49c1fc11bbe553672d824a6efb619612b3a9a9d1589db814aef6db81418169 |
| 44 | internal/console/server.go Server.handleCallback legacy accepted-legacy accepted-legacy;rev3=J4;basis=root-input;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=the Keymail sign-in's session minting moves into finishSignin, shared with the email doors, and it reads the next cookie handleSignin set; its one site, r.URL.Query() of the callback URL, unchanged file:Query@80 f0d39185734b88859031d6462d8530c9ee343fb79cee32d2160e10f9f1cf4e5d |
| 45 | internal/console/server.go Server.handleHome legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: the signed-out front page now carries next; its one site is r.URL.Query() of the request URL, not a file; the same class as handleCallback's URL query (J4 root-input) file:Query@214 4358941da24be00cdee19a9401a45046f81cee94eedceeba18a80ef74c67181c |
| 46 | internal/console/server.go Server.handleSignin legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: keeps a safe local next from the request URL in a short-lived cookie for handleCallback; its one site is r.URL.Query() of the request URL, not a file; the same class as handleCallback's URL query (J4 root-input) file:Query@656 50a233daa82e6afed6c5d977a90033d457a0006c9cb4ad8db01a3f1c4d1aa179 |
| 47 | internal/console/stepup.go Store.takePendingActionByHash legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: TakePendingAction's body moved unchanged, keyed by the token's hash so an email step-up challenge (which stores only the hash) can redeem it; the same QueryRow and DELETE on the console's own pending_actions table that TakePendingAction held as file:Exec@599,file:QueryRow@304 (J4 root-input) file:Exec@582,file:QueryRow@302 0c9c9568cb9e5fc1c0b0ab4ead23ed6de772b0fada086ac29775f0f994b6a35c |
| 48 | internal/console/store.go Store.CreateSessionMethod legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: CreateSession's INSERT into the console's own sessions table moved here with the method column (keymail or email); the site CreateSession held as file:Exec@167 (J4 root-input) file:Exec@181 7fe480594b99ed5e22eb8ca72eccf6d081b446001a54fb717c9f555e50d51838 |
| 49 | internal/console/store.go Store.PendingInviteAddress legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one QueryRow of an invite's address, expiry and acceptance in the console's own invites table, read without consuming it, for the signed-out invite page's prefill; the same class as Store.PendingInviteFor and CountPendingInvites (J4 root-input) file:QueryRow@137 c13d4b6f7397d6a2fbd51dc122dc6adbe04e1d773d0417d769d07063831fc643 |
| 50 | internal/console/store.go Store.PurgeExpired legacy accepted-legacy accepted-legacy;rev3=J4;basis=root-input;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=also deletes expired rows of the console's own email_challenges table: one more SQLite Exec on CONSOLE_DB file:Exec@177,file:Exec@293,file:Exec@66 2abacdba9ce796d4084a233119ff9aef91dbaac7aa8995212b220369b8a9fb46 |
| 51 | internal/console/store.go Store.SessionInfo legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: one QueryRow of a session's address, method and expiry in the console's own sessions table; the same class as Store.SessionAddress (J4 root-input) file:QueryRow@119 9be462c390ba21ce3ff91e393cd231fc9c7cb733817add8f8cd81cc2aa414a06 |
| 52 | internal/console/store.go Store.migrate legacy accepted-legacy accepted-legacy;rev3=J4;basis=root-input;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=adds the sessions.method column (default keymail, the backfill) and calls migrateEmailSignin; SQLite DDL on CONSOLE_DB; the existing site moves file:Exec@12017,file:Exec@18103 1efcdb4a2abf964e42e30d87faa0698c6013684b6f0bb3d1acb13b3e9bdc3141 |
| 53 | internal/console/store.go newStore legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: two crypto/rand.Read calls from the kernel's random source: a 32-byte in-memory HMAC key for emailed codes and an 8-byte epoch label, never written down; no file, no store, no box state; the same class as Keymail.sealEnvelope's crypto/rand read (accepted-legacy, census-ruling-console-invite-delivery) file:Read@213,file:Read@259 d349c559879ad5a2dcd40d87da721b7f72ba744ce8fe5ce8cd0b1a86dd58b2d1 |
| 54 | internal/console/templates/check.html external legacy accepted-legacy accepted-legacy;rev3=J4;basis=root-input;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=Check your email: the approved copy, a code form posting to /auth/email/code and a send-again form; whole embedded template remains frozen as legacy UI input file:external@0 4e48af64d20853805ded890a2e79be77808f2070167cb5127bbd147b5ecb23d6 |
| 55 | internal/console/templates/email_link.html external legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: the emailed link's confirm page: one form posting the link token and a login-CSRF nonce to /auth/email/link; embedded at build time and rendered per request as legacy UI input, as its sibling templates (J4 root-input) file:external@0 10a416ee3e92136a91c83564edaedd23b78465659b213c389237c5401a1ac69e |
| 56 | internal/console/templates/home.html external legacy accepted-legacy accepted-legacy;rev3=J4;basis=root-input;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=the front page's one address form posting to /auth/continue, with the approved copy, a banner and a no-mail note; whole embedded template remains frozen as legacy UI input file:external@0 d4fc1163306864dc5dbc3714fb2734cab49bbffffab4971ab8738934f3c0e818 |
| 57 | internal/console/templates/layout.html external legacy accepted-legacy accepted-legacy;rev3=PROPOSED-console-switcher-filter;basis=Account switcher adds a client-side filter box and a scrolling list; whole embedded template remains frozen as legacy UI input.;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=CSS only: email inputs styled as text inputs and sign-in form labels; whole embedded template remains frozen as legacy UI input file:external@0 8581a554a918e7664f6f6dc3432b8819341aee657df5f5be5b0db681a8ba2c24 |
| 58 | internal/console/templates/stepup_email.html external legacy accepted-legacy accepted-legacy;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=new: the email step-up's Confirm it's you page: one code form posting to /auth/email/stepup/code; embedded at build time and rendered per request as legacy UI input, as its sibling templates (J4 root-input) file:external@0 092bc86b580a9cf5de260be9ff2ece3392c05849365fa4bd789510c44a437b04 |
| 59 | internal/console/templates/team.html external legacy accepted-legacy accepted-legacy;rev3=J4;basis=root-input;rev3=PROPOSED-email-signin;identity=the console (cmd/console serve under console.service, user carlos-console);basis=the confirm and invite notes and the invite placeholder come from approved copy fields; whole embedded template remains frozen as legacy UI input file:external@0 9f4dd7d37f5589b3495f090e83e084a9aeee278cea754ed8af85bacd89f0696e |
| 60 | # Three units are retired by an H3 census-ruling removal, in the form console-invite-delivery used for Keymail.SendApp while it was proposed (the loader takes an H3 removal only with a census-ruling- basis). A removal is not in the seal. |
| 61 | @remove internal/console/server.go Server.handleConfirm |
| 62 | @removed internal/console/server.go Server.handleConfirm H3 census-ruling-email-signin (PROPOSED, awaiting the census owner on #280): still declared, and reads nothing now: it is the retired Apps-inbox confirmation link; nothing mints those links any more, so it renders the expired message and reads, spends and writes nothing (its TakeConfirmation, EnsureUser, GrantToken and CreateSession calls are gone). It runs in the console as carlos-console. |
| 63 | @remove internal/console/stepup.go Store.TakePendingAction |
| 64 | @removed internal/console/stepup.go Store.TakePendingAction H3 census-ruling-email-signin (PROPOSED, awaiting the census owner on #280): still declared, and reads nothing now: its body and both sites moved unchanged into Store.takePendingActionByHash, an accepted-legacy row in this overlay, which it calls with hashToken(rawToken). It runs in the console as carlos-console. |
| 65 | @remove internal/console/store.go Store.CreateSession |
| 66 | @removed internal/console/store.go Store.CreateSession H3 census-ruling-email-signin (PROPOSED, awaiting the census owner on #280): still declared, and reads nothing now: its one site, the sessions INSERT, moved into Store.CreateSessionMethod, an accepted-legacy row in this overlay, with the method column; it calls that with MethodKeymail. It runs in the console as carlos-console. |
| 67 | # Envelopes re-pinned. cmd/console: main.go (serve). internal/console: delivery.go, emailsignin.go, emailsignin_limits.go, emailsignin_store.go and signincopy.go are new; authcli.go, consolemail.go, keymail.go, keymailfed.go, server.go, stepup.go, store.go, store_gate.go and storenotify.go changed. The scan's only read-site changes are the rows above. internal/console/templates: check, home, layout and team changed, email_link and stepup_email new. |
| 68 | @coverage cmd/console 07518c79a3cc295474e3bfe23cb2e21b683349d65b22d056369c720a10f79652 |
| 69 | @coverage internal/console 8d60431a5b81bbd1e3a4acb46e95b16d848e17916a71a7c11510c43788547ec6 |
| 70 | @coverage internal/console/templates 5bf548c2be6168aaa35b4ac90efdbd73b333fd3120419b84a16522fb96af2452 |
| 71 | |