@actuate-media/cms-core 0.61.0 → 0.63.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.
- package/CHANGELOG.md +25 -0
- package/dist/__tests__/api/email-settings-routes.test.d.ts +2 -0
- package/dist/__tests__/api/email-settings-routes.test.d.ts.map +1 -0
- package/dist/__tests__/api/email-settings-routes.test.js +240 -0
- package/dist/__tests__/api/email-settings-routes.test.js.map +1 -0
- package/dist/__tests__/api/field-values-routes.test.d.ts +2 -0
- package/dist/__tests__/api/field-values-routes.test.d.ts.map +1 -0
- package/dist/__tests__/api/field-values-routes.test.js +147 -0
- package/dist/__tests__/api/field-values-routes.test.js.map +1 -0
- package/dist/__tests__/api/route-contracts.test.js +5 -0
- package/dist/__tests__/api/route-contracts.test.js.map +1 -1
- package/dist/__tests__/collections/presets.test.js +24 -0
- package/dist/__tests__/collections/presets.test.js.map +1 -1
- package/dist/__tests__/email/resolve.test.d.ts +2 -0
- package/dist/__tests__/email/resolve.test.d.ts.map +1 -0
- package/dist/__tests__/email/resolve.test.js +90 -0
- package/dist/__tests__/email/resolve.test.js.map +1 -0
- package/dist/__tests__/email/settings-store.test.d.ts +2 -0
- package/dist/__tests__/email/settings-store.test.d.ts.map +1 -0
- package/dist/__tests__/email/settings-store.test.js +149 -0
- package/dist/__tests__/email/settings-store.test.js.map +1 -0
- package/dist/api/handlers.d.ts.map +1 -1
- package/dist/api/handlers.js +2 -0
- package/dist/api/handlers.js.map +1 -1
- package/dist/api/route-helpers.d.ts +6 -0
- package/dist/api/route-helpers.d.ts.map +1 -1
- package/dist/api/route-helpers.js +13 -0
- package/dist/api/route-helpers.js.map +1 -1
- package/dist/api/routes/documents.d.ts.map +1 -1
- package/dist/api/routes/documents.js +76 -0
- package/dist/api/routes/documents.js.map +1 -1
- package/dist/api/routes/email-settings.d.ts +3 -0
- package/dist/api/routes/email-settings.d.ts.map +1 -0
- package/dist/api/routes/email-settings.js +248 -0
- package/dist/api/routes/email-settings.js.map +1 -0
- package/dist/api/routes/users.js +3 -3
- package/dist/api/routes/users.js.map +1 -1
- package/dist/auth/invites.js +2 -2
- package/dist/auth/invites.js.map +1 -1
- package/dist/auth/reset.js +2 -2
- package/dist/auth/reset.js.map +1 -1
- package/dist/collections/presets.d.ts +8 -0
- package/dist/collections/presets.d.ts.map +1 -1
- package/dist/collections/presets.js +12 -3
- package/dist/collections/presets.js.map +1 -1
- package/dist/email/resolve.d.ts +27 -0
- package/dist/email/resolve.d.ts.map +1 -0
- package/dist/email/resolve.js +68 -0
- package/dist/email/resolve.js.map +1 -0
- package/dist/email/sender.d.ts +36 -0
- package/dist/email/sender.d.ts.map +1 -1
- package/dist/email/sender.js +16 -0
- package/dist/email/sender.js.map +1 -1
- package/dist/email/settings-store.d.ts +116 -0
- package/dist/email/settings-store.d.ts.map +1 -0
- package/dist/email/settings-store.js +222 -0
- package/dist/email/settings-store.js.map +1 -0
- package/dist/fields/index.d.ts +2 -1
- package/dist/fields/index.d.ts.map +1 -1
- package/dist/fields/index.js +1 -1
- package/dist/fields/index.js.map +1 -1
- package/dist/fields/presets.d.ts +15 -0
- package/dist/fields/presets.d.ts.map +1 -1
- package/dist/fields/presets.js +32 -0
- package/dist/fields/presets.js.map +1 -1
- package/dist/forms/notify.js +3 -3
- package/dist/forms/notify.js.map +1 -1
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -61,6 +61,82 @@ export function registerDocumentRoutes(router) {
|
|
|
61
61
|
return internalError(err);
|
|
62
62
|
}
|
|
63
63
|
});
|
|
64
|
+
// Distinct values in use for one field across a collection — powers tag
|
|
65
|
+
// autocomplete and category suggestions in the admin ("UpChat" taxonomy
|
|
66
|
+
// feedback: avoid `AI` / `ai` / `Artificial Intelligence` drift). Registered
|
|
67
|
+
// BEFORE `/collections/:slug/:id` so the literal segment wins the match.
|
|
68
|
+
router.get('/collections/:slug/field-values', async (request, params) => {
|
|
69
|
+
try {
|
|
70
|
+
const auth = await requireAuth(request);
|
|
71
|
+
if (auth.error)
|
|
72
|
+
return auth.error;
|
|
73
|
+
const scopeErr = requireCollectionScope(auth.session, params.slug, 'read');
|
|
74
|
+
if (scopeErr)
|
|
75
|
+
return scopeErr;
|
|
76
|
+
const url = new URL(request.url);
|
|
77
|
+
const fieldName = (url.searchParams.get('field') ?? '').trim();
|
|
78
|
+
const query = (url.searchParams.get('q') ?? '').trim().slice(0, 100).toLowerCase();
|
|
79
|
+
const collectionConfig = getActuateConfig()?.collections?.[params.slug];
|
|
80
|
+
if (!collectionConfig)
|
|
81
|
+
return errorResponse('Collection not found', 404);
|
|
82
|
+
const field = collectionConfig.fields?.[fieldName];
|
|
83
|
+
// Only fields whose values are short editorial labels are aggregatable.
|
|
84
|
+
// Rejecting undeclared fields keeps this from probing arbitrary JSON.
|
|
85
|
+
if (!field || !['text', 'select', 'array'].includes(field.type)) {
|
|
86
|
+
return errorResponse('Field is not suggestible', 400);
|
|
87
|
+
}
|
|
88
|
+
const rows = await db().document.findMany({
|
|
89
|
+
where: { collection: params.slug, deletedAt: null },
|
|
90
|
+
select: { data: true },
|
|
91
|
+
orderBy: { updatedAt: 'desc' },
|
|
92
|
+
// Aggregation cap: recent documents dominate active vocabularies.
|
|
93
|
+
take: 1000,
|
|
94
|
+
});
|
|
95
|
+
// For array fields, values live on each row — either plain strings or
|
|
96
|
+
// objects keyed by the array's first text sub-field (e.g. `{ tag }`).
|
|
97
|
+
const subKey = field.type === 'array'
|
|
98
|
+
? Object.entries(field.fields ?? {}).find(([, def]) => def?.type === 'text')?.[0]
|
|
99
|
+
: undefined;
|
|
100
|
+
const counts = new Map();
|
|
101
|
+
const record = (raw) => {
|
|
102
|
+
const value = typeof raw === 'string' ? raw.trim() : '';
|
|
103
|
+
if (!value)
|
|
104
|
+
return;
|
|
105
|
+
const key = value.toLowerCase();
|
|
106
|
+
const existing = counts.get(key);
|
|
107
|
+
if (existing)
|
|
108
|
+
existing.count += 1;
|
|
109
|
+
else
|
|
110
|
+
counts.set(key, { value, count: 1 });
|
|
111
|
+
};
|
|
112
|
+
for (const row of rows) {
|
|
113
|
+
const data = row.data;
|
|
114
|
+
const raw = data?.[fieldName];
|
|
115
|
+
if (field.type === 'array') {
|
|
116
|
+
if (!Array.isArray(raw))
|
|
117
|
+
continue;
|
|
118
|
+
for (const item of raw) {
|
|
119
|
+
if (typeof item === 'string')
|
|
120
|
+
record(item);
|
|
121
|
+
else if (item && typeof item === 'object' && subKey) {
|
|
122
|
+
record(item[subKey]);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
record(raw);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const values = [...counts.values()]
|
|
131
|
+
.filter((v) => !query || v.value.toLowerCase().includes(query))
|
|
132
|
+
.sort((a, b) => b.count - a.count || a.value.localeCompare(b.value))
|
|
133
|
+
.slice(0, 25);
|
|
134
|
+
return json({ data: { field: fieldName, values } });
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
return internalError(err);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
64
140
|
router.get('/collections/:slug/:id', async (request, params) => {
|
|
65
141
|
try {
|
|
66
142
|
const auth = await requireAuth(request);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../../src/api/routes/documents.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../../src/api/routes/documents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-settings.d.ts","sourceRoot":"","sources":["../../../src/api/routes/email-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAgB7C,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyRnE"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { logEvent } from '../../security/audit.js';
|
|
2
|
+
import { getClientIp } from '../../security/client-ip.js';
|
|
3
|
+
import { getActuateConfig } from '../../config/runtime.js';
|
|
4
|
+
import { guardedDb } from '../guarded-db.js';
|
|
5
|
+
import { json, errorResponse, internalError, hasModel, requireAuth, requireAdminScope, emailTestLimiter, checkRateLimitAsync, } from '../route-helpers.js';
|
|
6
|
+
export function registerEmailSettingsRoutes(router) {
|
|
7
|
+
const db = guardedDb;
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Settings > Email — transactional email provider configuration.
|
|
10
|
+
// Backed by the `__email_config__` document (see `../email/settings-store.ts`).
|
|
11
|
+
// ADMIN-gated. API keys / SMTP passwords are encrypted at rest, NEVER returned.
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
router.get('/email/settings', async (request) => {
|
|
14
|
+
try {
|
|
15
|
+
const auth = await requireAuth(request);
|
|
16
|
+
if (auth.error)
|
|
17
|
+
return auth.error;
|
|
18
|
+
const adminErr = requireAdminScope(auth.session);
|
|
19
|
+
if (adminErr)
|
|
20
|
+
return adminErr;
|
|
21
|
+
const { getEmailConfig, toPublicEmailConfig, detectEnvEmailProvider } = await import('../../email/settings-store.js');
|
|
22
|
+
const { getEmailProviderFactory, getRegisteredEmailSender } = await import('../../email/sender.js');
|
|
23
|
+
const config = await getEmailConfig(db());
|
|
24
|
+
return json({
|
|
25
|
+
data: {
|
|
26
|
+
settings: toPublicEmailConfig(config),
|
|
27
|
+
/** Provider configured via env vars (informational; DB settings win). */
|
|
28
|
+
envProvider: detectEnvEmailProvider(),
|
|
29
|
+
/** Whether plugin-email registered its factory (required for DB-configured sends). */
|
|
30
|
+
factoryAvailable: Boolean(getEmailProviderFactory()),
|
|
31
|
+
/** Whether an env-configured sender is registered as fallback. */
|
|
32
|
+
envSenderActive: Boolean(getRegisteredEmailSender()),
|
|
33
|
+
/** A platform adapter in code takes precedence over everything. */
|
|
34
|
+
platformAdapter: Boolean(getActuateConfig()?.platform?.email),
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
return internalError(err, 'email/settings GET');
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
router.put('/email/settings', async (request) => {
|
|
43
|
+
try {
|
|
44
|
+
const auth = await requireAuth(request);
|
|
45
|
+
if (auth.error)
|
|
46
|
+
return auth.error;
|
|
47
|
+
const adminErr = requireAdminScope(auth.session);
|
|
48
|
+
if (adminErr)
|
|
49
|
+
return adminErr;
|
|
50
|
+
const body = (await request.json().catch(() => null));
|
|
51
|
+
if (!body || typeof body !== 'object') {
|
|
52
|
+
return errorResponse('Request body must be an object', 400);
|
|
53
|
+
}
|
|
54
|
+
const { getEmailConfig, putEmailConfig, toPublicEmailConfig, validateEmailSettingsInput, encryptEmailSecret, isEmailProviderKey, detectEnvEmailProvider, } = await import('../../email/settings-store.js');
|
|
55
|
+
const { clearEmailSenderCache } = await import('../../email/resolve.js');
|
|
56
|
+
const current = await getEmailConfig(db());
|
|
57
|
+
// Keeping an existing key only makes sense while staying on the same
|
|
58
|
+
// provider — switching providers must not silently reuse the old secret.
|
|
59
|
+
const sameProvider = isEmailProviderKey(body.provider) && body.provider === current.provider;
|
|
60
|
+
const validationError = validateEmailSettingsInput(body, {
|
|
61
|
+
hasApiKey: sameProvider && Boolean(current.apiKeyEncrypted),
|
|
62
|
+
});
|
|
63
|
+
if (validationError)
|
|
64
|
+
return errorResponse(validationError, 400);
|
|
65
|
+
// Clearing the configuration (provider: null) wipes everything,
|
|
66
|
+
// including stored secrets.
|
|
67
|
+
if (body.provider === null) {
|
|
68
|
+
const saved = await putEmailConfig(db(), { provider: null }, auth.session.userId);
|
|
69
|
+
clearEmailSenderCache();
|
|
70
|
+
try {
|
|
71
|
+
await logEvent({
|
|
72
|
+
event: 'update_email_settings',
|
|
73
|
+
userId: auth.session.userId,
|
|
74
|
+
ipAddress: getClientIp(request),
|
|
75
|
+
details: { provider: null, source: 'settings.email' },
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
/* never block on audit */
|
|
80
|
+
}
|
|
81
|
+
return json({
|
|
82
|
+
data: { settings: toPublicEmailConfig(saved), envProvider: detectEnvEmailProvider() },
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
const provider = body.provider;
|
|
86
|
+
// Secrets: undefined = keep existing (same provider only), ''/null = clear,
|
|
87
|
+
// string = encrypt + replace.
|
|
88
|
+
let apiKeyEncrypted = sameProvider ? current.apiKeyEncrypted : undefined;
|
|
89
|
+
let apiKeyLast4 = sameProvider ? current.apiKeyLast4 : undefined;
|
|
90
|
+
let keyChanged = false;
|
|
91
|
+
if (body.apiKey !== undefined) {
|
|
92
|
+
if (body.apiKey === null || body.apiKey === '') {
|
|
93
|
+
apiKeyEncrypted = undefined;
|
|
94
|
+
apiKeyLast4 = undefined;
|
|
95
|
+
keyChanged = true;
|
|
96
|
+
}
|
|
97
|
+
else if (typeof body.apiKey === 'string' && body.apiKey.trim()) {
|
|
98
|
+
const enc = await encryptEmailSecret(body.apiKey.trim());
|
|
99
|
+
apiKeyEncrypted = enc.encrypted;
|
|
100
|
+
apiKeyLast4 = enc.last4;
|
|
101
|
+
keyChanged = true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
let smtpPassEncrypted = sameProvider ? current.smtpPassEncrypted : undefined;
|
|
105
|
+
let passChanged = false;
|
|
106
|
+
if (body.smtpPass !== undefined) {
|
|
107
|
+
if (body.smtpPass === null || body.smtpPass === '') {
|
|
108
|
+
smtpPassEncrypted = undefined;
|
|
109
|
+
passChanged = true;
|
|
110
|
+
}
|
|
111
|
+
else if (typeof body.smtpPass === 'string' && body.smtpPass.trim()) {
|
|
112
|
+
smtpPassEncrypted = (await encryptEmailSecret(body.smtpPass)).encrypted;
|
|
113
|
+
passChanged = true;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const next = {
|
|
117
|
+
provider,
|
|
118
|
+
from: typeof body.from === 'string' ? body.from.trim() : undefined,
|
|
119
|
+
apiKeyEncrypted,
|
|
120
|
+
apiKeyLast4,
|
|
121
|
+
channel: provider === 'smtpcom' && typeof body.channel === 'string' && body.channel.trim()
|
|
122
|
+
? body.channel.trim()
|
|
123
|
+
: undefined,
|
|
124
|
+
region: provider === 'ses' && typeof body.region === 'string' ? body.region.trim() : undefined,
|
|
125
|
+
host: provider === 'smtp' && typeof body.host === 'string' ? body.host.trim() : undefined,
|
|
126
|
+
port: provider === 'smtp' && typeof body.port === 'number' && Number.isInteger(body.port)
|
|
127
|
+
? body.port
|
|
128
|
+
: undefined,
|
|
129
|
+
secure: provider === 'smtp' && typeof body.secure === 'boolean' ? body.secure : undefined,
|
|
130
|
+
smtpUser: provider === 'smtp' && typeof body.smtpUser === 'string' && body.smtpUser.trim()
|
|
131
|
+
? body.smtpUser.trim()
|
|
132
|
+
: undefined,
|
|
133
|
+
smtpPassEncrypted: provider === 'smtp' ? smtpPassEncrypted : undefined,
|
|
134
|
+
// Changing the config invalidates the previous test result.
|
|
135
|
+
lastTestStatus: undefined,
|
|
136
|
+
lastTestedAt: undefined,
|
|
137
|
+
lastTestError: undefined,
|
|
138
|
+
};
|
|
139
|
+
const saved = await putEmailConfig(db(), next, auth.session.userId);
|
|
140
|
+
clearEmailSenderCache();
|
|
141
|
+
try {
|
|
142
|
+
await logEvent({
|
|
143
|
+
event: 'update_email_settings',
|
|
144
|
+
userId: auth.session.userId,
|
|
145
|
+
ipAddress: getClientIp(request),
|
|
146
|
+
// Config metadata only — never key material.
|
|
147
|
+
details: {
|
|
148
|
+
provider,
|
|
149
|
+
from: next.from ?? null,
|
|
150
|
+
keyChanged: keyChanged || passChanged,
|
|
151
|
+
source: 'settings.email',
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
/* never block on audit */
|
|
157
|
+
}
|
|
158
|
+
return json({
|
|
159
|
+
data: { settings: toPublicEmailConfig(saved), envProvider: detectEnvEmailProvider() },
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
return internalError(err, 'email/settings PUT');
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
router.post('/email/settings/test', async (request) => {
|
|
167
|
+
try {
|
|
168
|
+
const auth = await requireAuth(request);
|
|
169
|
+
if (auth.error)
|
|
170
|
+
return auth.error;
|
|
171
|
+
const adminErr = requireAdminScope(auth.session);
|
|
172
|
+
if (adminErr)
|
|
173
|
+
return adminErr;
|
|
174
|
+
if (!(await checkRateLimitAsync(emailTestLimiter, `email-test:${auth.session.userId}`))) {
|
|
175
|
+
return errorResponse('Too many test emails. Please try again later.', 429);
|
|
176
|
+
}
|
|
177
|
+
const d = db();
|
|
178
|
+
// The test recipient is ALWAYS the signed-in admin's own address — never
|
|
179
|
+
// a caller-supplied one — so this endpoint can't be used to spam others.
|
|
180
|
+
if (!hasModel(d, 'user')) {
|
|
181
|
+
return errorResponse('User model unavailable; cannot determine recipient.', 500);
|
|
182
|
+
}
|
|
183
|
+
const user = await d.user.findUnique({
|
|
184
|
+
where: { id: auth.session.userId },
|
|
185
|
+
select: { email: true, name: true },
|
|
186
|
+
});
|
|
187
|
+
if (!user?.email) {
|
|
188
|
+
return errorResponse('Your account has no email address to send the test to.', 400);
|
|
189
|
+
}
|
|
190
|
+
const { resolveEmailSenderAsync, clearEmailSenderCache } = await import('../../email/resolve.js');
|
|
191
|
+
const { getEmailConfig, putEmailConfig } = await import('../../email/settings-store.js');
|
|
192
|
+
clearEmailSenderCache(); // always test the freshest configuration
|
|
193
|
+
const sender = await resolveEmailSenderAsync(d);
|
|
194
|
+
if (!sender) {
|
|
195
|
+
return errorResponse('No email provider is configured. Save provider settings (or set env vars) first.', 400);
|
|
196
|
+
}
|
|
197
|
+
let success = false;
|
|
198
|
+
let errorMessage = null;
|
|
199
|
+
try {
|
|
200
|
+
await sender.send({
|
|
201
|
+
to: user.email,
|
|
202
|
+
subject: 'Actuate CMS test email',
|
|
203
|
+
html: `<div style="font-family:system-ui,sans-serif;color:#111;max-width:640px"><p style="font-size:15px">This is a test email from your Actuate CMS email settings${user.name ? `, requested by ${user.name}` : ''}. If you received it, your provider is configured correctly.</p></div>`,
|
|
204
|
+
text: 'This is a test email from your Actuate CMS email settings. If you received it, your provider is configured correctly.',
|
|
205
|
+
});
|
|
206
|
+
success = true;
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
errorMessage = err instanceof Error ? err.message : 'Send failed';
|
|
210
|
+
}
|
|
211
|
+
// Record the outcome on the config doc (best-effort) so the UI can show
|
|
212
|
+
// "last tested" state across sessions. Skip when only env config exists.
|
|
213
|
+
try {
|
|
214
|
+
const config = await getEmailConfig(d);
|
|
215
|
+
if (config.provider) {
|
|
216
|
+
await putEmailConfig(d, {
|
|
217
|
+
...config,
|
|
218
|
+
lastTestStatus: success ? 'success' : 'failed',
|
|
219
|
+
lastTestedAt: new Date().toISOString(),
|
|
220
|
+
lastTestError: errorMessage ?? undefined,
|
|
221
|
+
}, auth.session.userId);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
/* recording the result must not mask the send outcome */
|
|
226
|
+
}
|
|
227
|
+
try {
|
|
228
|
+
await logEvent({
|
|
229
|
+
event: 'test_email_settings',
|
|
230
|
+
userId: auth.session.userId,
|
|
231
|
+
ipAddress: getClientIp(request),
|
|
232
|
+
details: { success, source: 'settings.email' },
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
/* never block on audit */
|
|
237
|
+
}
|
|
238
|
+
if (!success) {
|
|
239
|
+
return errorResponse(errorMessage ?? 'Test send failed', 502);
|
|
240
|
+
}
|
|
241
|
+
return json({ data: { success: true, sentTo: user.email } });
|
|
242
|
+
}
|
|
243
|
+
catch (err) {
|
|
244
|
+
return internalError(err, 'email/settings test');
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=email-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-settings.js","sourceRoot":"","sources":["../../../src/api/routes/email-settings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EACL,IAAI,EACJ,aAAa,EACb,aAAa,EACb,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,qBAAqB,CAAA;AAE5B,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,EAAE,GAAG,SAAS,CAAA;IACpB,8EAA8E;IAC9E,iEAAiE;IACjE,gFAAgF;IAChF,gFAAgF;IAChF,8EAA8E;IAE9E,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC9C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAChD,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAA;YAE7B,MAAM,EAAE,cAAc,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,GACnE,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAA;YAC/C,MAAM,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,GACzD,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;YAEvC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,CAAC,CAAA;YACzC,OAAO,IAAI,CAAC;gBACV,IAAI,EAAE;oBACJ,QAAQ,EAAE,mBAAmB,CAAC,MAAM,CAAC;oBACrC,yEAAyE;oBACzE,WAAW,EAAE,sBAAsB,EAAE;oBACrC,sFAAsF;oBACtF,gBAAgB,EAAE,OAAO,CAAC,uBAAuB,EAAE,CAAC;oBACpD,kEAAkE;oBAClE,eAAe,EAAE,OAAO,CAAC,wBAAwB,EAAE,CAAC;oBACpD,mEAAmE;oBACnE,eAAe,EAAE,OAAO,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC;iBAC9D;aACF,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAA;QACjD,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC9C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAChD,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAA;YAE7B,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAW5C,CAAA;YACR,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtC,OAAO,aAAa,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAA;YAC7D,CAAC;YAED,MAAM,EACJ,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,GACvB,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAA;YACjD,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;YAExE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,CAAC,CAAA;YAC1C,qEAAqE;YACrE,yEAAyE;YACzE,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAA;YAC5F,MAAM,eAAe,GAAG,0BAA0B,CAAC,IAAI,EAAE;gBACvD,SAAS,EAAE,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;aAC5D,CAAC,CAAA;YACF,IAAI,eAAe;gBAAE,OAAO,aAAa,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;YAE/D,gEAAgE;YAChE,4BAA4B;YAC5B,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;gBACjF,qBAAqB,EAAE,CAAA;gBACvB,IAAI,CAAC;oBACH,MAAM,QAAQ,CAAC;wBACb,KAAK,EAAE,uBAAuB;wBAC9B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;wBAC3B,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC;wBAC/B,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE;qBACtD,CAAC,CAAA;gBACJ,CAAC;gBAAC,MAAM,CAAC;oBACP,0BAA0B;gBAC5B,CAAC;gBACD,OAAO,IAAI,CAAC;oBACV,IAAI,EAAE,EAAE,QAAQ,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,sBAAsB,EAAE,EAAE;iBACtF,CAAC,CAAA;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAgD,CAAA;YAEtE,4EAA4E;YAC5E,8BAA8B;YAC9B,IAAI,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAA;YACxE,IAAI,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;YAChE,IAAI,UAAU,GAAG,KAAK,CAAA;YACtB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;oBAC/C,eAAe,GAAG,SAAS,CAAA;oBAC3B,WAAW,GAAG,SAAS,CAAA;oBACvB,UAAU,GAAG,IAAI,CAAA;gBACnB,CAAC;qBAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;oBACjE,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;oBACxD,eAAe,GAAG,GAAG,CAAC,SAAS,CAAA;oBAC/B,WAAW,GAAG,GAAG,CAAC,KAAK,CAAA;oBACvB,UAAU,GAAG,IAAI,CAAA;gBACnB,CAAC;YACH,CAAC;YAED,IAAI,iBAAiB,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAA;YAC5E,IAAI,WAAW,GAAG,KAAK,CAAA;YACvB,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;oBACnD,iBAAiB,GAAG,SAAS,CAAA;oBAC7B,WAAW,GAAG,IAAI,CAAA;gBACpB,CAAC;qBAAM,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;oBACrE,iBAAiB,GAAG,CAAC,MAAM,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;oBACvE,WAAW,GAAG,IAAI,CAAA;gBACpB,CAAC;YACH,CAAC;YAED,MAAM,IAAI,GAAG;gBACX,QAAQ;gBACR,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;gBAClE,eAAe;gBACf,WAAW;gBACX,OAAO,EACL,QAAQ,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;oBAC/E,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;oBACrB,CAAC,CAAC,SAAS;gBACf,MAAM,EACJ,QAAQ,KAAK,KAAK,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;gBACxF,IAAI,EAAE,QAAQ,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;gBACzF,IAAI,EACF,QAAQ,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;oBACjF,CAAC,CAAC,IAAI,CAAC,IAAI;oBACX,CAAC,CAAC,SAAS;gBACf,MAAM,EAAE,QAAQ,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBACzF,QAAQ,EACN,QAAQ,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;oBAC9E,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;oBACtB,CAAC,CAAC,SAAS;gBACf,iBAAiB,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;gBACtE,4DAA4D;gBAC5D,cAAc,EAAE,SAAS;gBACzB,YAAY,EAAE,SAAS;gBACvB,aAAa,EAAE,SAAS;aACzB,CAAA;YAED,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACnE,qBAAqB,EAAE,CAAA;YAEvB,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC;oBACb,KAAK,EAAE,uBAAuB;oBAC9B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;oBAC3B,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC;oBAC/B,6CAA6C;oBAC7C,OAAO,EAAE;wBACP,QAAQ;wBACR,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;wBACvB,UAAU,EAAE,UAAU,IAAI,WAAW;wBACrC,MAAM,EAAE,gBAAgB;qBACzB;iBACF,CAAC,CAAA;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,0BAA0B;YAC5B,CAAC;YAED,OAAO,IAAI,CAAC;gBACV,IAAI,EAAE,EAAE,QAAQ,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,sBAAsB,EAAE,EAAE;aACtF,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAA;QACjD,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACpD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAChD,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAA;YAE7B,IAAI,CAAC,CAAC,MAAM,mBAAmB,CAAC,gBAAgB,EAAE,cAAc,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;gBACxF,OAAO,aAAa,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAA;YAC5E,CAAC;YAED,MAAM,CAAC,GAAG,EAAE,EAAE,CAAA;YACd,yEAAyE;YACzE,yEAAyE;YACzE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;gBACzB,OAAO,aAAa,CAAC,qDAAqD,EAAE,GAAG,CAAC,CAAA;YAClF,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;gBACnC,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBAClC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;aACpC,CAAC,CAAA;YACF,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;gBACjB,OAAO,aAAa,CAAC,wDAAwD,EAAE,GAAG,CAAC,CAAA;YACrF,CAAC;YAED,MAAM,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,GACtD,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;YACxC,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAA;YAExF,qBAAqB,EAAE,CAAA,CAAC,yCAAyC;YACjE,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,CAAC,CAAC,CAAA;YAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,aAAa,CAClB,kFAAkF,EAClF,GAAG,CACJ,CAAA;YACH,CAAC;YAED,IAAI,OAAO,GAAG,KAAK,CAAA;YACnB,IAAI,YAAY,GAAkB,IAAI,CAAA;YACtC,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,IAAI,CAAC;oBAChB,EAAE,EAAE,IAAI,CAAC,KAAK;oBACd,OAAO,EAAE,wBAAwB;oBACjC,IAAI,EAAE,+JAA+J,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,wEAAwE;oBAC3R,IAAI,EAAE,uHAAuH;iBAC9H,CAAC,CAAA;gBACF,OAAO,GAAG,IAAI,CAAA;YAChB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,YAAY,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAA;YACnE,CAAC;YAED,wEAAwE;YACxE,yEAAyE;YACzE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,CAAC,CAAC,CAAA;gBACtC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,MAAM,cAAc,CAClB,CAAC,EACD;wBACE,GAAG,MAAM;wBACT,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;wBAC9C,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBACtC,aAAa,EAAE,YAAY,IAAI,SAAS;qBACzC,EACD,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB,CAAA;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,yDAAyD;YAC3D,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC;oBACb,KAAK,EAAE,qBAAqB;oBAC5B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;oBAC3B,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC;oBAC/B,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE;iBAC/C,CAAC,CAAA;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,0BAA0B;YAC5B,CAAC;YAED,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,aAAa,CAAC,YAAY,IAAI,kBAAkB,EAAE,GAAG,CAAC,CAAA;YAC/D,CAAC;YACD,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAC9D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAA;QAClD,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
package/dist/api/routes/users.js
CHANGED
|
@@ -7,7 +7,7 @@ import { logEvent } from '../../security/audit.js';
|
|
|
7
7
|
import { getActuateConfig } from '../../config/runtime.js';
|
|
8
8
|
import { generateApiKey } from '../../security/api-key-enhanced.js';
|
|
9
9
|
import { guardedDb } from '../guarded-db.js';
|
|
10
|
-
import { json, errorResponse, internalError, hasModel, modelNotAvailable, requirePasswordReauth, requireAuth, requireAdminScope, ADMIN_ROLES, requireRole, teamOptionsFor,
|
|
10
|
+
import { json, errorResponse, internalError, hasModel, modelNotAvailable, requirePasswordReauth, requireAuth, requireAdminScope, ADMIN_ROLES, requireRole, teamOptionsFor, isEmailConfiguredAsync, inviteLimiter, checkRateLimitAsync, clientIp, } from '../route-helpers.js';
|
|
11
11
|
export function registerUserRoutes(router) {
|
|
12
12
|
const db = guardedDb;
|
|
13
13
|
// ---------------------------------------------------------------------------
|
|
@@ -205,7 +205,7 @@ export function registerUserRoutes(router) {
|
|
|
205
205
|
if (!hasModel(d, 'user'))
|
|
206
206
|
return modelNotAvailable('user');
|
|
207
207
|
const stats = await getUserStats(d, teamOptionsFor(auth.session));
|
|
208
|
-
return json({ data: { ...stats, emailConfigured:
|
|
208
|
+
return json({ data: { ...stats, emailConfigured: await isEmailConfiguredAsync(d) } });
|
|
209
209
|
}
|
|
210
210
|
catch (err) {
|
|
211
211
|
return internalError(err, 'user stats');
|
|
@@ -673,7 +673,7 @@ export function registerUserRoutes(router) {
|
|
|
673
673
|
if (reauthErr)
|
|
674
674
|
return reauthErr;
|
|
675
675
|
}
|
|
676
|
-
if (!
|
|
676
|
+
if (!(await isEmailConfiguredAsync(db()))) {
|
|
677
677
|
return errorResponse('Email is not configured, so a reset link cannot be sent. Configure an email provider first.', 409);
|
|
678
678
|
}
|
|
679
679
|
const cmsConfig = getActuateConfig();
|