From 357f297a3ecbab7f655900601d99051f590b68ed Mon Sep 17 00:00:00 2001 From: miloschwartz Date: Wed, 3 Dec 2025 15:02:39 -0500 Subject: [PATCH] remove enable_clients flag from config --- config/config.example.yml | 1 - server/lib/config.ts | 4 - server/lib/readConfigFile.ts | 3 +- server/middlewares/index.ts | 1 - server/middlewares/verifyClientsEnabled.ts | 29 ------- server/private/routers/external.ts | 2 - server/routers/external.ts | 7 -- server/routers/integration.ts | 7 -- src/app/[orgId]/settings/clients/layout.tsx | 4 - src/app/[orgId]/settings/general/page.tsx | 44 +++++----- src/app/[orgId]/settings/layout.tsx | 2 +- .../[orgId]/settings/sites/create/page.tsx | 87 +++++++++---------- src/app/navigation.tsx | 60 +++++-------- src/app/setup/page.tsx | 46 +++++----- src/components/SiteInfoCard.tsx | 4 +- src/components/SitesTable.tsx | 66 ++++++-------- src/lib/pullEnv.ts | 2 - src/lib/types/env.ts | 1 - 18 files changed, 138 insertions(+), 232 deletions(-) delete mode 100644 server/middlewares/verifyClientsEnabled.ts diff --git a/config/config.example.yml b/config/config.example.yml index e4af586c..7eeebf81 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -25,4 +25,3 @@ flags: disable_user_create_org: true allow_raw_resources: true enable_integration_api: true - enable_clients: true diff --git a/server/lib/config.ts b/server/lib/config.ts index b49814f0..9874518e 100644 --- a/server/lib/config.ts +++ b/server/lib/config.ts @@ -85,10 +85,6 @@ export class Config { ? "true" : "false"; - process.env.FLAGS_ENABLE_CLIENTS = parsedConfig.flags?.enable_clients - ? "true" - : "false"; - process.env.PRODUCT_UPDATES_NOTIFICATION_ENABLED = parsedConfig.app .notifications.product_updates ? "true" diff --git a/server/lib/readConfigFile.ts b/server/lib/readConfigFile.ts index fe0dd593..ac819619 100644 --- a/server/lib/readConfigFile.ts +++ b/server/lib/readConfigFile.ts @@ -325,8 +325,7 @@ export const configSchema = z enable_integration_api: z.boolean().optional(), disable_local_sites: z.boolean().optional(), disable_basic_wireguard_sites: z.boolean().optional(), - disable_config_managed_domains: z.boolean().optional(), - enable_clients: z.boolean().optional().default(true) + disable_config_managed_domains: z.boolean().optional() }) .optional(), dns: z diff --git a/server/middlewares/index.ts b/server/middlewares/index.ts index 32ef1861..305abaa8 100644 --- a/server/middlewares/index.ts +++ b/server/middlewares/index.ts @@ -25,7 +25,6 @@ export * from "./integration"; export * from "./verifyUserHasAction"; export * from "./verifyApiKeyAccess"; export * from "./verifyDomainAccess"; -export * from "./verifyClientsEnabled"; export * from "./verifyUserIsOrgOwner"; export * from "./verifySiteResourceAccess"; export * from "./logActionAudit"; diff --git a/server/middlewares/verifyClientsEnabled.ts b/server/middlewares/verifyClientsEnabled.ts deleted file mode 100644 index 6e8070da..00000000 --- a/server/middlewares/verifyClientsEnabled.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Request, Response, NextFunction } from "express"; -import createHttpError from "http-errors"; -import HttpCode from "@server/types/HttpCode"; -import config from "@server/lib/config"; - -export async function verifyClientsEnabled( - req: Request, - res: Response, - next: NextFunction -) { - try { - if (!config.getRawConfig().flags?.enable_clients) { - return next( - createHttpError( - HttpCode.NOT_IMPLEMENTED, - "Clients are not enabled on this server." - ) - ); - } - return next(); - } catch (error) { - return next( - createHttpError( - HttpCode.INTERNAL_SERVER_ERROR, - "Failed to check if clients are enabled" - ) - ); - } -} diff --git a/server/private/routers/external.ts b/server/private/routers/external.ts index eefd175c..3e297df5 100644 --- a/server/private/routers/external.ts +++ b/server/private/routers/external.ts @@ -31,7 +31,6 @@ import { verifyUserIsServerAdmin, verifySiteAccess, verifyClientAccess, - verifyClientsEnabled, } from "@server/middlewares"; import { ActionsEnum } from "@server/auth/actions"; import { @@ -410,7 +409,6 @@ authenticated.get( authenticated.post( "/re-key/:clientId/regenerate-client-secret", - verifyClientsEnabled, verifyClientAccess, verifyUserHasAction(ActionsEnum.reGenerateSecret), reKey.reGenerateClientSecret diff --git a/server/routers/external.ts b/server/routers/external.ts index 8418a605..453a706f 100644 --- a/server/routers/external.ts +++ b/server/routers/external.ts @@ -37,7 +37,6 @@ import { verifyClientAccess, verifyApiKeyAccess, verifyDomainAccess, - verifyClientsEnabled, verifyUserHasAction, verifyUserIsOrgOwner, verifySiteResourceAccess, @@ -131,7 +130,6 @@ authenticated.get( authenticated.get( "/org/:orgId/pick-client-defaults", - verifyClientsEnabled, verifyOrgAccess, verifyUserHasAction(ActionsEnum.createClient), client.pickClientDefaults @@ -139,7 +137,6 @@ authenticated.get( authenticated.get( "/org/:orgId/clients", - verifyClientsEnabled, verifyOrgAccess, verifyUserHasAction(ActionsEnum.listClients), client.listClients @@ -147,7 +144,6 @@ authenticated.get( authenticated.get( "/client/:clientId", - verifyClientsEnabled, verifyClientAccess, verifyUserHasAction(ActionsEnum.getClient), client.getClient @@ -155,7 +151,6 @@ authenticated.get( authenticated.put( "/org/:orgId/client", - verifyClientsEnabled, verifyOrgAccess, verifyUserHasAction(ActionsEnum.createClient), logActionAudit(ActionsEnum.createClient), @@ -165,7 +160,6 @@ authenticated.put( // TODO: Separate into a deleteUserClient (for user clients) and deleteClient (for machine clients) authenticated.delete( "/client/:clientId", - verifyClientsEnabled, verifyClientAccess, verifyUserHasAction(ActionsEnum.deleteClient), logActionAudit(ActionsEnum.deleteClient), @@ -174,7 +168,6 @@ authenticated.delete( authenticated.post( "/client/:clientId", - verifyClientsEnabled, verifyClientAccess, // this will check if the user has access to the client verifyUserHasAction(ActionsEnum.updateClient), // this will check if the user has permission to update the client logActionAudit(ActionsEnum.updateClient), diff --git a/server/routers/integration.ts b/server/routers/integration.ts index a4f14a16..82741bd5 100644 --- a/server/routers/integration.ts +++ b/server/routers/integration.ts @@ -24,7 +24,6 @@ import { verifyApiKeyAccessTokenAccess, verifyApiKeyIsRoot, verifyApiKeyClientAccess, - verifyClientsEnabled, verifyApiKeySiteResourceAccess, verifyApiKeySetResourceClients } from "@server/middlewares"; @@ -796,7 +795,6 @@ authenticated.get( authenticated.get( "/org/:orgId/pick-client-defaults", - verifyClientsEnabled, verifyApiKeyOrgAccess, verifyApiKeyHasAction(ActionsEnum.createClient), client.pickClientDefaults @@ -804,7 +802,6 @@ authenticated.get( authenticated.get( "/org/:orgId/clients", - verifyClientsEnabled, verifyApiKeyOrgAccess, verifyApiKeyHasAction(ActionsEnum.listClients), client.listClients @@ -812,7 +809,6 @@ authenticated.get( authenticated.get( "/client/:clientId", - verifyClientsEnabled, verifyApiKeyClientAccess, verifyApiKeyHasAction(ActionsEnum.getClient), client.getClient @@ -820,7 +816,6 @@ authenticated.get( authenticated.put( "/org/:orgId/client", - verifyClientsEnabled, verifyApiKeyOrgAccess, verifyApiKeyHasAction(ActionsEnum.createClient), logActionAudit(ActionsEnum.createClient), @@ -839,7 +834,6 @@ authenticated.put( authenticated.delete( "/client/:clientId", - verifyClientsEnabled, verifyApiKeyClientAccess, verifyApiKeyHasAction(ActionsEnum.deleteClient), logActionAudit(ActionsEnum.deleteClient), @@ -848,7 +842,6 @@ authenticated.delete( authenticated.post( "/client/:clientId", - verifyClientsEnabled, verifyApiKeyClientAccess, verifyApiKeyHasAction(ActionsEnum.updateClient), logActionAudit(ActionsEnum.updateClient), diff --git a/src/app/[orgId]/settings/clients/layout.tsx b/src/app/[orgId]/settings/clients/layout.tsx index 59a46414..f0e539f2 100644 --- a/src/app/[orgId]/settings/clients/layout.tsx +++ b/src/app/[orgId]/settings/clients/layout.tsx @@ -13,9 +13,5 @@ export default async function SettingsLayout(props: SettingsLayoutProps) { const { children } = props; const env = pullEnv(); - if (!env.flags.enableClients) { - redirect(`/${params.orgId}/settings`); - } - return children; } diff --git a/src/app/[orgId]/settings/general/page.tsx b/src/app/[orgId]/settings/general/page.tsx index fdedba5c..e991ea70 100644 --- a/src/app/[orgId]/settings/general/page.tsx +++ b/src/app/[orgId]/settings/general/page.tsx @@ -342,29 +342,25 @@ export default function GeneralPage() { )} /> - {env.flags.enableClients && ( - ( - - - {t("subnet")} - - - - - - - {t("subnetDescription")} - - - )} - /> - )} + ( + + {t("subnet")} + + + + + + {t("subnetDescription")} + + + )} + /> @@ -600,7 +596,7 @@ export default function GeneralPage() { - + {children} diff --git a/src/app/[orgId]/settings/sites/create/page.tsx b/src/app/[orgId]/settings/sites/create/page.tsx index e5e4e25a..740644d5 100644 --- a/src/app/[orgId]/settings/sites/create/page.tsx +++ b/src/app/[orgId]/settings/sites/create/page.tsx @@ -708,51 +708,50 @@ WantedBy=default.target` )} /> - {env.flags.enableClients && - form.watch("method") === - "newt" && ( - ( - - - {t( - "siteAddress" - )} - - - ( + + + {t( + "siteAddress" + )} + + + { + setClientAddress( e - ) => { - setClientAddress( - e - .target - .value - ); - field.onChange( - e - .target - .value - ); - }} - /> - - - - {t( - "siteAddressDescription" - )} - - - )} - /> - )} + .target + .value + ); + field.onChange( + e + .target + .value + ); + }} + /> + + + + {t( + "siteAddressDescription" + )} + + + )} + /> + )} diff --git a/src/app/navigation.tsx b/src/app/navigation.tsx index 92ff41e1..3a5b791d 100644 --- a/src/app/navigation.tsx +++ b/src/app/navigation.tsx @@ -38,9 +38,7 @@ export const orgLangingNavItems: SidebarNavItem[] = [ } ]; -export const orgNavSections = ( - enableClients: boolean = true -): SidebarNavSection[] => [ +export const orgNavSections = (): SidebarNavSection[] => [ { heading: "General", items: [ @@ -58,42 +56,30 @@ export const orgNavSections = ( href: "/{orgId}/settings/resources/proxy", icon: }, - ...(enableClients - ? [ - { - title: "sidebarClientResources", - href: "/{orgId}/settings/resources/client", - icon: ( - - ) - } - ] - : []) + { + title: "sidebarClientResources", + href: "/{orgId}/settings/resources/client", + icon: + } + ] + }, + { + title: "sidebarClients", + icon: , + isBeta: true, + items: [ + { + href: "/{orgId}/settings/clients/user", + title: "sidebarUserDevices", + icon: + }, + { + href: "/{orgId}/settings/clients/machine", + title: "sidebarMachineClients", + icon: + } ] }, - ...(enableClients - ? [ - { - title: "sidebarClients", - icon: , - isBeta: true, - items: [ - { - href: "/{orgId}/settings/clients/user", - title: "sidebarUserDevices", - icon: ( - - ) - }, - { - href: "/{orgId}/settings/clients/machine", - title: "sidebarMachineClients", - icon: - } - ] - } - ] - : []), ...(build == "saas" ? [ { diff --git a/src/app/setup/page.tsx b/src/app/setup/page.tsx index 9669ee23..7fa57d5f 100644 --- a/src/app/setup/page.tsx +++ b/src/app/setup/page.tsx @@ -296,31 +296,27 @@ export default function StepperForm() { )} /> - {env.flags.enableClients && ( - ( - - - Subnet - - - - - - - The subnet for this - organization's internal - network. - - - )} - /> - )} + ( + + Subnet + + + + + + The subnet for this + organization's internal + network. + + + )} + /> {orgIdTaken && !orgCreated ? ( diff --git a/src/components/SiteInfoCard.tsx b/src/components/SiteInfoCard.tsx index 6d35e145..26327349 100644 --- a/src/components/SiteInfoCard.tsx +++ b/src/components/SiteInfoCard.tsx @@ -35,7 +35,7 @@ export default function SiteInfoCard({ }: SiteInfoCardProps) { return ( - + {t("identifier")} @@ -75,7 +75,7 @@ export default function SiteInfoCard({ }: SiteInfoCardProps) { - {env.flags.enableClients && site.type == "newt" && ( + {site.type == "newt" && ( Address diff --git a/src/components/SitesTable.tsx b/src/components/SitesTable.tsx index 979cfdec..452ce189 100644 --- a/src/components/SitesTable.tsx +++ b/src/components/SitesTable.tsx @@ -306,42 +306,32 @@ export default function SitesTable({ sites, orgId }: SitesTableProps) { ); } }, - ...(env.flags.enableClients - ? [ - { - accessorKey: "address", - header: ({ - column - }: { - column: Column; - }) => { - return ( - - ); - }, - cell: ({ row }: { row: any }) => { - const originalRow = row.original; - return originalRow.address ? ( -
- {originalRow.address} -
- ) : ( - "-" - ); - } - } - ] - : []), + { + accessorKey: "address", + header: ({ column }: { column: Column }) => { + return ( + + ); + }, + cell: ({ row }: { row: any }) => { + const originalRow = row.original; + return originalRow.address ? ( +
+ {originalRow.address} +
+ ) : ( + "-" + ); + } + }, { id: "actions", enableHiding: false, @@ -403,9 +393,7 @@ export default function SitesTable({ sites, orgId }: SitesTableProps) { }} dialog={
-

- {t("siteQuestionRemove")} -

+

{t("siteQuestionRemove")}

{t("siteMessageRemove")}

} diff --git a/src/lib/pullEnv.ts b/src/lib/pullEnv.ts index f9349eef..c989f4bb 100644 --- a/src/lib/pullEnv.ts +++ b/src/lib/pullEnv.ts @@ -55,8 +55,6 @@ export function pullEnv(): Env { process.env.FLAGS_DISABLE_BASIC_WIREGUARD_SITES === "true" ? true : false, - enableClients: - process.env.FLAGS_ENABLE_CLIENTS === "true" ? true : false, hideSupporterKey: process.env.HIDE_SUPPORTER_KEY === "true" ? true : false, usePangolinDns: diff --git a/src/lib/types/env.ts b/src/lib/types/env.ts index 0cc22b97..7105edb8 100644 --- a/src/lib/types/env.ts +++ b/src/lib/types/env.ts @@ -30,7 +30,6 @@ export type Env = { allowRawResources: boolean; disableLocalSites: boolean; disableBasicWireguardSites: boolean; - enableClients: boolean; hideSupporterKey: boolean; usePangolinDns: boolean; };