@snagset/server 0.1.38 → 0.1.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.js +74 -2
- package/dist/app.js.map +1 -1
- package/dist/config.generated.js +2 -1
- package/dist/config.generated.js.map +1 -1
- package/dist/db/migrations/0014_password_resets.sql +69 -0
- package/dist/email.js +29 -0
- package/dist/email.js.map +1 -0
- package/dist/instance/settings.js +30 -2
- package/dist/instance/settings.js.map +1 -1
- package/dist/jobs/reaper.js +13 -6
- package/dist/jobs/reaper.js.map +1 -1
- package/dist/orgs.js +42 -12
- package/dist/orgs.js.map +1 -1
- package/dist/routes/assignees.js +2 -1
- package/dist/routes/assignees.js.map +1 -1
- package/dist/routes/comments.js +5 -0
- package/dist/routes/comments.js.map +1 -1
- package/dist/routes/instance.js +50 -1
- package/dist/routes/instance.js.map +1 -1
- package/dist/routes/integrations.js +2 -1
- package/dist/routes/integrations.js.map +1 -1
- package/dist/routes/invites.js +3 -3
- package/dist/routes/invites.js.map +1 -1
- package/dist/routes/orgs.js +8 -3
- package/dist/routes/orgs.js.map +1 -1
- package/dist/routes/owner.js +52 -9
- package/dist/routes/owner.js.map +1 -1
- package/dist/routes/passwordReset.js +302 -0
- package/dist/routes/passwordReset.js.map +1 -0
- package/dist/routes/threads.js +104 -25
- package/dist/routes/threads.js.map +1 -1
- package/package.json +4 -4
- package/static/dashboard/assets/{CompositeItem-Yi3wWYM7.js → CompositeItem-CP7pxc5U.js} +1 -1
- package/static/dashboard/assets/{ConfirmDialog-D6hyhISD.js → ConfirmDialog-D7eZU5Z6.js} +1 -1
- package/static/dashboard/assets/{CopyButton-hyiQh1Zr.js → CopyButton-_X7ITEaj.js} +1 -1
- package/static/dashboard/assets/{FieldItemContext-Gb3Lo5Ci.js → FieldItemContext-BgajCxI_.js} +1 -1
- package/static/dashboard/assets/InstallTag-Bxq5AWM0.js +1 -0
- package/static/dashboard/assets/McpTokens-D_0BEsPb.js +1 -0
- package/static/dashboard/assets/{SaveState-CmcJ4unZ.js → SaveState-WYxHW3VJ.js} +1 -1
- package/static/dashboard/assets/{_app-Dsd1bbNv.js → _app-Bv20PwQa.js} +1 -1
- package/static/dashboard/assets/{_app-CBnYJfLp.js → _app-C4LQnv_m.js} +1 -1
- package/static/dashboard/assets/{activity-DG1e6z-2.js → activity-Ch0XQ9sf.js} +1 -1
- package/static/dashboard/assets/{arrow-left-CWiSdgA-.js → arrow-left-BVcH0ZD5.js} +1 -1
- package/static/dashboard/assets/{avatar-nrKPMD7A.js → avatar-B4uC-2Rd.js} +1 -1
- package/static/dashboard/assets/{badge-DEvpNOzs.js → badge-D4-0NV1D.js} +1 -1
- package/static/dashboard/assets/{card--8RLEIGP.js → card-_fRmCPLn.js} +1 -1
- package/static/dashboard/assets/{check-XHwuM5zg.js → check-BTd2LoGN.js} +1 -1
- package/static/dashboard/assets/{chevron-right-CG2rSUns.js → chevron-right-Co0UMSkz.js} +1 -1
- package/static/dashboard/assets/{copy-eakuUTpI.js → copy-CEpGdeGb.js} +1 -1
- package/static/dashboard/assets/{dialog-D0b9dX2m.js → dialog-C7r1DbuZ.js} +2 -2
- package/static/dashboard/assets/{dropdown-menu-BMIst4Wj.js → dropdown-menu-Clnp0fwC.js} +2 -2
- package/static/dashboard/assets/forgot-nTWEgSRm.js +1 -0
- package/static/dashboard/assets/{image-off-DZOyJVTM.js → image-off-DP5YbLdB.js} +1 -1
- package/static/dashboard/assets/index-Ddw_j6S-.js +162 -0
- package/static/dashboard/assets/index-Do3jpVIF.css +1 -0
- package/static/dashboard/assets/invite-CHU_LQYP.js +1 -0
- package/static/dashboard/assets/{label-Ds2CYKth.js → label-CeY5IHdJ.js} +1 -1
- package/static/dashboard/assets/{labels-CUVq_Uf0.js → labels-BuZpvtvw.js} +1 -1
- package/static/dashboard/assets/{layout-grid-BXWirugp.js → layout-grid-DpWj1k0D.js} +1 -1
- package/static/dashboard/assets/{parts-B46j7QJi.js → parts-DuhvDJGT.js} +1 -1
- package/static/dashboard/assets/{plus-yZPLf0r6.js → plus-fom7ulPf.js} +1 -1
- package/static/dashboard/assets/reset-CQMD1ToU.js +1 -0
- package/static/dashboard/assets/s._site-XzH7h0kY.js +1 -0
- package/static/dashboard/assets/{s._site.comments-CQYkPWo4.js → s._site.comments-D_QbkDGk.js} +5 -5
- package/static/dashboard/assets/s._site.reviewers-DKQj9ftE.js +1 -0
- package/static/dashboard/assets/{s._site.settings-D9Qix9dj.js → s._site.settings-DGhg9pWK.js} +1 -1
- package/static/dashboard/assets/{setup-CefvYWGy.js → setup-nee74nI7.js} +1 -1
- package/static/dashboard/assets/sign-in-DJSdsL9I.js +1 -0
- package/static/dashboard/assets/{sign-up-nsUll0Gy.js → sign-up-DeQDeqC_.js} +1 -1
- package/static/dashboard/assets/sites-l8LQQwZW.js +1 -0
- package/static/dashboard/assets/studio-CL5TjGsb.js +1 -0
- package/static/dashboard/assets/studio-CLnwa1jr.js +1 -0
- package/static/dashboard/assets/studio.index-D4sAU91A.js +1 -0
- package/static/dashboard/assets/studio.integrations-BLkBekJf.js +1 -0
- package/static/dashboard/assets/studio.members-KzPokmYW.js +6 -0
- package/static/dashboard/assets/{sun-Djjj3CUF.js → sun-C6_OdtRI.js} +1 -1
- package/static/dashboard/assets/{switch-WMRF6OK1.js → switch-CGYNLqP6.js} +1 -1
- package/static/dashboard/assets/{table-CgakQRAC.js → table-WdFx8YPW.js} +1 -1
- package/static/dashboard/assets/{useAriaLabelledBy-obWCIEg1.js → useAriaLabelledBy-CYXdXCKz.js} +1 -1
- package/static/dashboard/assets/{useBaseQuery-DG87f6yY.js → useBaseQuery-bYBwKcW7.js} +1 -1
- package/static/dashboard/assets/useQuery-CaIu0ohN.js +1 -0
- package/static/dashboard/assets/useRender-Rh7x0Dwc.js +1 -0
- package/static/dashboard/assets/{useValueChanged-CHzVruZ0.js → useValueChanged-DCX5-3sY.js} +1 -1
- package/static/dashboard/assets/{users-BvfczmcS.js → users-BSiXsvcu.js} +1 -1
- package/static/dashboard/assets/{welcome-D5mKF-J3.js → welcome-C96YFTXf.js} +3 -3
- package/static/dashboard/assets/{widget-signin-BmCBYJgF.js → widget-signin-DIvRFGYL.js} +1 -1
- package/static/dashboard/assets/you-CNN1L9wO.js +1 -0
- package/static/dashboard/assets/{zod-D7wsVto4.js → zod-BXAKx0ML.js} +1 -1
- package/static/dashboard/index.html +2 -2
- package/static/widget/build.json +2 -2
- package/static/widget/snag.dock.js +3 -3
- package/static/widget/snag.js +1 -1
- package/static/widget/snag.runtime.js +1 -1
- package/static/dashboard/assets/InstallTag-BRvgfS91.js +0 -1
- package/static/dashboard/assets/McpTokens--C1TeZqq.js +0 -1
- package/static/dashboard/assets/index-COORBw3J.js +0 -169
- package/static/dashboard/assets/index-CpG77B7f.css +0 -1
- package/static/dashboard/assets/invite-Df7qdHBL.js +0 -1
- package/static/dashboard/assets/s._site-BQiiE9w4.js +0 -1
- package/static/dashboard/assets/s._site.reviewers-BCQWB5GA.js +0 -1
- package/static/dashboard/assets/sign-in-Q4AWMmvk.js +0 -1
- package/static/dashboard/assets/sites-BKsg9Pla.js +0 -1
- package/static/dashboard/assets/studio-CSGo60dt.js +0 -1
- package/static/dashboard/assets/studio-ytRb_WCk.js +0 -1
- package/static/dashboard/assets/studio.index-Cul4Sj15.js +0 -1
- package/static/dashboard/assets/studio.integrations-CC61jGXL.js +0 -1
- package/static/dashboard/assets/studio.members-DEM1MjLy.js +0 -6
- package/static/dashboard/assets/useQuery-DT3w11tR.js +0 -1
- package/static/dashboard/assets/useRender-Bu6Vyu1g.js +0 -1
- package/static/dashboard/assets/you-Dsp9kUVS.js +0 -1
package/dist/routes/orgs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orgs.js","sourceRoot":"","sources":["../../src/routes/orgs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,EAAoB,MAAM,YAAY,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"orgs.js","sourceRoot":"","sources":["../../src/routes/orgs.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/owner.js
CHANGED
|
@@ -2,7 +2,8 @@ import { Hono } from "hono";
|
|
|
2
2
|
import { randomUUID, randomBytes, createHash, timingSafeEqual, scryptSync } from "node:crypto";
|
|
3
3
|
import { DASHBOARD_SESSION_COOKIE, DASHBOARD_CSRF_COOKIE, HTTP_HEADER, ID_PREFIX } from "../vendor/types/names.js";
|
|
4
4
|
import { usage } from "../plan.js";
|
|
5
|
-
import {
|
|
5
|
+
import { studiosIn } from "../orgs.js";
|
|
6
|
+
import { firstOrgIdIn } from "../instance/settings.js";
|
|
6
7
|
import { inOrg, maintenance } from "../db/scope.js";
|
|
7
8
|
import { effectiveWriteMode } from "./sessions.js";
|
|
8
9
|
import { pendingMigrations } from "../db/migrate.js";
|
|
@@ -240,11 +241,42 @@ export function ownerRoutes(deps) {
|
|
|
240
241
|
const token = randomBytes(32).toString("base64url");
|
|
241
242
|
const csrf = randomBytes(32).toString("base64url");
|
|
242
243
|
const expires = new Date(now().getTime() + ABSOLUTE_MS);
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
244
|
+
/*
|
|
245
|
+
* The session is opened only if the password that was just verified is
|
|
246
|
+
* STILL the password, checked under a lock on the person's row.
|
|
247
|
+
*
|
|
248
|
+
* The hash above was read, then a tenth of a second of scrypt was spent
|
|
249
|
+
* on it, and until 2026-11-10 the session was then inserted without
|
|
250
|
+
* looking again. A password changed in that tenth of a second — by a
|
|
251
|
+
* mailed reset, by `snagset passwd`, on the account page — revokes the
|
|
252
|
+
* sessions that exist at that instant, and this one did not exist yet: it
|
|
253
|
+
* arrived a moment later and was good for thirty days. Whoever knew the
|
|
254
|
+
* old password only had to be signing in at the time, and an attacker who
|
|
255
|
+
* knows it can arrange to be, in a loop.
|
|
256
|
+
*
|
|
257
|
+
* FOR SHARE waits for a change in flight (every one of those takes this
|
|
258
|
+
* row for update first) and then reads what it committed; holding it to
|
|
259
|
+
* the INSERT makes a change that starts now wait for this session to
|
|
260
|
+
* exist, so its revoke finds it. Either order, nothing outlives the change.
|
|
261
|
+
*/
|
|
262
|
+
const opened = await maintenance(sql, async (tx) => {
|
|
263
|
+
const [still] = await tx `
|
|
264
|
+
SELECT id FROM users
|
|
265
|
+
WHERE id = ${user.id} AND deleted_at IS NULL AND password_hash = ${user.password_hash}
|
|
266
|
+
FOR SHARE
|
|
267
|
+
`;
|
|
268
|
+
if (!still)
|
|
269
|
+
return false;
|
|
270
|
+
await tx `
|
|
271
|
+
INSERT INTO user_sessions (id, org_id, user_id, token_hash, user_agent, expires_at)
|
|
272
|
+
VALUES (${randomUUID()}, ${user.org_id}, ${user.id}, ${sha256(token)},
|
|
273
|
+
${(c.req.header("User-Agent") ?? "").slice(0, 400)}, ${expires})
|
|
274
|
+
`;
|
|
275
|
+
return true;
|
|
276
|
+
});
|
|
277
|
+
// The one sentence, as for every other failure here: the password that was typed is no longer one.
|
|
278
|
+
if (!opened)
|
|
279
|
+
return fail(c, 401, "invalid_credentials", "That email address and password do not match an account.");
|
|
248
280
|
setSessionCookies(c, token, csrf, deps.secure, Math.floor(ABSOLUTE_MS / 1000));
|
|
249
281
|
// No id, for the reason `/api/v1/me` gives: nothing outside the database
|
|
250
282
|
// needs it, and an internal id put on the wire because it was to hand is
|
|
@@ -338,8 +370,19 @@ export function ownerRoutes(deps) {
|
|
|
338
370
|
// shown where a limit exists, silent where there is none.
|
|
339
371
|
return { org, projects, used: await usage(tx, owner.orgId) };
|
|
340
372
|
});
|
|
341
|
-
//
|
|
342
|
-
|
|
373
|
+
// Two questions that cross studios, so one transaction under the
|
|
374
|
+
// maintenance claim. Every studio this person belongs to, for the
|
|
375
|
+
// switcher; the current one is marked. And whether the current one is the
|
|
376
|
+
// operator's, the studio the instance's settings belong to: Studio ›
|
|
377
|
+
// General draws the address, Storage and Mail only then, because from any
|
|
378
|
+
// other studio the instance routes answer 403 (routes/instance.ts) and a
|
|
379
|
+
// page that asked would be drawing a refusal. Together, because this
|
|
380
|
+
// route is asked on every load and again after most writes, and a
|
|
381
|
+
// transaction of its own for the second would be four more round trips.
|
|
382
|
+
const { studios, operator } = await maintenance(sql, async (tx) => ({
|
|
383
|
+
studios: await studiosIn(tx, owner.userId),
|
|
384
|
+
operator: (await firstOrgIdIn(tx)) === owner.orgId,
|
|
385
|
+
}));
|
|
343
386
|
const l = await deps.limits(owner.orgId);
|
|
344
387
|
return c.json({
|
|
345
388
|
limits: {
|
|
@@ -356,7 +399,7 @@ export function ownerRoutes(deps) {
|
|
|
356
399
|
// id put on the wire because it was to hand is how the first one always
|
|
357
400
|
// gets out.
|
|
358
401
|
user: { email: owner.email, name: owner.name, role: owner.role },
|
|
359
|
-
org: { name: org?.name ?? "", slug: org?.slug ?? "" },
|
|
402
|
+
org: { name: org?.name ?? "", slug: org?.slug ?? "", operator },
|
|
360
403
|
orgs: studios.map((s) => ({ slug: s.slug, name: s.name, role: s.role, current: s.id === owner.orgId })),
|
|
361
404
|
signupOpen: deps.signupOpen?.() ?? false,
|
|
362
405
|
// The migrations this build ships that the database has not run
|
package/dist/routes/owner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owner.js","sourceRoot":"","sources":["../../src/routes/owner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"owner.js","sourceRoot":"","sources":["../../src/routes/owner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
import { randomUUID, randomBytes, createHash } from "node:crypto";
|
|
3
|
+
import { hashPassword, setSessionCookies } from "./owner.js";
|
|
4
|
+
import { openSession, SESSION_S } from "../orgs.js";
|
|
5
|
+
import { maintenance } from "../db/scope.js";
|
|
6
|
+
import { isConfigured } from "../mail/index.js";
|
|
7
|
+
import { firstOrgId } from "../instance/settings.js";
|
|
8
|
+
import { looksLikeEmail } from "../email.js";
|
|
9
|
+
/** An hour: long enough to find the mail, short enough that a mailbox read later is not a way in. */
|
|
10
|
+
export const RESET_TTL_MIN = 60;
|
|
11
|
+
const WINDOW_MS = 60 * 60 * 1000;
|
|
12
|
+
const CALLER_PER_WINDOW = 10;
|
|
13
|
+
const MAILBOX_PER_WINDOW = 3;
|
|
14
|
+
const ATTEMPTS_PER_WINDOW = 20;
|
|
15
|
+
const sha256 = (s) => createHash("sha256").update(s, "utf8").digest();
|
|
16
|
+
function fail(c, status, code, message, details) {
|
|
17
|
+
return c.json({ error: { code, message, ...(details ? { details } : {}), requestId: c.get("requestId") } }, status);
|
|
18
|
+
}
|
|
19
|
+
/** The link. One function, so the mail and a test cannot point at different places. */
|
|
20
|
+
export function resetUrl(base, token) {
|
|
21
|
+
return `${base.replace(/\/+$/, "")}/reset#${token}`;
|
|
22
|
+
}
|
|
23
|
+
/** Ordered so the more useful sentence wins: a used link that has since expired was USED. */
|
|
24
|
+
function gone(r, at) {
|
|
25
|
+
if (r.used_at)
|
|
26
|
+
return "link_used";
|
|
27
|
+
if (r.expires_at <= at)
|
|
28
|
+
return "link_expired";
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const SENTENCE = {
|
|
32
|
+
link_not_found: "This reset link is not valid. Check that you copied all of it, or ask for a new one.",
|
|
33
|
+
link_used: "This reset link has already been used. Sign in with the password you chose, or ask for a new link.",
|
|
34
|
+
link_expired: "This reset link has expired. They last an hour. Ask for a new one.",
|
|
35
|
+
};
|
|
36
|
+
/** Why a link cannot be used, as the status and the sentence a route answers with. */
|
|
37
|
+
class Refused extends Error {
|
|
38
|
+
status;
|
|
39
|
+
code;
|
|
40
|
+
constructor(why) {
|
|
41
|
+
super(SENTENCE[why]);
|
|
42
|
+
// 404 for a token nobody minted, 410 for one that existed and no longer
|
|
43
|
+
// works: the page can tell "typo" from "too late", as an invite's does.
|
|
44
|
+
this.status = why === "link_not_found" ? 404 : 410;
|
|
45
|
+
this.code = why;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** A link that can still be used, or the refusal that says why not. The maintenance claim: whose it is, is what this finds out. */
|
|
49
|
+
async function liveLink(sql, token, at) {
|
|
50
|
+
const [row] = token
|
|
51
|
+
? await maintenance(sql, (tx) => tx `
|
|
52
|
+
SELECT id, email, user_id, expires_at, used_at FROM password_resets WHERE token_hash = ${sha256(token)}
|
|
53
|
+
`)
|
|
54
|
+
: [];
|
|
55
|
+
if (!row)
|
|
56
|
+
throw new Refused("link_not_found");
|
|
57
|
+
const why = gone(row, at);
|
|
58
|
+
if (why)
|
|
59
|
+
throw new Refused(why);
|
|
60
|
+
return row;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Bump one hourly counter under the instance's first studio, and say whether
|
|
64
|
+
* it is past its limit. The same statement the mail and MCP budgets run.
|
|
65
|
+
*/
|
|
66
|
+
async function over(sql, anchor, key, limit, nowMs) {
|
|
67
|
+
const now = new Date(nowMs);
|
|
68
|
+
const windowStart = new Date(nowMs - WINDOW_MS);
|
|
69
|
+
const expires = new Date(nowMs + WINDOW_MS);
|
|
70
|
+
const [row] = await maintenance(sql, (tx) => tx `
|
|
71
|
+
INSERT INTO rate_counters (org_id, bucket_key, window_start, count, expires_at)
|
|
72
|
+
VALUES (${anchor}::uuid, ${key}, ${now}, 1, ${expires})
|
|
73
|
+
ON CONFLICT (org_id, bucket_key) DO UPDATE
|
|
74
|
+
SET count = CASE WHEN rate_counters.window_start < ${windowStart} THEN 1 ELSE rate_counters.count + 1 END,
|
|
75
|
+
window_start = CASE WHEN rate_counters.window_start < ${windowStart} THEN ${now} ELSE rate_counters.window_start END,
|
|
76
|
+
expires_at = CASE WHEN rate_counters.window_start < ${windowStart} THEN ${expires} ELSE rate_counters.expires_at END
|
|
77
|
+
RETURNING count::text
|
|
78
|
+
`);
|
|
79
|
+
return !!row && Number(row.count) > limit;
|
|
80
|
+
}
|
|
81
|
+
const callerOf = (c) => c.req.header("x-forwarded-for")?.split(",")[0]?.trim() || c.req.header("x-real-ip")?.trim() || "local";
|
|
82
|
+
const bucket = (what, value) => `reset:${what}:${sha256(value).toString("base64url")}`;
|
|
83
|
+
/**
|
|
84
|
+
* The inbox an address delivers to, for COUNTING only — never for identity,
|
|
85
|
+
* where `a+x@` and `a@` stay two accounts.
|
|
86
|
+
*
|
|
87
|
+
* Folded only where two spellings are KNOWN to be one inbox, which is Gmail:
|
|
88
|
+
* a tag after `+`, and dots anywhere. There one inbox with several accounts
|
|
89
|
+
* would otherwise be as many mailboxes as it has spellings. A tag is a
|
|
90
|
+
* provider's feature and not a rule of mail, and folding it everywhere was a
|
|
91
|
+
* way to lock somebody out: where `victim+1@corp` is not delivered to
|
|
92
|
+
* `victim@corp`, whoever held an account spelled that way spent the other
|
|
93
|
+
* person's three an hour on mail that person never saw.
|
|
94
|
+
*/
|
|
95
|
+
export function mailboxOf(email) {
|
|
96
|
+
const at = email.lastIndexOf("@");
|
|
97
|
+
let local = email.slice(0, at);
|
|
98
|
+
let domain = email.slice(at + 1);
|
|
99
|
+
if (domain === "googlemail.com")
|
|
100
|
+
domain = "gmail.com";
|
|
101
|
+
if (domain === "gmail.com") {
|
|
102
|
+
const plus = local.indexOf("+");
|
|
103
|
+
if (plus > 0)
|
|
104
|
+
local = local.slice(0, plus);
|
|
105
|
+
local = local.replace(/\./g, "");
|
|
106
|
+
}
|
|
107
|
+
return `${local}@${domain}`;
|
|
108
|
+
}
|
|
109
|
+
const NO_MAIL = "This instance cannot send mail, so it cannot mail a reset link. Whoever runs it can set a new password on the server: snagset passwd you@example.com";
|
|
110
|
+
const TOO_MANY = "Too many attempts from this address. Try again in an hour.";
|
|
111
|
+
export function passwordResetRoutes(deps) {
|
|
112
|
+
const { sql } = deps;
|
|
113
|
+
const now = deps.now ?? (() => Date.now());
|
|
114
|
+
const app = new Hono();
|
|
115
|
+
const attempts = new Map();
|
|
116
|
+
/** invites.ts's limiter, the same shape: the lookup and the confirm, in this process's memory. */
|
|
117
|
+
const overAttempts = (c) => {
|
|
118
|
+
const who = callerOf(c);
|
|
119
|
+
const t = now();
|
|
120
|
+
const recent = (attempts.get(who) ?? []).filter((at) => t - at < WINDOW_MS);
|
|
121
|
+
recent.push(t);
|
|
122
|
+
attempts.set(who, recent);
|
|
123
|
+
if (attempts.size > 10_000)
|
|
124
|
+
attempts.clear();
|
|
125
|
+
return recent.length > ATTEMPTS_PER_WINDOW;
|
|
126
|
+
};
|
|
127
|
+
/** `/auth/login`'s origin rule: a cross-site page must not be able to start any of this in a visitor's name. */
|
|
128
|
+
const foreign = (c) => {
|
|
129
|
+
const origin = c.req.header("Origin");
|
|
130
|
+
const host = c.req.header("Host");
|
|
131
|
+
const ours = new Set([deps.origin, host ? `http://${host}` : "", host ? `https://${host}` : ""]);
|
|
132
|
+
return !!origin && !ours.has(origin);
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* Hand the address-dependent half of a request to the platform. It never
|
|
136
|
+
* becomes an unhandled rejection: the caller has been told 202, and what
|
|
137
|
+
* went wrong is the operator's to read.
|
|
138
|
+
*/
|
|
139
|
+
const afterwards = async (work) => {
|
|
140
|
+
const quiet = work().then(() => undefined, (e) => console.error("password reset: the mail did not go —", e instanceof Error ? e.message : e));
|
|
141
|
+
const wait = deps.later ? deps.later(quiet) : undefined;
|
|
142
|
+
if (wait)
|
|
143
|
+
await wait;
|
|
144
|
+
};
|
|
145
|
+
// Bodies here are a token or a password. Never logged, as the invite routes' are not.
|
|
146
|
+
app.use("/auth/reset/*", async (c, next) => {
|
|
147
|
+
c.set("noBodyLogging", true);
|
|
148
|
+
await next();
|
|
149
|
+
});
|
|
150
|
+
app.post("/auth/reset/request", async (c) => {
|
|
151
|
+
if (foreign(c))
|
|
152
|
+
return fail(c, 403, "forbidden", "That request came from another site.");
|
|
153
|
+
const mailer = await deps.mailer();
|
|
154
|
+
if (!isConfigured(mailer))
|
|
155
|
+
return fail(c, 409, "integration_not_configured", NO_MAIL);
|
|
156
|
+
const body = (await c.req.json().catch(() => null));
|
|
157
|
+
const email = typeof body?.email === "string" ? body.email.trim().toLowerCase() : "";
|
|
158
|
+
if (!looksLikeEmail(email)) {
|
|
159
|
+
return fail(c, 400, "validation_failed", "That does not look like an email address.", { field: "email" });
|
|
160
|
+
}
|
|
161
|
+
// No studio means no account to reset, and nowhere to count; the answer is the same.
|
|
162
|
+
const anchor = await firstOrgId(sql);
|
|
163
|
+
if (!anchor)
|
|
164
|
+
return c.json({ ok: true }, 202);
|
|
165
|
+
if (await over(sql, anchor, bucket("from", callerOf(c)), CALLER_PER_WINDOW, now()))
|
|
166
|
+
return fail(c, 429, "quota_exceeded", TOO_MANY);
|
|
167
|
+
// From here on nothing is awaited that knows whose address this is: the
|
|
168
|
+
// answer below is already decided, and it is the same for all of them.
|
|
169
|
+
await afterwards(async () => {
|
|
170
|
+
const [user] = await maintenance(sql, (tx) => tx `
|
|
171
|
+
SELECT id, org_id FROM users WHERE email = ${email} AND deleted_at IS NULL
|
|
172
|
+
`);
|
|
173
|
+
if (!user)
|
|
174
|
+
return;
|
|
175
|
+
if (await over(sql, anchor, bucket("to", mailboxOf(email)), MAILBOX_PER_WINDOW, now()))
|
|
176
|
+
return;
|
|
177
|
+
const token = randomBytes(32).toString("base64url");
|
|
178
|
+
await maintenance(sql, (tx) => tx `
|
|
179
|
+
INSERT INTO password_resets (id, org_id, user_id, token_hash, email, expires_at)
|
|
180
|
+
VALUES (${randomUUID()}, ${user.org_id}::uuid, ${user.id}::uuid, ${sha256(token)}, ${email}, ${new Date(now() + RESET_TTL_MIN * 60_000)})
|
|
181
|
+
`);
|
|
182
|
+
const base = await deps.address();
|
|
183
|
+
await mailer.send({
|
|
184
|
+
to: email,
|
|
185
|
+
subject: "Reset your Snagset password",
|
|
186
|
+
text: `Somebody asked to reset the password for ${email} on ${hostOf(base)}.\n\n` +
|
|
187
|
+
`Open this link to choose a new one:\n${resetUrl(base, token)}\n\n` +
|
|
188
|
+
`It works once and expires in an hour. ` +
|
|
189
|
+
`If that was not you, ignore this email: nothing changes unless the link is used.\n`,
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
// One answer for an account, for no account, and for a mailbox over its cap.
|
|
193
|
+
return c.json({ ok: true }, 202);
|
|
194
|
+
});
|
|
195
|
+
app.post("/auth/reset/lookup", async (c) => {
|
|
196
|
+
if (overAttempts(c))
|
|
197
|
+
return fail(c, 429, "quota_exceeded", TOO_MANY);
|
|
198
|
+
const body = (await c.req.json().catch(() => null));
|
|
199
|
+
const token = typeof body?.token === "string" ? body.token.trim() : "";
|
|
200
|
+
try {
|
|
201
|
+
const link = await liveLink(sql, token, new Date(now()));
|
|
202
|
+
return c.json({ email: link.email, expiresAt: link.expires_at.toISOString() });
|
|
203
|
+
}
|
|
204
|
+
catch (e) {
|
|
205
|
+
if (e instanceof Refused)
|
|
206
|
+
return fail(c, e.status, e.code, e.message);
|
|
207
|
+
throw e;
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
app.post("/auth/reset/confirm", async (c) => {
|
|
211
|
+
if (foreign(c))
|
|
212
|
+
return fail(c, 403, "forbidden", "That request came from another site.");
|
|
213
|
+
if (overAttempts(c))
|
|
214
|
+
return fail(c, 429, "quota_exceeded", TOO_MANY);
|
|
215
|
+
const body = (await c.req.json().catch(() => null));
|
|
216
|
+
const token = typeof body?.token === "string" ? body.token.trim() : "";
|
|
217
|
+
const password = typeof body?.password === "string" ? body.password : "";
|
|
218
|
+
let link;
|
|
219
|
+
try {
|
|
220
|
+
link = await liveLink(sql, token, new Date(now()));
|
|
221
|
+
}
|
|
222
|
+
catch (e) {
|
|
223
|
+
if (e instanceof Refused)
|
|
224
|
+
return fail(c, e.status, e.code, e.message);
|
|
225
|
+
throw e;
|
|
226
|
+
}
|
|
227
|
+
// Twelve, no composition rules — said as setup, sign-up and the account page say it.
|
|
228
|
+
if (password.length < 12) {
|
|
229
|
+
return fail(c, 400, "validation_failed", "The password must be at least 12 characters. A short phrase of real words is fine.", { field: "password" });
|
|
230
|
+
}
|
|
231
|
+
// scrypt before the transaction, as the invite accept does: a tenth of a
|
|
232
|
+
// second of work is not done holding a row lock a racing confirm waits on.
|
|
233
|
+
const passwordHash = hashPassword(password);
|
|
234
|
+
let out;
|
|
235
|
+
try {
|
|
236
|
+
out = await sql.begin(async (tx) => {
|
|
237
|
+
await tx `SET LOCAL app.maintenance = 'on'`;
|
|
238
|
+
// The PERSON's row first, held to the end, and every confirm for
|
|
239
|
+
// them in that order. Two links for one account confirmed together
|
|
240
|
+
// used to take their locks crosswise — each its own link, then the
|
|
241
|
+
// other's — and Postgres ended one as a deadlock, a 500. Queued on
|
|
242
|
+
// this row, the second finds its link already spent and says so.
|
|
243
|
+
// `/auth/login` waits on the same row (owner.ts), which is what
|
|
244
|
+
// stops a sign-in already in flight from outliving the reset.
|
|
245
|
+
const [held] = await tx `SELECT id FROM users WHERE id = ${link.user_id} AND deleted_at IS NULL FOR UPDATE`;
|
|
246
|
+
// Removed from the instance after the link was sent: there is nothing to reset.
|
|
247
|
+
if (!held)
|
|
248
|
+
throw new Refused("link_not_found");
|
|
249
|
+
// THE consume. One statement on the whole live predicate: a link is
|
|
250
|
+
// never used twice, and anything that fails below rolls it back, so
|
|
251
|
+
// it is never spent on nothing.
|
|
252
|
+
const [won] = await tx `
|
|
253
|
+
UPDATE password_resets SET used_at = now()
|
|
254
|
+
WHERE id = ${link.id} AND used_at IS NULL AND expires_at > now()
|
|
255
|
+
RETURNING id
|
|
256
|
+
`;
|
|
257
|
+
if (!won) {
|
|
258
|
+
const [again] = await tx `SELECT used_at, expires_at FROM password_resets WHERE id = ${link.id}`;
|
|
259
|
+
throw new Refused(again ? gone(again, new Date()) ?? "link_used" : "link_used");
|
|
260
|
+
}
|
|
261
|
+
// The mailbox is proven by the link having arrived, whatever the column said before.
|
|
262
|
+
const [user] = await tx `
|
|
263
|
+
UPDATE users SET password_hash = ${passwordHash}, email_verified = true, updated_at = now()
|
|
264
|
+
WHERE id = ${link.user_id} AND deleted_at IS NULL
|
|
265
|
+
RETURNING id, org_id, email, name
|
|
266
|
+
`;
|
|
267
|
+
if (!user)
|
|
268
|
+
throw new Refused("link_not_found");
|
|
269
|
+
// What `snagset passwd` does: whoever knew the old password is signed out everywhere.
|
|
270
|
+
await tx `UPDATE user_sessions SET revoked_at = now() WHERE user_id = ${user.id} AND revoked_at IS NULL`;
|
|
271
|
+
// Everywhere includes the widget. A member's widget session was minted
|
|
272
|
+
// from a dashboard session and refreshes on its own for twelve hours;
|
|
273
|
+
// this is the per-identity sign-out a removal uses (members.ts), so
|
|
274
|
+
// one minted before this instant is refused at its next request.
|
|
275
|
+
await tx `UPDATE reviewers SET identity_valid_after = now() WHERE user_id = ${user.id}`;
|
|
276
|
+
// And every other reset link still out for this person dies with the password it would have replaced.
|
|
277
|
+
await tx `UPDATE password_resets SET used_at = now() WHERE user_id = ${user.id} AND used_at IS NULL`;
|
|
278
|
+
// Signed in exactly as `/auth/login` signs in, to the home studio.
|
|
279
|
+
const session = await openSession(tx, { orgId: user.org_id, userId: user.id, userAgent: c.req.header("User-Agent") ?? "" });
|
|
280
|
+
return { email: user.email, name: user.name, session };
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
catch (e) {
|
|
284
|
+
if (e instanceof Refused)
|
|
285
|
+
return fail(c, e.status, e.code, e.message);
|
|
286
|
+
throw e;
|
|
287
|
+
}
|
|
288
|
+
setSessionCookies(c, out.session.token, out.session.csrf, deps.secure, SESSION_S);
|
|
289
|
+
return c.json({ user: { email: out.email, name: out.name }, csrfToken: out.session.csrf });
|
|
290
|
+
});
|
|
291
|
+
return app;
|
|
292
|
+
}
|
|
293
|
+
/** The instance's name in a mail: its host, which is what the person typed to get here. */
|
|
294
|
+
function hostOf(base) {
|
|
295
|
+
try {
|
|
296
|
+
return new URL(base).host;
|
|
297
|
+
}
|
|
298
|
+
catch {
|
|
299
|
+
return base;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=passwordReset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passwordReset.js","sourceRoot":"","sources":["../../src/routes/passwordReset.ts"],"names":[],"mappings":"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"}
|