@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 +9 -0
- package/dist/AdminRoot.d.ts +10 -0
- package/dist/AdminRoot.d.ts.map +1 -1
- package/dist/AdminRoot.js +15 -32
- package/dist/AdminRoot.js.map +1 -1
- package/dist/LoginRoot.d.ts +54 -0
- package/dist/LoginRoot.d.ts.map +1 -0
- package/dist/LoginRoot.js +59 -0
- package/dist/LoginRoot.js.map +1 -0
- package/dist/__tests__/views/login-root.render.test.d.ts +2 -0
- package/dist/__tests__/views/login-root.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/login-root.render.test.js +79 -0
- package/dist/__tests__/views/login-root.render.test.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/root-chrome.d.ts +15 -0
- package/dist/lib/root-chrome.d.ts.map +1 -0
- package/dist/lib/root-chrome.js +41 -0
- package/dist/lib/root-chrome.js.map +1 -0
- package/dist/views/HiddenLoginNotFound.d.ts +8 -0
- package/dist/views/HiddenLoginNotFound.d.ts.map +1 -0
- package/dist/views/HiddenLoginNotFound.js +29 -0
- package/dist/views/HiddenLoginNotFound.js.map +1 -0
- package/package.json +2 -2
- package/src/AdminRoot.tsx +26 -29
- package/src/LoginRoot.tsx +166 -0
- package/src/__tests__/views/login-root.render.test.tsx +115 -0
- package/src/index.ts +2 -0
- package/src/lib/root-chrome.ts +40 -0
- package/src/views/HiddenLoginNotFound.tsx +45 -0
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
|
package/dist/AdminRoot.d.ts
CHANGED
|
@@ -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;
|
package/dist/AdminRoot.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminRoot.d.ts","sourceRoot":"","sources":["../src/AdminRoot.tsx"],"names":[],"mappings":"
|
|
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
|
-
|
|
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
|
package/dist/AdminRoot.js.map
CHANGED
|
@@ -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 @@
|
|
|
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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
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.
|
|
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.
|
|
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
|
-
|
|
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
|
+
}
|