@profullstack/agenticjobs 0.1.1 → 0.3.0

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.
Files changed (45) hide show
  1. package/README.md +34 -1
  2. package/dist/cli/index.js +101 -2
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/cli/manage.d.ts +33 -0
  5. package/dist/cli/manage.js +120 -0
  6. package/dist/cli/manage.js.map +1 -0
  7. package/dist/client/login.d.ts +15 -0
  8. package/dist/client/login.js +18 -5
  9. package/dist/client/login.js.map +1 -1
  10. package/dist/config.d.ts +12 -2
  11. package/dist/config.js +44 -4
  12. package/dist/config.js.map +1 -1
  13. package/dist/core/auth.d.ts +2 -0
  14. package/dist/core/auth.js +2 -1
  15. package/dist/core/auth.js.map +1 -1
  16. package/dist/core/mail.d.ts +64 -0
  17. package/dist/core/mail.js +125 -0
  18. package/dist/core/mail.js.map +1 -0
  19. package/dist/directory/fetch.d.ts +1 -1
  20. package/dist/directory/registry.d.ts +1 -0
  21. package/dist/directory/registry.js +17 -1
  22. package/dist/directory/registry.js.map +1 -1
  23. package/dist/server/app.d.ts +6 -1
  24. package/dist/server/app.js +7 -2
  25. package/dist/server/app.js.map +1 -1
  26. package/dist/server/deps.d.ts +3 -0
  27. package/dist/server/routes/api.js +25 -8
  28. package/dist/server/routes/api.js.map +1 -1
  29. package/dist/server/routes/discovery.js +19 -0
  30. package/dist/server/routes/discovery.js.map +1 -1
  31. package/dist/server/routes/pages.js +15 -5
  32. package/dist/server/routes/pages.js.map +1 -1
  33. package/dist/server/serve.js +22 -7
  34. package/dist/server/serve.js.map +1 -1
  35. package/dist/views/auth.d.ts +1 -1
  36. package/dist/views/auth.js +3 -1
  37. package/dist/views/auth.js.map +1 -1
  38. package/dist/views/docs.js +8 -5
  39. package/dist/views/docs.js.map +1 -1
  40. package/dist/views/jobs.d.ts +4 -0
  41. package/dist/views/jobs.js +2 -1
  42. package/dist/views/jobs.js.map +1 -1
  43. package/package.json +16 -17
  44. package/web/public/app.css +30 -0
  45. package/web/public/install.sh +152 -0
package/dist/config.js CHANGED
@@ -8,6 +8,45 @@ import { createHash, randomBytes } from 'node:crypto';
8
8
  function trimSlash(value) {
9
9
  return value.replace(/\/+$/, '');
10
10
  }
11
+ /**
12
+ * A From: address that is right by default on a real deploy.
13
+ *
14
+ * Resend rejects a sender whose domain is not verified, so the only address
15
+ * with a chance of working is one on the domain the board is already served
16
+ * from. A port in the host means a laptop, where nothing is sent anyway.
17
+ */
18
+ function defaultMailFrom(publicUrl, boardName) {
19
+ let host;
20
+ try {
21
+ host = new URL(publicUrl).hostname;
22
+ }
23
+ catch {
24
+ host = 'localhost';
25
+ }
26
+ if (host === 'localhost' || host === '127.0.0.1' || host === '::1')
27
+ return 'jobs@localhost';
28
+ // A display name containing a comma or a quote needs quoting to stay one
29
+ // address, and quoting a name is never wrong, so it is always quoted.
30
+ return `"${boardName.replace(/["\\]/g, '')}" <jobs@${host}>`;
31
+ }
32
+ /**
33
+ * Are these two URLs the same board?
34
+ *
35
+ * Compared by origin because a trailing slash, an explicit `:443` and a
36
+ * differing case in the host all name the same instance. Used to keep a board
37
+ * out of its own directory: the flagship runs both roles, so it names itself
38
+ * in DIRECTORY_URL and would otherwise announce its way into its own listing.
39
+ */
40
+ export function sameOrigin(a, b) {
41
+ if (a === null || b === null)
42
+ return false;
43
+ try {
44
+ return new URL(a).origin.toLowerCase() === new URL(b).origin.toLowerCase();
45
+ }
46
+ catch {
47
+ return false;
48
+ }
49
+ }
11
50
  function flag(value, fallback = false) {
12
51
  if (value === undefined || value.trim() === '')
13
52
  return fallback;
@@ -23,13 +62,14 @@ export function loadConfig(env = process.env) {
23
62
  const ephemeralSecret = supplied === '';
24
63
  const secret = ephemeralSecret ? randomBytes(32).toString('hex') : supplied;
25
64
  const directoryRaw = env['DIRECTORY_URL']?.trim() ?? '';
65
+ const boardName = env['BOARD_NAME']?.trim() || 'Agentic Jobs';
26
66
  return {
27
67
  host: env['HOST']?.trim() || '0.0.0.0',
28
68
  databaseUrl: env['DATABASE_URL']?.trim() ||
29
69
  'postgres://agenticjobs:agenticjobs@localhost:5432/agenticjobs',
30
70
  port,
31
71
  publicUrl,
32
- boardName: env['BOARD_NAME']?.trim() || 'Agentic Jobs',
72
+ boardName,
33
73
  boardTagline: env['BOARD_TAGLINE']?.trim() || 'Jobs posted here, not scraped from somewhere else.',
34
74
  topics: (env['BOARD_TOPICS'] ?? 'agentic,ai,engineering')
35
75
  .split(',')
@@ -41,13 +81,13 @@ export function loadConfig(env = process.env) {
41
81
  directoryUrl: directoryRaw === '' ? null : trimSlash(directoryRaw),
42
82
  announce: flag(env['ANNOUNCE']),
43
83
  isDirectory: flag(env['DIRECTORY']),
44
- smtpUrl: env['SMTP_URL']?.trim() || null,
45
- mailFrom: env['MAIL_FROM']?.trim() || 'jobs@localhost',
84
+ resendApiKey: env['RESEND_API_KEY']?.trim() || null,
85
+ mailFrom: env['MAIL_FROM']?.trim() || defaultMailFrom(publicUrl, boardName),
46
86
  version: env['npm_package_version']?.trim() || VERSION,
47
87
  };
48
88
  }
49
89
  /** Kept in step with package.json by the release script. */
50
- export const VERSION = '0.1.1';
90
+ export const VERSION = '0.3.0';
51
91
  export const SOFTWARE_NAME = 'agenticjobs';
52
92
  /**
53
93
  * Tokens are stored as a hash of what was handed out, so this is the only
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,8 @@ export interface Viewer {
19
19
  */
20
20
  viaToken: boolean;
21
21
  }
22
+ /** Exported so the sign-in email can state the same number it enforces. */
23
+ export declare const MAGIC_TTL_MS: number;
22
24
  export declare const SESSION_COOKIE = "aj_session";
23
25
  export declare function normaliseEmail(value: unknown): string | null;
24
26
  interface UserRow {
package/dist/core/auth.js CHANGED
@@ -9,7 +9,8 @@
9
9
  import { hashToken, mintToken } from "../config.js";
10
10
  import { clean } from "../schema/text.js";
11
11
  const SESSION_TTL_MS = 30 * 24 * 60 * 60 * 1000;
12
- const MAGIC_TTL_MS = 15 * 60 * 1000;
12
+ /** Exported so the sign-in email can state the same number it enforces. */
13
+ export const MAGIC_TTL_MS = 15 * 60 * 1000;
13
14
  const DEVICE_TTL_MS = 10 * 60 * 1000;
14
15
  const CHALLENGE_TTL_MS = 5 * 60 * 1000;
15
16
  export const SESSION_COOKIE = 'aj_session';
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Sending the one email this board sends: a sign-in link.
3
+ *
4
+ * Delivery is optional and always has been - a laptop run has no mail
5
+ * provider, and the link is printed instead. What was wrong before is that
6
+ * *every* instance took that path, because the config had an SMTP_URL nobody
7
+ * ever read. `delivered` is a fact about a send that happened now, not a
8
+ * restatement of which environment variables are set.
9
+ *
10
+ * @profullstack/emailer wraps Resend's HTTP API with no runtime dependencies:
11
+ * a fetch is the whole client, so there is no connection to hold and no port
12
+ * to be blocked.
13
+ */
14
+ import type { Config } from '../config.ts';
15
+ /** How long a link lasts, in minutes, taken from the TTL that enforces it. */
16
+ export declare const MAGIC_LINK_MINUTES: number;
17
+ export interface Message {
18
+ to: string;
19
+ subject: string;
20
+ html: string;
21
+ text: string;
22
+ }
23
+ export interface Mailer {
24
+ send: (message: Message) => Promise<boolean>;
25
+ }
26
+ /**
27
+ * A mailer, or null when this instance is not configured to send.
28
+ *
29
+ * Null is a supported state, not a failure: it is what makes `pnpm dev` work
30
+ * without an account anywhere.
31
+ */
32
+ export declare function createMailer(config: Config, log?: (message: string) => void): Mailer | null;
33
+ /**
34
+ * The sign-in email.
35
+ *
36
+ * When the link came from a terminal it carries that terminal's code, and the
37
+ * email says so and shows it. That is not decoration: a device flow where the
38
+ * mail cannot be matched to the request in front of you is one where a link
39
+ * phished out of an inbox approves an attacker's terminal instead.
40
+ */
41
+ export declare function magicLinkMessage(options: {
42
+ to: string;
43
+ url: string;
44
+ boardName: string;
45
+ redirect: string | null;
46
+ minutes: number;
47
+ }): Message;
48
+ /**
49
+ * Send the sign-in link, or fall back to the server log.
50
+ *
51
+ * The log is the fallback for both "no provider configured" and "the provider
52
+ * refused": the link is minted either way and is the only way into the
53
+ * account, so an operator being able to read it out of their own logs beats
54
+ * losing it. It goes to the *log*, never to the browser - a page that shows
55
+ * the link to whoever typed the address is not a sign-in, it is a way to take
56
+ * over any address you can spell.
57
+ */
58
+ export declare function deliverMagicLink(options: {
59
+ mailer: Mailer | null;
60
+ boardName: string;
61
+ email: string;
62
+ url: string;
63
+ redirect: string | null;
64
+ }): Promise<boolean>;
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Sending the one email this board sends: a sign-in link.
3
+ *
4
+ * Delivery is optional and always has been - a laptop run has no mail
5
+ * provider, and the link is printed instead. What was wrong before is that
6
+ * *every* instance took that path, because the config had an SMTP_URL nobody
7
+ * ever read. `delivered` is a fact about a send that happened now, not a
8
+ * restatement of which environment variables are set.
9
+ *
10
+ * @profullstack/emailer wraps Resend's HTTP API with no runtime dependencies:
11
+ * a fetch is the whole client, so there is no connection to hold and no port
12
+ * to be blocked.
13
+ */
14
+ import { createEmailer } from '@profullstack/emailer';
15
+ import { escapeHtml } from "../markup/escape.js";
16
+ import { MAGIC_TTL_MS } from "./auth.js";
17
+ /** How long a link lasts, in minutes, taken from the TTL that enforces it. */
18
+ export const MAGIC_LINK_MINUTES = Math.round(MAGIC_TTL_MS / 60_000);
19
+ /**
20
+ * A mailer, or null when this instance is not configured to send.
21
+ *
22
+ * Null is a supported state, not a failure: it is what makes `pnpm dev` work
23
+ * without an account anywhere.
24
+ */
25
+ export function createMailer(config, log = (message) => console.error(message)) {
26
+ if (config.resendApiKey === null)
27
+ return null;
28
+ const emailer = createEmailer({ resendApiKey: config.resendApiKey, defaultFrom: config.mailFrom });
29
+ return {
30
+ send: async (message) => {
31
+ try {
32
+ const result = await emailer.send({
33
+ from: config.mailFrom,
34
+ to: message.to,
35
+ subject: message.subject,
36
+ html: message.html,
37
+ text: message.text,
38
+ });
39
+ // An unverified sending domain is a 403 whatever the key is, and a
40
+ // dead key is a 401. Both arrive here as `sent: false` with the
41
+ // provider's own sentence, which is the thing worth logging.
42
+ if (!result.sent)
43
+ log(`mail: ${message.to} not sent: ${result.error ?? 'unknown error'}`);
44
+ return result.sent;
45
+ }
46
+ catch (error) {
47
+ // A provider outage must not turn a sign-in attempt into a 500. The
48
+ // link is already minted and still works; the person just has to ask
49
+ // for another one.
50
+ log(`mail: ${message.to} failed: ${error.message}`);
51
+ return false;
52
+ }
53
+ },
54
+ };
55
+ }
56
+ /** The `code` a /device redirect carries, so the email can show it. */
57
+ function deviceCodeOf(redirect) {
58
+ if (redirect === null || !redirect.startsWith('/device'))
59
+ return null;
60
+ const query = redirect.indexOf('?');
61
+ if (query === -1)
62
+ return null;
63
+ const code = new URLSearchParams(redirect.slice(query + 1)).get('code');
64
+ return code === null || code.trim() === '' ? null : code.trim();
65
+ }
66
+ /**
67
+ * The sign-in email.
68
+ *
69
+ * When the link came from a terminal it carries that terminal's code, and the
70
+ * email says so and shows it. That is not decoration: a device flow where the
71
+ * mail cannot be matched to the request in front of you is one where a link
72
+ * phished out of an inbox approves an attacker's terminal instead.
73
+ */
74
+ export function magicLinkMessage(options) {
75
+ const code = deviceCodeOf(options.redirect);
76
+ const board = options.boardName;
77
+ const subject = code === null ? `Sign in to ${board}` : `Approve your terminal on ${board}`;
78
+ const lead = code === null
79
+ ? `Use the link below to sign in to ${board}. There is no password.`
80
+ : `A terminal asked to sign in to ${board} with the code ${code}. Open the link below to approve it.`;
81
+ const caution = code === null
82
+ ? `If you did not ask to sign in, ignore this email. Nobody can use the link but you.`
83
+ : `If that code is not the one your terminal is showing, do not open the link.`;
84
+ const text = [
85
+ lead,
86
+ '',
87
+ options.url,
88
+ '',
89
+ `The link lasts ${options.minutes} minutes and works once.`,
90
+ caution,
91
+ ].join('\n');
92
+ const url = escapeHtml(options.url);
93
+ const html = [
94
+ `<p>${escapeHtml(lead)}</p>`,
95
+ `<p><a href="${url}">${url}</a></p>`,
96
+ `<p style="color:#666;font-size:12px">The link lasts ${options.minutes} minutes and works once. ${escapeHtml(caution)}</p>`,
97
+ ].join('');
98
+ return { to: options.to, subject, html, text };
99
+ }
100
+ /**
101
+ * Send the sign-in link, or fall back to the server log.
102
+ *
103
+ * The log is the fallback for both "no provider configured" and "the provider
104
+ * refused": the link is minted either way and is the only way into the
105
+ * account, so an operator being able to read it out of their own logs beats
106
+ * losing it. It goes to the *log*, never to the browser - a page that shows
107
+ * the link to whoever typed the address is not a sign-in, it is a way to take
108
+ * over any address you can spell.
109
+ */
110
+ export async function deliverMagicLink(options) {
111
+ if (options.mailer !== null) {
112
+ const sent = await options.mailer.send(magicLinkMessage({
113
+ to: options.email,
114
+ url: options.url,
115
+ boardName: options.boardName,
116
+ redirect: options.redirect,
117
+ minutes: MAGIC_LINK_MINUTES,
118
+ }));
119
+ if (sent)
120
+ return true;
121
+ }
122
+ console.log(`magic link for ${options.email}: ${options.url}`);
123
+ return false;
124
+ }
125
+ //# sourceMappingURL=mail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mail.js","sourceRoot":"","sources":["../../src/core/mail.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@
8
8
  * response says about where it came from.
9
9
  */
10
10
  import { type InstanceDescriptor } from '../schema/instance.ts';
11
- export declare const USER_AGENT = "agenticjobs/0.1.1 (+https://agenticjobs.work)";
11
+ export declare const USER_AGENT = "agenticjobs/0.3.0 (+https://agenticjobs.work)";
12
12
  export declare class FetchProblem extends Error {
13
13
  }
14
14
  export interface FetchOptions {
@@ -51,5 +51,6 @@ export interface SweepResult {
51
51
  export declare function sweep(pool: pg.Pool, options?: {
52
52
  limit?: number;
53
53
  concurrency?: number;
54
+ self?: string;
54
55
  }): Promise<SweepResult>;
55
56
  export declare function blockInstance(pool: pg.Pool, url: string, reason: string): Promise<boolean>;
@@ -109,12 +109,28 @@ export async function listTopics(pool) {
109
109
  * is the better part of a day.
110
110
  */
111
111
  export async function sweep(pool, options = {}) {
112
+ // A board that announced itself before it learned not to still has a row
113
+ // saying so, and refusing new self-announcements does not remove it. The
114
+ // sweep is where the directory reconciles what it holds with what is true,
115
+ // so this is where that row goes - which also means a board that turns the
116
+ // guard on later heals itself rather than needing the row deleted by hand.
117
+ let removedSelf = 0;
118
+ const self = options.self === undefined ? null : publishable(options.self);
119
+ if (self !== null) {
120
+ const gone = await pool.query(`delete from instances where url = $1`, [self.origin]);
121
+ removedSelf = gone.rowCount ?? 0;
122
+ }
112
123
  const due = await pool.query(`select url from instances
113
124
  where blocked = false
114
125
  order by checked_at asc
115
126
  limit $1`, [Math.min(500, Math.max(1, options.limit ?? 100))]);
116
127
  const urls = due.rows.map((row) => row.url);
117
- const result = { checked: urls.length, ok: 0, failed: 0, dropped: 0 };
128
+ const result = {
129
+ checked: urls.length,
130
+ ok: 0,
131
+ failed: 0,
132
+ dropped: removedSelf,
133
+ };
118
134
  const concurrency = Math.min(16, Math.max(1, options.concurrency ?? 8));
119
135
  let cursor = 0;
120
136
  const workers = Array.from({ length: Math.min(concurrency, urls.length) }, async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/directory/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/directory/registry.ts"],"names":[],"mappings":"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"}
@@ -9,5 +9,10 @@
9
9
  import { Hono } from 'hono';
10
10
  import type pg from 'pg';
11
11
  import type { Config } from '../config.ts';
12
+ import type { Mailer } from '../core/mail.ts';
12
13
  import type { AppEnv } from './deps.ts';
13
- export declare function createApp(pool: pg.Pool, config: Config): Hono<AppEnv>;
14
+ /**
15
+ * The mailer is built once, here, and injectable so a test can watch what
16
+ * would have been sent without a provider or a network.
17
+ */
18
+ export declare function createApp(pool: pg.Pool, config: Config, mailer?: Mailer | null): Hono<AppEnv>;
@@ -15,8 +15,13 @@ import { mcpRoutes } from "./routes/mcp.js";
15
15
  import { passkeyRoutes } from "./routes/passkey.js";
16
16
  import { apiCors, securityHeaders, withViewer } from "./middleware.js";
17
17
  import { Layout } from "../views/layout.js";
18
- export function createApp(pool, config) {
19
- const deps = { pool, config };
18
+ import { createMailer } from "../core/mail.js";
19
+ /**
20
+ * The mailer is built once, here, and injectable so a test can watch what
21
+ * would have been sent without a provider or a network.
22
+ */
23
+ export function createApp(pool, config, mailer = createMailer(config)) {
24
+ const deps = { pool, config, mailer };
20
25
  const app = new Hono();
21
26
  app.use('*', withViewer(deps));
22
27
  app.use('*', securityHeaders());
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.tsx"],"names":[],"mappings":"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"}
@@ -1,9 +1,12 @@
1
1
  import type pg from 'pg';
2
2
  import type { Config } from '../config.ts';
3
3
  import type { Viewer } from '../core/auth.ts';
4
+ import type { Mailer } from '../core/mail.ts';
4
5
  export interface Deps {
5
6
  pool: pg.Pool;
6
7
  config: Config;
8
+ /** Null when this instance sends no mail, which is a supported state. */
9
+ mailer: Mailer | null;
7
10
  }
8
11
  /**
9
12
  * Hono's per-request bag.
@@ -14,12 +14,14 @@
14
14
  * listings need a key is a job board nobody's agent will ever read.
15
15
  */
16
16
  import { Hono } from 'hono';
17
- import { approveDeviceCode, createSession, ensureUser, normaliseEmail, pollDeviceAuth, requireAdmin, startDeviceAuth, startMagicLink, } from "../../core/auth.js";
17
+ import { approveDeviceCode, createSession, ensureUser, normaliseEmail, pollDeviceAuth, requireAdmin, safeRedirect, startDeviceAuth, startMagicLink, } from "../../core/auth.js";
18
18
  import { createApplication, listApplications, listDraftApplications, recentApplicationCount, submitApplication, validateApplication, } from "../../core/applications.js";
19
19
  import { countJobs, createJob, getJobBySlug, normaliseInput, searchJobs, setStatus, } from "../../core/jobs.js";
20
20
  import { createOrg, getOrgBySlug, isMember, listOrgs, listOrgsForUser } from "../../core/orgs.js";
21
21
  import { createResume, deleteResume, getResume, getResumeById, getSharedResume, isVisibility, listResumes, updateResume, } from "../../core/resumes.js";
22
22
  import { importDocument, ImportProblem, MAX_UPLOAD_BYTES } from "../../core/import.js";
23
+ import { deliverMagicLink } from "../../core/mail.js";
24
+ import { sameOrigin } from "../../config.js";
23
25
  import { announce, Blocked, listInstances, listTopics } from "../../directory/registry.js";
24
26
  import { federatedSearch, targetsFromDescriptors } from "../../directory/federate.js";
25
27
  import { FetchProblem } from "../../directory/fetch.js";
@@ -426,18 +428,26 @@ export function apiRoutes() {
426
428
  });
427
429
  // --- sign in ----------------------------------------------------------
428
430
  api.post('/auth/magic-link', async (c) => {
429
- const { pool, config } = c.get('deps');
431
+ const { pool, config, mailer } = c.get('deps');
430
432
  const body = await readBody(c);
431
433
  const email = normaliseEmail(body['email']);
432
434
  if (email === null)
433
435
  return fail(c, 400, 'invalid', 'That is not an email address.');
434
- const link = await startMagicLink(pool, email, null);
436
+ // A terminal signing up asks for the link to land on /device with its code
437
+ // already filled in, so one click both creates the account and approves the
438
+ // terminal. safeRedirect keeps this to same-origin paths: an open redirect
439
+ // on a sign-in link is a phish.
440
+ const redirect = safeRedirect(body['redirect']);
441
+ const link = await startMagicLink(pool, email, redirect);
435
442
  const url = `${config.publicUrl}/auth/callback?token=${link.token}`;
436
- // Without SMTP the link is logged rather than silently dropped, which is
437
- // what makes a laptop run work at all.
438
- if (config.smtpUrl === null)
439
- console.log(`magic link for ${email}: ${url}`);
440
- return c.json({ ok: true, expiresAt: link.expiresAt, delivered: config.smtpUrl !== null });
443
+ const delivered = await deliverMagicLink({
444
+ mailer,
445
+ boardName: config.boardName,
446
+ email,
447
+ url,
448
+ redirect,
449
+ });
450
+ return c.json({ ok: true, expiresAt: link.expiresAt, delivered });
441
451
  });
442
452
  api.post('/auth/device', async (c) => {
443
453
  const { pool, config } = c.get('deps');
@@ -493,6 +503,13 @@ export function apiRoutes() {
493
503
  }
494
504
  const body = await readBody(c);
495
505
  const url = typeof body['url'] === 'string' ? body['url'] : '';
506
+ // A directory does not list itself. Refused here rather than only at the
507
+ // announcing end, because anyone may POST any URL: without this, a third
508
+ // party could put this board into its own listing by announcing on its
509
+ // behalf.
510
+ if (sameOrigin(url, config.publicUrl)) {
511
+ return fail(c, 400, 'self', 'A board is not listed in its own directory.');
512
+ }
496
513
  try {
497
514
  const listing = await announce(pool, url);
498
515
  return c.json({ ok: true, instance: listing });