@actuate-media/cms-admin 0.48.0 → 0.49.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 CHANGED
@@ -1,5 +1,14 @@
1
1
  # @actuate-media/cms-admin
2
2
 
3
+ ## 0.49.0
4
+
5
+ ### Minor Changes
6
+
7
+ - a6a17e9: Split login: serve the auth screens on their own non-obvious path while the admin app stays at `/admin`.
8
+ - **cms-core**: new `admin.loginPath` config. `createCMSMiddleware` applies the same guards (IP allowlist, CMS_SECRET check, setup bypass) to the login mount and redirects expired sessions there. Emailed password-reset and invite links point at the login mount when configured.
9
+ - **cms-admin**: new `LoginRoot` component mounts login (+ MFA), the first-run setup wizard, and forgot/reset-password on a separate route (e.g. `/securelogin`, with setup at `/securelogin/setup`), then hands off to the admin app after sign-in. `<AdminRoot loginPath>` makes the admin mount render a 404 lookalike for signed-out visitors instead of a login form — no redirect, so the login location is never leaked.
10
+ - **create-actuate-cms**: new `--login-path` flag and prompt (default `/securelogin`). New projects scaffold the split-login layout by default: login/setup at the login path, admin app at the admin path, config + proxy wired accordingly. Pass `--login-path` equal to `--admin-path` for the classic inline login.
11
+
3
12
  ## 0.48.0
4
13
 
5
14
  ### Minor Changes
@@ -4,6 +4,16 @@ export interface AdminRootProps {
4
4
  session: any;
5
5
  basePath?: string;
6
6
  initialPath?: string;
7
+ /**
8
+ * Split-login mode: the URL path where the unauthenticated auth screens
9
+ * (login, setup wizard, forgot/reset password) are mounted via `LoginRoot`,
10
+ * e.g. `/securelogin`. When set (and different from `basePath`), signed-out
11
+ * visitors to the admin mount see a 404 lookalike instead of a login form —
12
+ * the admin's existence isn't advertised at the well-known `/admin` path.
13
+ * Keep in sync with `config.admin.loginPath` so middleware guards and
14
+ * emailed reset/invite links agree on the location.
15
+ */
16
+ loginPath?: string;
7
17
  setupRequired?: boolean;
8
18
  onSetupComplete?: (data: {
9
19
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"AdminRoot.d.ts","sourceRoot":"","sources":["../src/AdminRoot.tsx"],"names":[],"mappings":"AAqCA,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,uCAAuC,CAAA;AAc9C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,GAAG,CAAA;IACX,OAAO,EAAE,GAAG,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE;QACvB,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;KACjB,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACnD,OAAO,CAAC,EAAE,CACR,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,KAClB,OAAO,CAAC;QACX,OAAO,EAAE,OAAO,CAAA;QAChB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,eAAe,CAAC,EAAE,MAAM,CAAA;KACzB,CAAC,CAAA;IACF,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CACb,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,MAAM,KACT,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,aAAa,CAAC,EAAE;QAAE,QAAQ,EAAE,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;IACxF;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,uBAAuB,CAAA;CAC3C;AA+rBD,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,2CAoC9C"}
1
+ {"version":3,"file":"AdminRoot.d.ts","sourceRoot":"","sources":["../src/AdminRoot.tsx"],"names":[],"mappings":"AAuCA,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,uCAAuC,CAAA;AAc9C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,GAAG,CAAA;IACX,OAAO,EAAE,GAAG,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE;QACvB,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;KACjB,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACnD,OAAO,CAAC,EAAE,CACR,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,KAClB,OAAO,CAAC;QACX,OAAO,EAAE,OAAO,CAAA;QAChB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,eAAe,CAAC,EAAE,MAAM,CAAA;KACzB,CAAC,CAAA;IACF,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CACb,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,MAAM,KACT,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,aAAa,CAAC,EAAE;QAAE,QAAQ,EAAE,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;IACxF;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,uBAAuB,CAAA;CAC3C;AAosBD,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,2CAgB9C"}
package/dist/AdminRoot.js CHANGED
@@ -21,6 +21,8 @@ import { ScriptTags } from './views/ScriptTags.js';
21
21
  import { ScriptTagEditor } from './views/ScriptTagEditor.js';
22
22
  import { SetupWizard } from './views/SetupWizard.js';
23
23
  import { Login } from './views/Login.js';
24
+ import { HiddenLoginNotFound } from './views/HiddenLoginNotFound.js';
25
+ import { ISOLATION_STYLE, useRobotsNoIndex } from './lib/root-chrome.js';
24
26
  import { ForgotPassword } from './views/ForgotPassword.js';
25
27
  import { ResetPassword } from './views/ResetPassword.js';
26
28
  import { ErrorBoundary } from './components/ErrorBoundary.js';
@@ -43,7 +45,7 @@ import { NewPostTypeInstructions } from './views/Posts/NewPostTypeInstructions.j
43
45
  import { PostSectionEditor } from './views/post-editor/PostSectionEditor.js';
44
46
  import { PostTemplateEditor } from './views/post-editor/PostTemplateEditor.js';
45
47
  import { PostPreview } from './views/post-editor/PostPreview.js';
46
- function AdminShell({ config, session, basePath = '/admin', initialPath = '/', setupRequired, onSetupComplete, onLogin, onVerifyTotp, onLogout, captchaConfig, }) {
48
+ function AdminShell({ config, session, basePath = '/admin', initialPath = '/', loginPath, setupRequired, onSetupComplete, onLogin, onVerifyTotp, onLogout, captchaConfig, }) {
47
49
  const { currentPath, navigate, matchRoute, buildHref } = useAdminRouter(basePath, initialPath);
48
50
  const [shortcutHelpOpen, setShortcutHelpOpen] = useState(false);
49
51
  // Sign out: revoke the server-side session (and clear the cookie) first, then
@@ -167,10 +169,21 @@ function AdminShell({ config, session, basePath = '/admin', initialPath = '/', s
167
169
  }
168
170
  return map;
169
171
  }, [config]);
172
+ // Split-login mode: the auth screens (login, wizard, forgot/reset) live on
173
+ // their own mount (`LoginRoot` at `loginPath`), so signed-out traffic to the
174
+ // admin mount gets a 404 lookalike. No redirect — that would leak the real
175
+ // login location to anyone probing the well-known `/admin` path.
176
+ const hideAuthScreens = Boolean(loginPath && loginPath !== basePath);
170
177
  if (setupRequired && onSetupComplete) {
178
+ if (hideAuthScreens) {
179
+ return _jsx(HiddenLoginNotFound, {});
180
+ }
171
181
  return (_jsx(SetupWizard, { onComplete: onSetupComplete, siteName: config?.admin?.branding?.name ?? 'Actuate CMS' }));
172
182
  }
173
183
  if (!session && !setupRequired) {
184
+ if (hideAuthScreens) {
185
+ return _jsx(HiddenLoginNotFound, {});
186
+ }
174
187
  if (matchRoute('/forgot-password')) {
175
188
  return _jsx(ForgotPassword, { onNavigate: navigate });
176
189
  }
@@ -503,39 +516,9 @@ function useAdminPageTitle(config, currentPath) {
503
516
  // Stable identity for the default (no custom renderers) case so the provider
504
517
  // value doesn't change on every render.
505
518
  const EMPTY_RENDERERS = {};
506
- const ISOLATION_STYLE = {
507
- position: 'fixed',
508
- inset: '0',
509
- zIndex: 50,
510
- overflow: 'auto',
511
- isolation: 'isolate',
512
- };
513
519
  export function AdminRoot(props) {
514
520
  const defaultDarkMode = props.config?.admin?.branding?.darkMode;
515
- // The admin is private application UI and must never be indexed. Ensure a
516
- // `noindex, nofollow` robots meta tag is present while the admin is mounted,
517
- // as defense-in-depth alongside the server `robots.txt` Disallow rule. This
518
- // covers every consumer install (the admin page is typically a client
519
- // component that can't export Next.js route metadata).
520
- useEffect(() => {
521
- if (typeof document === 'undefined')
522
- return;
523
- const PREV = document.querySelector('meta[name="robots"]');
524
- const prevContent = PREV?.getAttribute('content') ?? null;
525
- const meta = PREV ?? document.createElement('meta');
526
- meta.setAttribute('name', 'robots');
527
- meta.setAttribute('content', 'noindex, nofollow');
528
- if (!PREV)
529
- document.head.appendChild(meta);
530
- return () => {
531
- if (prevContent === null) {
532
- meta.remove();
533
- }
534
- else {
535
- meta.setAttribute('content', prevContent);
536
- }
537
- };
538
- }, []);
521
+ useRobotsNoIndex();
539
522
  return (_jsx("div", { style: ISOLATION_STYLE, className: "actuate-admin", children: _jsx(ThemeProvider, { defaultDarkMode: defaultDarkMode, children: _jsx(LocaleProvider, { config: props.config, children: _jsx(AdminSectionRenderersProvider, { value: props.sectionRenderers ?? EMPTY_RENDERERS, children: _jsx(AdminShell, { ...props }) }) }) }) }));
540
523
  }
541
524
  //# sourceMappingURL=AdminRoot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AdminRoot.js","sourceRoot":"","sources":["../src/AdminRoot.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AdminRoot.js","sourceRoot":"","sources":["../src/AdminRoot.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { type CaptchaConfig } from './views/Login.js';
2
+ export interface LoginRootProps {
3
+ config?: any;
4
+ /** Current session, if any. Authenticated visitors are sent to `adminPath`. */
5
+ session?: any;
6
+ /** Mount path of this login screen (default: '/securelogin'). */
7
+ basePath?: string;
8
+ /**
9
+ * Where the admin app lives (default: '/admin'). Users are sent here after
10
+ * signing in — and immediately, if they arrive already authenticated.
11
+ */
12
+ adminPath?: string;
13
+ setupRequired?: boolean;
14
+ onSetupComplete?: (data: {
15
+ name: string;
16
+ email: string;
17
+ password: string;
18
+ }) => Promise<{
19
+ success: boolean;
20
+ error?: string;
21
+ }>;
22
+ onLogin: (email: string, password: string, captchaToken?: string) => Promise<{
23
+ success: boolean;
24
+ error?: string;
25
+ requiresTOTP?: boolean;
26
+ mfaPendingToken?: string;
27
+ }>;
28
+ /** Completes the TOTP second-factor step for accounts with MFA enabled. */
29
+ onVerifyTotp?: (mfaPendingToken: string, code: string) => Promise<{
30
+ success: boolean;
31
+ error?: string;
32
+ }>;
33
+ captchaConfig?: CaptchaConfig;
34
+ /**
35
+ * Called once a session exists (after login, or on arrival while already
36
+ * signed in). Defaults to a full-page navigation to `adminPath` — the admin
37
+ * app is a separate route mount, so a client-side route push can't reach it.
38
+ */
39
+ onAuthenticated?: (adminPath: string) => void;
40
+ }
41
+ /**
42
+ * Standalone mount for the unauthenticated auth screens on split-login
43
+ * installs: login (+ MFA), setup wizard, forgot/reset password. Pair it with
44
+ * `<AdminRoot loginPath>` so the admin mount itself stops rendering a login
45
+ * form for signed-out visitors.
46
+ *
47
+ * Routes under `basePath`:
48
+ * - `/` — login (or the setup wizard while `setupRequired`)
49
+ * - `/setup` — setup wizard (first-run; falls back to login once setup is done)
50
+ * - `/forgot-password`, `/reset-password?token=…` — recovery flows; emailed
51
+ * reset/invite links point here when `config.admin.loginPath` is set.
52
+ */
53
+ export declare function LoginRoot({ config, session, basePath, adminPath, setupRequired, onSetupComplete, onLogin, onVerifyTotp, captchaConfig, onAuthenticated, }: LoginRootProps): import("react/jsx-runtime").JSX.Element;
54
+ //# sourceMappingURL=LoginRoot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginRoot.d.ts","sourceRoot":"","sources":["../src/LoginRoot.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAS,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAK5D,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,+EAA+E;IAC/E,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE;QACvB,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;KACjB,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACnD,OAAO,EAAE,CACP,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,KAClB,OAAO,CAAC;QACX,OAAO,EAAE,OAAO,CAAA;QAChB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,eAAe,CAAC,EAAE,MAAM,CAAA;KACzB,CAAC,CAAA;IACF,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CACb,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,MAAM,KACT,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClD,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,OAAO,EACP,QAAyB,EACzB,SAAoB,EACpB,aAAa,EACb,eAAe,EACf,OAAO,EACP,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,EAAE,cAAc,2CAuBhB"}
@@ -0,0 +1,59 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useEffect } from 'react';
4
+ import { useAdminRouter } from './router/index.js';
5
+ import { ThemeProvider } from './components/ThemeProvider.js';
6
+ import { ISOLATION_STYLE, useRobotsNoIndex } from './lib/root-chrome.js';
7
+ import { Login } from './views/Login.js';
8
+ import { SetupWizard } from './views/SetupWizard.js';
9
+ import { ForgotPassword } from './views/ForgotPassword.js';
10
+ import { ResetPassword } from './views/ResetPassword.js';
11
+ /**
12
+ * Standalone mount for the unauthenticated auth screens on split-login
13
+ * installs: login (+ MFA), setup wizard, forgot/reset password. Pair it with
14
+ * `<AdminRoot loginPath>` so the admin mount itself stops rendering a login
15
+ * form for signed-out visitors.
16
+ *
17
+ * Routes under `basePath`:
18
+ * - `/` — login (or the setup wizard while `setupRequired`)
19
+ * - `/setup` — setup wizard (first-run; falls back to login once setup is done)
20
+ * - `/forgot-password`, `/reset-password?token=…` — recovery flows; emailed
21
+ * reset/invite links point here when `config.admin.loginPath` is set.
22
+ */
23
+ export function LoginRoot({ config, session, basePath = '/securelogin', adminPath = '/admin', setupRequired, onSetupComplete, onLogin, onVerifyTotp, captchaConfig, onAuthenticated, }) {
24
+ const defaultDarkMode = config?.admin?.branding?.darkMode;
25
+ useRobotsNoIndex();
26
+ return (_jsx("div", { style: ISOLATION_STYLE, className: "actuate-admin", children: _jsx(ThemeProvider, { defaultDarkMode: defaultDarkMode, children: _jsx(LoginShell, { config: config, session: session, basePath: basePath, adminPath: adminPath, setupRequired: setupRequired, onSetupComplete: onSetupComplete, onLogin: onLogin, onVerifyTotp: onVerifyTotp, captchaConfig: captchaConfig, onAuthenticated: onAuthenticated }) }) }));
27
+ }
28
+ function LoginShell({ config, session, basePath = '/securelogin', adminPath = '/admin', setupRequired, onSetupComplete, onLogin, onVerifyTotp, captchaConfig, onAuthenticated, }) {
29
+ const { navigate, matchRoute } = useAdminRouter(basePath, '/');
30
+ // Already signed in (or just signed in): hand off to the admin app. The
31
+ // admin is a separate route mount, so this must be a full-page navigation.
32
+ const authenticated = Boolean(session) && !setupRequired;
33
+ useEffect(() => {
34
+ if (!authenticated)
35
+ return;
36
+ if (onAuthenticated) {
37
+ onAuthenticated(adminPath);
38
+ return;
39
+ }
40
+ if (typeof window !== 'undefined') {
41
+ window.location.replace(adminPath);
42
+ }
43
+ }, [authenticated, adminPath, onAuthenticated]);
44
+ if (authenticated) {
45
+ return (_jsx("div", { className: "bg-background flex min-h-screen items-center justify-center", children: _jsx("p", { className: "text-muted-foreground text-sm", role: "status", children: "Signed in \u2014 taking you to the admin\u2026" }) }));
46
+ }
47
+ if (setupRequired && onSetupComplete) {
48
+ return (_jsx(SetupWizard, { onComplete: onSetupComplete, siteName: config?.admin?.branding?.name ?? 'Actuate CMS' }));
49
+ }
50
+ if (matchRoute('/forgot-password')) {
51
+ return _jsx(ForgotPassword, { onNavigate: navigate });
52
+ }
53
+ if (matchRoute('/reset-password')) {
54
+ const params = new URLSearchParams(typeof window !== 'undefined' ? window.location.search : '');
55
+ return _jsx(ResetPassword, { onNavigate: navigate, token: params.get('token') });
56
+ }
57
+ return (_jsx(Login, { onLogin: onLogin, onVerifyTotp: onVerifyTotp, onNavigate: navigate, captchaConfig: captchaConfig, branding: config?.admin?.branding }));
58
+ }
59
+ //# sourceMappingURL=LoginRoot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginRoot.js","sourceRoot":"","sources":["../src/LoginRoot.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=login-root.render.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-root.render.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/views/login-root.render.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,79 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // @vitest-environment happy-dom
3
+ import { afterEach, describe, expect, it, vi } from 'vitest';
4
+ import { cleanup, render, screen, waitFor } from '@testing-library/react';
5
+ /**
6
+ * Split-login mode (user request: login at a non-obvious path like
7
+ * /securelogin, admin app at /admin). Pins:
8
+ * - `LoginRoot` serves login / setup wizard / forgot-password on its own
9
+ * mount and hands off to the admin app once a session exists.
10
+ * - `<AdminRoot loginPath>` renders a 404 lookalike for signed-out visitors
11
+ * instead of a login form, so /admin doesn't advertise the CMS.
12
+ */
13
+ vi.mock('../../lib/api.js', () => ({
14
+ cmsApi: vi.fn(async () => ({ data: undefined })),
15
+ ensureCsrfToken: vi.fn(async () => undefined),
16
+ setApiBase: vi.fn(),
17
+ }));
18
+ // This happy-dom environment doesn't expose a functional localStorage, which
19
+ // ThemeProvider/LocaleProvider read on mount.
20
+ const storage = new Map();
21
+ vi.stubGlobal('localStorage', {
22
+ getItem: (k) => storage.get(k) ?? null,
23
+ setItem: (k, v) => void storage.set(k, String(v)),
24
+ removeItem: (k) => void storage.delete(k),
25
+ clear: () => storage.clear(),
26
+ });
27
+ const { LoginRoot } = await import('../../LoginRoot.js');
28
+ const { AdminRoot } = await import('../../AdminRoot.js');
29
+ afterEach(() => {
30
+ cleanup();
31
+ window.history.replaceState({}, '', '/');
32
+ });
33
+ const noopLogin = vi.fn(async () => ({ success: true }));
34
+ describe('LoginRoot', () => {
35
+ it('renders the login screen for signed-out visitors', () => {
36
+ window.history.replaceState({}, '', '/securelogin');
37
+ render(_jsx(LoginRoot, { config: {}, session: null, onLogin: noopLogin }));
38
+ expect(screen.getByText('Sign in to your account')).toBeTruthy();
39
+ });
40
+ it('renders the setup wizard while setup is required (first-time install)', () => {
41
+ window.history.replaceState({}, '', '/securelogin/setup');
42
+ render(_jsx(LoginRoot, { config: { admin: { branding: { name: 'Acme' } } }, session: null, setupRequired: true, onSetupComplete: vi.fn(async () => ({ success: true })), onLogin: noopLogin }));
43
+ expect(screen.getByText('Welcome to Acme')).toBeTruthy();
44
+ });
45
+ it('serves the forgot-password flow under its own mount', () => {
46
+ window.history.replaceState({}, '', '/securelogin/forgot-password');
47
+ render(_jsx(LoginRoot, { config: {}, session: null, onLogin: noopLogin }));
48
+ expect(screen.getByText('Reset Password')).toBeTruthy();
49
+ });
50
+ it('hands an authenticated visitor off to the admin app', async () => {
51
+ window.history.replaceState({}, '', '/securelogin');
52
+ const onAuthenticated = vi.fn();
53
+ render(_jsx(LoginRoot, { config: {}, session: { user: { id: 'u1' } }, adminPath: "/admin", onLogin: noopLogin, onAuthenticated: onAuthenticated }));
54
+ expect(screen.getByRole('status').textContent).toContain('Signed in');
55
+ await waitFor(() => expect(onAuthenticated).toHaveBeenCalledWith('/admin'));
56
+ // No login form is offered to an already-authenticated visitor.
57
+ expect(screen.queryByText('Sign in to your account')).toBeNull();
58
+ });
59
+ });
60
+ describe('AdminRoot with loginPath (hidden login)', () => {
61
+ it('shows a 404 lookalike instead of a login form when signed out', () => {
62
+ window.history.replaceState({}, '', '/admin');
63
+ render(_jsx(AdminRoot, { config: {}, session: null, loginPath: "/securelogin", onLogin: noopLogin }));
64
+ expect(screen.getByText('This page could not be found.')).toBeTruthy();
65
+ expect(screen.queryByText('Sign in to your account')).toBeNull();
66
+ });
67
+ it('hides the setup wizard at the admin mount too (it lives on the login mount)', () => {
68
+ window.history.replaceState({}, '', '/admin');
69
+ render(_jsx(AdminRoot, { config: {}, session: null, loginPath: "/securelogin", setupRequired: true, onSetupComplete: vi.fn(async () => ({ success: true })), onLogin: noopLogin }));
70
+ expect(screen.getByText('This page could not be found.')).toBeTruthy();
71
+ expect(screen.queryByText(/Welcome to/)).toBeNull();
72
+ });
73
+ it('keeps the classic inline login when loginPath is not set', () => {
74
+ window.history.replaceState({}, '', '/admin');
75
+ render(_jsx(AdminRoot, { config: {}, session: null, onLogin: noopLogin }));
76
+ expect(screen.getByText('Sign in to your account')).toBeTruthy();
77
+ });
78
+ });
79
+ //# sourceMappingURL=login-root.render.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-root.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/login-root.render.test.tsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export { AdminRoot } from './AdminRoot.js';
2
2
  export type { AdminRootProps } from './AdminRoot.js';
3
+ export { LoginRoot } from './LoginRoot.js';
4
+ export type { LoginRootProps } from './LoginRoot.js';
3
5
  export type { AdminSectionRenderer, AdminSectionRendererMap, AdminSectionRendererProps, AdminSectionPostContext, AdminRenderImageProps, } from './views/page-editor/sections/index.js';
4
6
  export { Layout } from './layout/Layout.js';
5
7
  export type { LayoutProps } from './layout/Layout.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { AdminRoot } from './AdminRoot.js';
2
+ export { LoginRoot } from './LoginRoot.js';
2
3
  export { Layout } from './layout/Layout.js';
3
4
  export { Sidebar } from './layout/Sidebar.js';
4
5
  export { Header } from './layout/Header.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type React from 'react';
2
+ /**
3
+ * Full-viewport overlay style shared by the admin and login mounts so the CMS
4
+ * UI renders above any consumer page chrome, with its own stacking context.
5
+ */
6
+ export declare const ISOLATION_STYLE: React.CSSProperties;
7
+ /**
8
+ * The admin (and its login screens) are private application UI and must never
9
+ * be indexed. Ensure a `noindex, nofollow` robots meta tag is present while
10
+ * mounted, as defense-in-depth alongside the server `robots.txt` Disallow
11
+ * rule. This covers every consumer install (the admin page is typically a
12
+ * client component that can't export Next.js route metadata).
13
+ */
14
+ export declare function useRobotsNoIndex(): void;
15
+ //# sourceMappingURL=root-chrome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root-chrome.d.ts","sourceRoot":"","sources":["../../src/lib/root-chrome.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,aAMnC,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAiBvC"}
@@ -0,0 +1,41 @@
1
+ import { useEffect } from 'react';
2
+ /**
3
+ * Full-viewport overlay style shared by the admin and login mounts so the CMS
4
+ * UI renders above any consumer page chrome, with its own stacking context.
5
+ */
6
+ export const ISOLATION_STYLE = {
7
+ position: 'fixed',
8
+ inset: '0',
9
+ zIndex: 50,
10
+ overflow: 'auto',
11
+ isolation: 'isolate',
12
+ };
13
+ /**
14
+ * The admin (and its login screens) are private application UI and must never
15
+ * be indexed. Ensure a `noindex, nofollow` robots meta tag is present while
16
+ * mounted, as defense-in-depth alongside the server `robots.txt` Disallow
17
+ * rule. This covers every consumer install (the admin page is typically a
18
+ * client component that can't export Next.js route metadata).
19
+ */
20
+ export function useRobotsNoIndex() {
21
+ useEffect(() => {
22
+ if (typeof document === 'undefined')
23
+ return;
24
+ const prev = document.querySelector('meta[name="robots"]');
25
+ const prevContent = prev?.getAttribute('content') ?? null;
26
+ const meta = prev ?? document.createElement('meta');
27
+ meta.setAttribute('name', 'robots');
28
+ meta.setAttribute('content', 'noindex, nofollow');
29
+ if (!prev)
30
+ document.head.appendChild(meta);
31
+ return () => {
32
+ if (prevContent === null) {
33
+ meta.remove();
34
+ }
35
+ else {
36
+ meta.setAttribute('content', prevContent);
37
+ }
38
+ };
39
+ }, []);
40
+ }
41
+ //# sourceMappingURL=root-chrome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root-chrome.js","sourceRoot":"","sources":["../../src/lib/root-chrome.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGjC;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAwB;IAClD,QAAQ,EAAE,OAAO;IACjB,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,EAAE;IACV,QAAQ,EAAE,MAAM;IAChB,SAAS,EAAE,SAAS;CACrB,CAAA;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB;IAC9B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAM;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAkB,qBAAqB,CAAC,CAAA;QAC3E,MAAM,WAAW,GAAG,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,IAAI,IAAI,CAAA;QACzD,MAAM,IAAI,GAAG,IAAI,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACnD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QACnC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAA;QACjD,IAAI,CAAC,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QAC1C,OAAO,GAAG,EAAE;YACV,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,EAAE,CAAA;YACf,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;YAC3C,CAAC;QACH,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;AACR,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Rendered at the admin mount for signed-out visitors on split-login installs
3
+ * (`config.admin.loginPath` set). Mimics the framework's default 404 page so
4
+ * hitting `/admin` reveals nothing — no login form, no admin branding, and no
5
+ * redirect that would leak the real login location.
6
+ */
7
+ export declare function HiddenLoginNotFound(): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=HiddenLoginNotFound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HiddenLoginNotFound.d.ts","sourceRoot":"","sources":["../../src/views/HiddenLoginNotFound.tsx"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,mBAAmB,4CAoClC"}
@@ -0,0 +1,29 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * Rendered at the admin mount for signed-out visitors on split-login installs
5
+ * (`config.admin.loginPath` set). Mimics the framework's default 404 page so
6
+ * hitting `/admin` reveals nothing — no login form, no admin branding, and no
7
+ * redirect that would leak the real login location.
8
+ */
9
+ export function HiddenLoginNotFound() {
10
+ return (_jsx("div", { style: {
11
+ fontFamily: 'system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',
12
+ height: '100vh',
13
+ display: 'flex',
14
+ alignItems: 'center',
15
+ justifyContent: 'center',
16
+ background: '#fff',
17
+ color: '#000',
18
+ textAlign: 'center',
19
+ }, children: _jsxs("div", { style: { display: 'flex', alignItems: 'center', lineHeight: '49px' }, children: [_jsx("h1", { style: {
20
+ display: 'inline-block',
21
+ margin: '0 20px 0 0',
22
+ paddingRight: 23,
23
+ fontSize: 24,
24
+ fontWeight: 500,
25
+ verticalAlign: 'top',
26
+ borderRight: '1px solid rgba(0, 0, 0, .3)',
27
+ }, children: "404" }), _jsx("div", { style: { display: 'inline-block' }, children: _jsx("h2", { style: { margin: 0, fontSize: 14, fontWeight: 400, lineHeight: '49px' }, children: "This page could not be found." }) })] }) }));
28
+ }
29
+ //# sourceMappingURL=HiddenLoginNotFound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HiddenLoginNotFound.js","sourceRoot":"","sources":["../../src/views/HiddenLoginNotFound.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,CACL,cACE,KAAK,EAAE;YACL,UAAU,EAAE,6DAA6D;YACzE,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,QAAQ;YACxB,UAAU,EAAE,MAAM;YAClB,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,QAAQ;SACpB,YAED,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,aACvE,aACE,KAAK,EAAE;wBACL,OAAO,EAAE,cAAc;wBACvB,MAAM,EAAE,YAAY;wBACpB,YAAY,EAAE,EAAE;wBAChB,QAAQ,EAAE,EAAE;wBACZ,UAAU,EAAE,GAAG;wBACf,aAAa,EAAE,KAAK;wBACpB,WAAW,EAAE,6BAA6B;qBAC3C,oBAGE,EACL,cAAK,KAAK,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,YACrC,aAAI,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,8CAEtE,GACD,IACF,GACF,CACP,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actuate-media/cms-admin",
3
- "version": "0.48.0",
3
+ "version": "0.49.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/actuate-media/actuatecms.git",
@@ -89,7 +89,7 @@
89
89
  "tailwindcss": "^4.0.0",
90
90
  "typescript": "^5.7.0",
91
91
  "vitest": "^4.1.0",
92
- "@actuate-media/cms-core": "0.65.0",
92
+ "@actuate-media/cms-core": "0.66.0",
93
93
  "@actuate-media/component-blocks": "0.2.1"
94
94
  },
95
95
  "scripts": {
package/src/AdminRoot.tsx CHANGED
@@ -26,6 +26,8 @@ import { ScriptTags } from './views/ScriptTags.js'
26
26
  import { ScriptTagEditor } from './views/ScriptTagEditor.js'
27
27
  import { SetupWizard } from './views/SetupWizard.js'
28
28
  import { Login } from './views/Login.js'
29
+ import { HiddenLoginNotFound } from './views/HiddenLoginNotFound.js'
30
+ import { ISOLATION_STYLE, useRobotsNoIndex } from './lib/root-chrome.js'
29
31
  import { ForgotPassword } from './views/ForgotPassword.js'
30
32
  import { ResetPassword } from './views/ResetPassword.js'
31
33
  import { ErrorBoundary } from './components/ErrorBoundary.js'
@@ -57,6 +59,16 @@ export interface AdminRootProps {
57
59
  session: any
58
60
  basePath?: string
59
61
  initialPath?: string
62
+ /**
63
+ * Split-login mode: the URL path where the unauthenticated auth screens
64
+ * (login, setup wizard, forgot/reset password) are mounted via `LoginRoot`,
65
+ * e.g. `/securelogin`. When set (and different from `basePath`), signed-out
66
+ * visitors to the admin mount see a 404 lookalike instead of a login form —
67
+ * the admin's existence isn't advertised at the well-known `/admin` path.
68
+ * Keep in sync with `config.admin.loginPath` so middleware guards and
69
+ * emailed reset/invite links agree on the location.
70
+ */
71
+ loginPath?: string
60
72
  setupRequired?: boolean
61
73
  onSetupComplete?: (data: {
62
74
  name: string
@@ -101,6 +113,7 @@ function AdminShell({
101
113
  session,
102
114
  basePath = '/admin',
103
115
  initialPath = '/',
116
+ loginPath,
104
117
  setupRequired,
105
118
  onSetupComplete,
106
119
  onLogin,
@@ -244,7 +257,16 @@ function AdminShell({
244
257
  return map
245
258
  }, [config])
246
259
 
260
+ // Split-login mode: the auth screens (login, wizard, forgot/reset) live on
261
+ // their own mount (`LoginRoot` at `loginPath`), so signed-out traffic to the
262
+ // admin mount gets a 404 lookalike. No redirect — that would leak the real
263
+ // login location to anyone probing the well-known `/admin` path.
264
+ const hideAuthScreens = Boolean(loginPath && loginPath !== basePath)
265
+
247
266
  if (setupRequired && onSetupComplete) {
267
+ if (hideAuthScreens) {
268
+ return <HiddenLoginNotFound />
269
+ }
248
270
  return (
249
271
  <SetupWizard
250
272
  onComplete={onSetupComplete}
@@ -254,6 +276,9 @@ function AdminShell({
254
276
  }
255
277
 
256
278
  if (!session && !setupRequired) {
279
+ if (hideAuthScreens) {
280
+ return <HiddenLoginNotFound />
281
+ }
257
282
  if (matchRoute('/forgot-password')) {
258
283
  return <ForgotPassword onNavigate={navigate} />
259
284
  }
@@ -789,38 +814,10 @@ function useAdminPageTitle(config: any, currentPath: string) {
789
814
  // value doesn't change on every render.
790
815
  const EMPTY_RENDERERS: AdminSectionRendererMap = {}
791
816
 
792
- const ISOLATION_STYLE: React.CSSProperties = {
793
- position: 'fixed',
794
- inset: '0',
795
- zIndex: 50,
796
- overflow: 'auto',
797
- isolation: 'isolate',
798
- }
799
-
800
817
  export function AdminRoot(props: AdminRootProps) {
801
818
  const defaultDarkMode = props.config?.admin?.branding?.darkMode
802
819
 
803
- // The admin is private application UI and must never be indexed. Ensure a
804
- // `noindex, nofollow` robots meta tag is present while the admin is mounted,
805
- // as defense-in-depth alongside the server `robots.txt` Disallow rule. This
806
- // covers every consumer install (the admin page is typically a client
807
- // component that can't export Next.js route metadata).
808
- useEffect(() => {
809
- if (typeof document === 'undefined') return
810
- const PREV = document.querySelector<HTMLMetaElement>('meta[name="robots"]')
811
- const prevContent = PREV?.getAttribute('content') ?? null
812
- const meta = PREV ?? document.createElement('meta')
813
- meta.setAttribute('name', 'robots')
814
- meta.setAttribute('content', 'noindex, nofollow')
815
- if (!PREV) document.head.appendChild(meta)
816
- return () => {
817
- if (prevContent === null) {
818
- meta.remove()
819
- } else {
820
- meta.setAttribute('content', prevContent)
821
- }
822
- }
823
- }, [])
820
+ useRobotsNoIndex()
824
821
 
825
822
  return (
826
823
  <div style={ISOLATION_STYLE} className="actuate-admin">
@@ -0,0 +1,166 @@
1
+ 'use client'
2
+
3
+ import { useEffect } from 'react'
4
+ import { useAdminRouter } from './router/index.js'
5
+ import { ThemeProvider } from './components/ThemeProvider.js'
6
+ import { ISOLATION_STYLE, useRobotsNoIndex } from './lib/root-chrome.js'
7
+ import { Login, type CaptchaConfig } from './views/Login.js'
8
+ import { SetupWizard } from './views/SetupWizard.js'
9
+ import { ForgotPassword } from './views/ForgotPassword.js'
10
+ import { ResetPassword } from './views/ResetPassword.js'
11
+
12
+ export interface LoginRootProps {
13
+ config?: any
14
+ /** Current session, if any. Authenticated visitors are sent to `adminPath`. */
15
+ session?: any
16
+ /** Mount path of this login screen (default: '/securelogin'). */
17
+ basePath?: string
18
+ /**
19
+ * Where the admin app lives (default: '/admin'). Users are sent here after
20
+ * signing in — and immediately, if they arrive already authenticated.
21
+ */
22
+ adminPath?: string
23
+ setupRequired?: boolean
24
+ onSetupComplete?: (data: {
25
+ name: string
26
+ email: string
27
+ password: string
28
+ }) => Promise<{ success: boolean; error?: string }>
29
+ onLogin: (
30
+ email: string,
31
+ password: string,
32
+ captchaToken?: string,
33
+ ) => Promise<{
34
+ success: boolean
35
+ error?: string
36
+ requiresTOTP?: boolean
37
+ mfaPendingToken?: string
38
+ }>
39
+ /** Completes the TOTP second-factor step for accounts with MFA enabled. */
40
+ onVerifyTotp?: (
41
+ mfaPendingToken: string,
42
+ code: string,
43
+ ) => Promise<{ success: boolean; error?: string }>
44
+ captchaConfig?: CaptchaConfig
45
+ /**
46
+ * Called once a session exists (after login, or on arrival while already
47
+ * signed in). Defaults to a full-page navigation to `adminPath` — the admin
48
+ * app is a separate route mount, so a client-side route push can't reach it.
49
+ */
50
+ onAuthenticated?: (adminPath: string) => void
51
+ }
52
+
53
+ /**
54
+ * Standalone mount for the unauthenticated auth screens on split-login
55
+ * installs: login (+ MFA), setup wizard, forgot/reset password. Pair it with
56
+ * `<AdminRoot loginPath>` so the admin mount itself stops rendering a login
57
+ * form for signed-out visitors.
58
+ *
59
+ * Routes under `basePath`:
60
+ * - `/` — login (or the setup wizard while `setupRequired`)
61
+ * - `/setup` — setup wizard (first-run; falls back to login once setup is done)
62
+ * - `/forgot-password`, `/reset-password?token=…` — recovery flows; emailed
63
+ * reset/invite links point here when `config.admin.loginPath` is set.
64
+ */
65
+ export function LoginRoot({
66
+ config,
67
+ session,
68
+ basePath = '/securelogin',
69
+ adminPath = '/admin',
70
+ setupRequired,
71
+ onSetupComplete,
72
+ onLogin,
73
+ onVerifyTotp,
74
+ captchaConfig,
75
+ onAuthenticated,
76
+ }: LoginRootProps) {
77
+ const defaultDarkMode = config?.admin?.branding?.darkMode
78
+
79
+ useRobotsNoIndex()
80
+
81
+ return (
82
+ <div style={ISOLATION_STYLE} className="actuate-admin">
83
+ <ThemeProvider defaultDarkMode={defaultDarkMode}>
84
+ <LoginShell
85
+ config={config}
86
+ session={session}
87
+ basePath={basePath}
88
+ adminPath={adminPath}
89
+ setupRequired={setupRequired}
90
+ onSetupComplete={onSetupComplete}
91
+ onLogin={onLogin}
92
+ onVerifyTotp={onVerifyTotp}
93
+ captchaConfig={captchaConfig}
94
+ onAuthenticated={onAuthenticated}
95
+ />
96
+ </ThemeProvider>
97
+ </div>
98
+ )
99
+ }
100
+
101
+ function LoginShell({
102
+ config,
103
+ session,
104
+ basePath = '/securelogin',
105
+ adminPath = '/admin',
106
+ setupRequired,
107
+ onSetupComplete,
108
+ onLogin,
109
+ onVerifyTotp,
110
+ captchaConfig,
111
+ onAuthenticated,
112
+ }: LoginRootProps) {
113
+ const { navigate, matchRoute } = useAdminRouter(basePath, '/')
114
+
115
+ // Already signed in (or just signed in): hand off to the admin app. The
116
+ // admin is a separate route mount, so this must be a full-page navigation.
117
+ const authenticated = Boolean(session) && !setupRequired
118
+ useEffect(() => {
119
+ if (!authenticated) return
120
+ if (onAuthenticated) {
121
+ onAuthenticated(adminPath)
122
+ return
123
+ }
124
+ if (typeof window !== 'undefined') {
125
+ window.location.replace(adminPath)
126
+ }
127
+ }, [authenticated, adminPath, onAuthenticated])
128
+
129
+ if (authenticated) {
130
+ return (
131
+ <div className="bg-background flex min-h-screen items-center justify-center">
132
+ <p className="text-muted-foreground text-sm" role="status">
133
+ Signed in — taking you to the admin…
134
+ </p>
135
+ </div>
136
+ )
137
+ }
138
+
139
+ if (setupRequired && onSetupComplete) {
140
+ return (
141
+ <SetupWizard
142
+ onComplete={onSetupComplete}
143
+ siteName={config?.admin?.branding?.name ?? 'Actuate CMS'}
144
+ />
145
+ )
146
+ }
147
+
148
+ if (matchRoute('/forgot-password')) {
149
+ return <ForgotPassword onNavigate={navigate} />
150
+ }
151
+
152
+ if (matchRoute('/reset-password')) {
153
+ const params = new URLSearchParams(typeof window !== 'undefined' ? window.location.search : '')
154
+ return <ResetPassword onNavigate={navigate} token={params.get('token')} />
155
+ }
156
+
157
+ return (
158
+ <Login
159
+ onLogin={onLogin}
160
+ onVerifyTotp={onVerifyTotp}
161
+ onNavigate={navigate}
162
+ captchaConfig={captchaConfig}
163
+ branding={config?.admin?.branding}
164
+ />
165
+ )
166
+ }
@@ -0,0 +1,115 @@
1
+ // @vitest-environment happy-dom
2
+ import { afterEach, describe, expect, it, vi } from 'vitest'
3
+ import { cleanup, render, screen, waitFor } from '@testing-library/react'
4
+
5
+ /**
6
+ * Split-login mode (user request: login at a non-obvious path like
7
+ * /securelogin, admin app at /admin). Pins:
8
+ * - `LoginRoot` serves login / setup wizard / forgot-password on its own
9
+ * mount and hands off to the admin app once a session exists.
10
+ * - `<AdminRoot loginPath>` renders a 404 lookalike for signed-out visitors
11
+ * instead of a login form, so /admin doesn't advertise the CMS.
12
+ */
13
+
14
+ vi.mock('../../lib/api.js', () => ({
15
+ cmsApi: vi.fn(async () => ({ data: undefined })),
16
+ ensureCsrfToken: vi.fn(async () => undefined),
17
+ setApiBase: vi.fn(),
18
+ }))
19
+
20
+ // This happy-dom environment doesn't expose a functional localStorage, which
21
+ // ThemeProvider/LocaleProvider read on mount.
22
+ const storage = new Map<string, string>()
23
+ vi.stubGlobal('localStorage', {
24
+ getItem: (k: string) => storage.get(k) ?? null,
25
+ setItem: (k: string, v: string) => void storage.set(k, String(v)),
26
+ removeItem: (k: string) => void storage.delete(k),
27
+ clear: () => storage.clear(),
28
+ })
29
+
30
+ const { LoginRoot } = await import('../../LoginRoot.js')
31
+ const { AdminRoot } = await import('../../AdminRoot.js')
32
+
33
+ afterEach(() => {
34
+ cleanup()
35
+ window.history.replaceState({}, '', '/')
36
+ })
37
+
38
+ const noopLogin = vi.fn(async () => ({ success: true }))
39
+
40
+ describe('LoginRoot', () => {
41
+ it('renders the login screen for signed-out visitors', () => {
42
+ window.history.replaceState({}, '', '/securelogin')
43
+ render(<LoginRoot config={{}} session={null} onLogin={noopLogin} />)
44
+ expect(screen.getByText('Sign in to your account')).toBeTruthy()
45
+ })
46
+
47
+ it('renders the setup wizard while setup is required (first-time install)', () => {
48
+ window.history.replaceState({}, '', '/securelogin/setup')
49
+ render(
50
+ <LoginRoot
51
+ config={{ admin: { branding: { name: 'Acme' } } }}
52
+ session={null}
53
+ setupRequired
54
+ onSetupComplete={vi.fn(async () => ({ success: true }))}
55
+ onLogin={noopLogin}
56
+ />,
57
+ )
58
+ expect(screen.getByText('Welcome to Acme')).toBeTruthy()
59
+ })
60
+
61
+ it('serves the forgot-password flow under its own mount', () => {
62
+ window.history.replaceState({}, '', '/securelogin/forgot-password')
63
+ render(<LoginRoot config={{}} session={null} onLogin={noopLogin} />)
64
+ expect(screen.getByText('Reset Password')).toBeTruthy()
65
+ })
66
+
67
+ it('hands an authenticated visitor off to the admin app', async () => {
68
+ window.history.replaceState({}, '', '/securelogin')
69
+ const onAuthenticated = vi.fn()
70
+ render(
71
+ <LoginRoot
72
+ config={{}}
73
+ session={{ user: { id: 'u1' } }}
74
+ adminPath="/admin"
75
+ onLogin={noopLogin}
76
+ onAuthenticated={onAuthenticated}
77
+ />,
78
+ )
79
+ expect(screen.getByRole('status').textContent).toContain('Signed in')
80
+ await waitFor(() => expect(onAuthenticated).toHaveBeenCalledWith('/admin'))
81
+ // No login form is offered to an already-authenticated visitor.
82
+ expect(screen.queryByText('Sign in to your account')).toBeNull()
83
+ })
84
+ })
85
+
86
+ describe('AdminRoot with loginPath (hidden login)', () => {
87
+ it('shows a 404 lookalike instead of a login form when signed out', () => {
88
+ window.history.replaceState({}, '', '/admin')
89
+ render(<AdminRoot config={{}} session={null} loginPath="/securelogin" onLogin={noopLogin} />)
90
+ expect(screen.getByText('This page could not be found.')).toBeTruthy()
91
+ expect(screen.queryByText('Sign in to your account')).toBeNull()
92
+ })
93
+
94
+ it('hides the setup wizard at the admin mount too (it lives on the login mount)', () => {
95
+ window.history.replaceState({}, '', '/admin')
96
+ render(
97
+ <AdminRoot
98
+ config={{}}
99
+ session={null}
100
+ loginPath="/securelogin"
101
+ setupRequired
102
+ onSetupComplete={vi.fn(async () => ({ success: true }))}
103
+ onLogin={noopLogin}
104
+ />,
105
+ )
106
+ expect(screen.getByText('This page could not be found.')).toBeTruthy()
107
+ expect(screen.queryByText(/Welcome to/)).toBeNull()
108
+ })
109
+
110
+ it('keeps the classic inline login when loginPath is not set', () => {
111
+ window.history.replaceState({}, '', '/admin')
112
+ render(<AdminRoot config={{}} session={null} onLogin={noopLogin} />)
113
+ expect(screen.getByText('Sign in to your account')).toBeTruthy()
114
+ })
115
+ })
package/src/index.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export { AdminRoot } from './AdminRoot.js'
2
2
  export type { AdminRootProps } from './AdminRoot.js'
3
+ export { LoginRoot } from './LoginRoot.js'
4
+ export type { LoginRootProps } from './LoginRoot.js'
3
5
 
4
6
  // Pluggable canvas renderers for custom section types (see `AdminRoot`'s
5
7
  // `sectionRenderers` prop). The types structurally mirror
@@ -0,0 +1,40 @@
1
+ import { useEffect } from 'react'
2
+ import type React from 'react'
3
+
4
+ /**
5
+ * Full-viewport overlay style shared by the admin and login mounts so the CMS
6
+ * UI renders above any consumer page chrome, with its own stacking context.
7
+ */
8
+ export const ISOLATION_STYLE: React.CSSProperties = {
9
+ position: 'fixed',
10
+ inset: '0',
11
+ zIndex: 50,
12
+ overflow: 'auto',
13
+ isolation: 'isolate',
14
+ }
15
+
16
+ /**
17
+ * The admin (and its login screens) are private application UI and must never
18
+ * be indexed. Ensure a `noindex, nofollow` robots meta tag is present while
19
+ * mounted, as defense-in-depth alongside the server `robots.txt` Disallow
20
+ * rule. This covers every consumer install (the admin page is typically a
21
+ * client component that can't export Next.js route metadata).
22
+ */
23
+ export function useRobotsNoIndex(): void {
24
+ useEffect(() => {
25
+ if (typeof document === 'undefined') return
26
+ const prev = document.querySelector<HTMLMetaElement>('meta[name="robots"]')
27
+ const prevContent = prev?.getAttribute('content') ?? null
28
+ const meta = prev ?? document.createElement('meta')
29
+ meta.setAttribute('name', 'robots')
30
+ meta.setAttribute('content', 'noindex, nofollow')
31
+ if (!prev) document.head.appendChild(meta)
32
+ return () => {
33
+ if (prevContent === null) {
34
+ meta.remove()
35
+ } else {
36
+ meta.setAttribute('content', prevContent)
37
+ }
38
+ }
39
+ }, [])
40
+ }
@@ -0,0 +1,45 @@
1
+ 'use client'
2
+
3
+ /**
4
+ * Rendered at the admin mount for signed-out visitors on split-login installs
5
+ * (`config.admin.loginPath` set). Mimics the framework's default 404 page so
6
+ * hitting `/admin` reveals nothing — no login form, no admin branding, and no
7
+ * redirect that would leak the real login location.
8
+ */
9
+ export function HiddenLoginNotFound() {
10
+ return (
11
+ <div
12
+ style={{
13
+ fontFamily: 'system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',
14
+ height: '100vh',
15
+ display: 'flex',
16
+ alignItems: 'center',
17
+ justifyContent: 'center',
18
+ background: '#fff',
19
+ color: '#000',
20
+ textAlign: 'center',
21
+ }}
22
+ >
23
+ <div style={{ display: 'flex', alignItems: 'center', lineHeight: '49px' }}>
24
+ <h1
25
+ style={{
26
+ display: 'inline-block',
27
+ margin: '0 20px 0 0',
28
+ paddingRight: 23,
29
+ fontSize: 24,
30
+ fontWeight: 500,
31
+ verticalAlign: 'top',
32
+ borderRight: '1px solid rgba(0, 0, 0, .3)',
33
+ }}
34
+ >
35
+ 404
36
+ </h1>
37
+ <div style={{ display: 'inline-block' }}>
38
+ <h2 style={{ margin: 0, fontSize: 14, fontWeight: 400, lineHeight: '49px' }}>
39
+ This page could not be found.
40
+ </h2>
41
+ </div>
42
+ </div>
43
+ </div>
44
+ )
45
+ }