Skip to content
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
39caa0d
feat: Add admin custom Stripe product creation support
athul-rs Nov 10, 2025
f703008
Merge branch 'main' into feature/custom-stripe-products-backend
athul-rs Nov 10, 2025
ca4b8f6
chore: Add NOSONAR comments for plugin loading pattern
athul-rs Nov 10, 2025
306ddd9
style: Fix Prettier formatting for NOSONAR comments
athul-rs Nov 10, 2025
8fa0f53
fix: Correct NOSONAR comment placement for SonarQube
athul-rs Nov 11, 2025
f824c5c
fix: Add NOSONAR comments to suppress empty catch warnings
athul-rs Nov 11, 2025
b0df47b
Merge branch 'main' into feature/custom-stripe-products-backend
athul-rs Nov 11, 2025
40dea8c
Merge branch 'main' of github.com:Zipstack/unstract into feature/cust…
athul-rs Nov 11, 2025
dfc3f5a
path modified admin cusotm plans
athul-rs Nov 12, 2025
3f8cb53
UN-2861 [FEAT] Add RequireStaff permission for custom plans administr…
athul-rs Nov 12, 2025
fb8107a
Remove unused RequireStaff component
athul-rs Nov 12, 2025
51e1a92
Remove RequireStaff dependency from OSS routes
athul-rs Nov 13, 2025
c93cba0
Fix Prettier formatting for staff check return statement
athul-rs Nov 13, 2025
bf3732d
Merge branch 'main' into feature/custom-stripe-products-backend
athul-rs Nov 13, 2025
5c1d740
Refactor inline CSS to classes in UnstractAdministrationPage
athul-rs Nov 13, 2025
433b0b1
Fix React Rules of Hooks violation in useMainAppRoutes
athul-rs Nov 13, 2025
79eb7cf
Merge branch 'main' into feature/custom-stripe-products-backend
johnyrahul Nov 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions frontend/src/components/helpers/auth/RequireStaff.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { Outlet } from "react-router-dom";

import { useSessionStore } from "../../../store/session-store";
import { Unauthorized } from "../../error/UnAuthorized/Unauthorized.jsx";
import { NotFound } from "../../error/NotFound/NotFound.jsx";

const RequireStaff = () => {
const { sessionDetails } = useSessionStore();
const isStaff = sessionDetails?.isStaff || sessionDetails?.is_staff;
const orgName = sessionDetails?.orgName;
const isOpenSource = orgName === "mock_org";

if (!isStaff) {
return <Unauthorized />;
}
if (isOpenSource) {
return <NotFound />;
}

return <Outlet />;
};

export { RequireStaff };
23 changes: 23 additions & 0 deletions frontend/src/pages/UnstractAdministrationPage.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
let UnstractAdministration;

try {
UnstractAdministration =
require("../plugins/subscription-admin/components/UnstractAdministration.jsx").UnstractAdministration;
} catch (err) {
// NOSONAR
// Cloud-only feature, not available in OSS
}

function UnstractAdministrationPage() {
if (!UnstractAdministration) {
return (
<div style={{ padding: "24px", textAlign: "center" }}>
<h2>Administration Panel</h2>
<p>This feature is only available in Unstract Cloud.</p>
</div>
);
}
return <UnstractAdministration />;
}

export { UnstractAdministrationPage };
15 changes: 15 additions & 0 deletions frontend/src/routes/Router.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,15 @@ try {
// Do nothing, Not-found Page will be triggered.
}

let LlmWhispererCustomCheckoutPage;
try {
LlmWhispererCustomCheckoutPage =
require("../plugins/llm-whisperer/pages/LlmWhispererCustomCheckoutPage.jsx").LlmWhispererCustomCheckoutPage;
} catch (err) {
// NOSONAR
// Do nothing, Not-found Page will be triggered.
}

function Router() {
const MainAppRoute = useMainAppRoutes();
return (
Expand Down Expand Up @@ -147,6 +156,12 @@ function Router() {
element={<CustomPlanCheckoutPage />}
/>
)}
{LlmWhispererCustomCheckoutPage && (
<Route
path="/llm-whisperer/custom-checkout"
element={<LlmWhispererCustomCheckoutPage />}
/>
)}
<Route path="" element={<RequireAuth />}>
{MainAppRoute}
{llmWhispererRouter && (
Expand Down
8 changes: 8 additions & 0 deletions frontend/src/routes/useMainAppRoutes.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { ToolsSettingsPage } from "../pages/ToolsSettingsPage.jsx";
import { SettingsPage } from "../pages/SettingsPage.jsx";
import { PlatformSettings } from "../components/settings/platform/PlatformSettings.jsx";
import { RequireAdmin } from "../components/helpers/auth/RequireAdmin.js";
import { RequireStaff } from "../components/helpers/auth/RequireStaff.js";
import { UsersPage } from "../pages/UsersPage.jsx";
import { InviteEditUserPage } from "../pages/InviteEditUserPage.jsx";
import { DefaultTriad } from "../components/settings/default-triad/DefaultTriad.jsx";
Expand All @@ -22,6 +23,7 @@ import { OutputAnalyzerPage } from "../pages/OutputAnalyzerPage.jsx";
import { LogsPage } from "../pages/LogsPage.jsx";
import { deploymentTypes } from "../helpers/GetStaticData.js";
import ConnectorsPage from "../pages/ConnectorsPage.jsx";
import { UnstractAdministrationPage } from "../pages/UnstractAdministrationPage.jsx";

let RequirePlatformAdmin;
let PlatformAdminPage;
Expand Down Expand Up @@ -117,6 +119,12 @@ function useMainAppRoutes() {
<Route path="pricing" element={<UnstractSubscriptionPage />} />
</Route>
)}
<Route element={<RequireStaff />}>
<Route
path="admin/custom-plans"
element={<UnstractAdministrationPage />}
/>
</Route>
<Route path="profile" element={<ProfilePage />} />
<Route
path="api"
Expand Down