From dd2434bfa9e1913e2683bcdddc0932a3345dcb00 Mon Sep 17 00:00:00 2001 From: Bernd Storath <999999bst@gmail.com> Date: Thu, 14 Nov 2024 13:11:06 +0100 Subject: [PATCH] delete feature toggle --- src/app/app.vue | 1 - src/app/components/ClientCard/ExpireDate.vue | 1 - src/app/components/ClientCard/OneTimeLink.vue | 6 +- .../components/ClientCard/OneTimeLinkBtn.vue | 1 - src/app/components/Clients/CreateDialog.vue | 6 +- src/app/components/Clients/Sort.vue | 1 - src/app/pages/admin.vue | 4 +- src/app/pages/admin/defaults.vue | 24 ++++++ src/app/pages/admin/features.vue | 83 ------------------- src/app/pages/admin/index.vue | 9 +- src/app/pages/admin/interface.vue | 18 +++- src/app/pages/clients/[id].vue | 5 ++ src/app/stores/clients.ts | 5 +- src/app/stores/global.ts | 23 ----- src/server/api/admin/features.post.ts | 8 -- .../[clientId]/generateOneTimeLink.post.ts | 7 -- src/server/api/cnf/[oneTimeLink].ts | 7 -- src/server/api/features.get.ts | 4 - src/server/middleware/session.ts | 3 +- src/server/utils/WireGuard.ts | 37 ++++----- src/server/utils/types.ts | 18 ---- src/services/database/lowdb.ts | 15 ---- src/services/database/migrations/1.ts | 15 ---- src/services/database/repositories/system.ts | 19 ----- 24 files changed, 74 insertions(+), 246 deletions(-) create mode 100644 src/app/pages/admin/defaults.vue delete mode 100644 src/app/pages/admin/features.vue delete mode 100644 src/server/api/admin/features.post.ts delete mode 100644 src/server/api/features.get.ts diff --git a/src/app/app.vue b/src/app/app.vue index cc92d19d..58de9865 100644 --- a/src/app/app.vue +++ b/src/app/app.vue @@ -11,7 +11,6 @@ diff --git a/src/app/components/Clients/Sort.vue b/src/app/components/Clients/Sort.vue index 47e86a37..fe88b589 100644 --- a/src/app/components/Clients/Sort.vue +++ b/src/app/components/Clients/Sort.vue @@ -1,6 +1,5 @@ diff --git a/src/app/pages/admin.vue b/src/app/pages/admin.vue index faca67b9..2b3f76c2 100644 --- a/src/app/pages/admin.vue +++ b/src/app/pages/admin.vue @@ -41,7 +41,9 @@ authStore.update(); const route = useRoute(); const menuItems = [ - { id: 'features', name: 'Features' }, + { id: '', name: 'General' }, + { id: 'defaults', name: 'Defaults' }, + { id: 'interface', name: 'Interface' }, { id: 'statistics', name: 'Statistics' }, { id: 'metrics', name: 'Metrics' }, ]; diff --git a/src/app/pages/admin/defaults.vue b/src/app/pages/admin/defaults.vue new file mode 100644 index 00000000..1baa87a6 --- /dev/null +++ b/src/app/pages/admin/defaults.vue @@ -0,0 +1,24 @@ + + + + Connection + + + + + Allowed IPs + + + + DNS + + + + Advanced + + + + + + + diff --git a/src/app/pages/admin/features.vue b/src/app/pages/admin/features.vue deleted file mode 100644 index a2db6a3a..00000000 --- a/src/app/pages/admin/features.vue +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - {{ feature.name }} - - - {{ feature.description }} - - - - - - - - Save - - - - - diff --git a/src/app/pages/admin/index.vue b/src/app/pages/admin/index.vue index cc9ba8be..42df6089 100644 --- a/src/app/pages/admin/index.vue +++ b/src/app/pages/admin/index.vue @@ -1,10 +1,9 @@ - This is the Admin Panel. Your are running wg-easy - {{ globalStore.currentRelease }} + + + - + diff --git a/src/app/pages/admin/interface.vue b/src/app/pages/admin/interface.vue index 12fecad5..1bdaffe7 100644 --- a/src/app/pages/admin/interface.vue +++ b/src/app/pages/admin/interface.vue @@ -1,3 +1,19 @@ - + + + + Interface Settings + + + + + + Scripts + + + + + + + diff --git a/src/app/pages/clients/[id].vue b/src/app/pages/clients/[id].vue index 0fcd2550..edfd76a3 100644 --- a/src/app/pages/clients/[id].vue +++ b/src/app/pages/clients/[id].vue @@ -25,6 +25,11 @@ Allowed IPs + + Server Allowed IPs + + + Advanced diff --git a/src/app/stores/clients.ts b/src/app/stores/clients.ts index 49adaed1..33431942 100644 --- a/src/app/stores/clients.ts +++ b/src/app/stores/clients.ts @@ -108,10 +108,7 @@ export const useClientsStore = defineStore('Clients', () => { }; }); - if ( - globalStore.features.sortClients.enabled && - transformedClients !== undefined - ) { + if (transformedClients !== undefined) { transformedClients = sortByProperty( transformedClients, 'name', diff --git a/src/app/stores/global.ts b/src/app/stores/global.ts index cef17527..8f4f8333 100644 --- a/src/app/stores/global.ts +++ b/src/app/stores/global.ts @@ -38,27 +38,6 @@ export const useGlobalStore = defineStore('Global', () => { updateAvailable.value = release.value.updateAvailable; } - const features = ref({ - sortClients: { - enabled: false, - }, - clientExpiration: { - enabled: false, - }, - oneTimeLinks: { - enabled: false, - }, - }); - - async function fetchFeatures() { - const { data: apiFeatures } = await useFetch('/api/features', { - method: 'get', - }); - if (apiFeatures.value) { - features.value = apiFeatures.value; - } - } - const statistics = ref({ enabled: false, chartType: 0, @@ -97,8 +76,6 @@ export const useGlobalStore = defineStore('Global', () => { latestRelease, updateAvailable, fetchRelease, - features, - fetchFeatures, statistics, fetchStatistics, uiShowCharts, diff --git a/src/server/api/admin/features.post.ts b/src/server/api/admin/features.post.ts deleted file mode 100644 index f87119aa..00000000 --- a/src/server/api/admin/features.post.ts +++ /dev/null @@ -1,8 +0,0 @@ -export default defineEventHandler(async (event) => { - const { features } = await readValidatedBody( - event, - validateZod(featuresType) - ); - await Database.system.updateFeatures(features); - return { success: true }; -}); diff --git a/src/server/api/client/[clientId]/generateOneTimeLink.post.ts b/src/server/api/client/[clientId]/generateOneTimeLink.post.ts index d827ef54..dfd861d1 100644 --- a/src/server/api/client/[clientId]/generateOneTimeLink.post.ts +++ b/src/server/api/client/[clientId]/generateOneTimeLink.post.ts @@ -1,11 +1,4 @@ export default defineEventHandler(async (event) => { - const system = await Database.system.get(); - if (!system.features.oneTimeLinks.enabled) { - throw createError({ - status: 404, - message: 'Invalid state', - }); - } const { clientId } = await getValidatedRouterParams( event, validateZod(clientIdType) diff --git a/src/server/api/cnf/[oneTimeLink].ts b/src/server/api/cnf/[oneTimeLink].ts index b09719b0..9afbeed3 100644 --- a/src/server/api/cnf/[oneTimeLink].ts +++ b/src/server/api/cnf/[oneTimeLink].ts @@ -1,11 +1,4 @@ export default defineEventHandler(async (event) => { - const system = await Database.system.get(); - if (!system.features.oneTimeLinks.enabled) { - throw createError({ - statusCode: 404, - statusMessage: 'Invalid state', - }); - } const { oneTimeLink } = await getValidatedRouterParams( event, validateZod(oneTimeLinkType) diff --git a/src/server/api/features.get.ts b/src/server/api/features.get.ts deleted file mode 100644 index ef20118d..00000000 --- a/src/server/api/features.get.ts +++ /dev/null @@ -1,4 +0,0 @@ -export default defineEventHandler(async () => { - const system = await Database.system.get(); - return system.features; -}); diff --git a/src/server/middleware/session.ts b/src/server/middleware/session.ts index b10d880a..c926851e 100644 --- a/src/server/middleware/session.ts +++ b/src/server/middleware/session.ts @@ -9,8 +9,7 @@ export default defineEventHandler(async (event) => { url.pathname.startsWith('/api/setup/') || url.pathname === '/api/session' || url.pathname === '/api/lang' || - url.pathname === '/api/release' || - url.pathname === '/api/features' + url.pathname === '/api/release' ) { return; } diff --git a/src/server/utils/WireGuard.ts b/src/server/utils/WireGuard.ts index b345459a..0ea50a0c 100644 --- a/src/server/utils/WireGuard.ts +++ b/src/server/utils/WireGuard.ts @@ -325,32 +325,29 @@ class WireGuard { async cronJob() { const clients = await Database.client.findAll(); - const system = await Database.system.get(); // Expires Feature - if (system.features.clientExpiration.enabled) { - for (const client of Object.values(clients)) { - if (client.enabled !== true) continue; - if ( - client.expiresAt !== null && - new Date() > new Date(client.expiresAt) - ) { - DEBUG(`Client ${client.id} expired.`); - await Database.client.toggle(client.id, false); - } + for (const client of Object.values(clients)) { + if (client.enabled !== true) continue; + if ( + client.expiresAt !== null && + new Date() > new Date(client.expiresAt) + ) { + DEBUG(`Client ${client.id} expired.`); + await Database.client.toggle(client.id, false); } } + // One Time Link Feature - if (system.features.oneTimeLinks.enabled) { - for (const client of Object.values(clients)) { - if ( - client.oneTimeLink !== null && - new Date() > new Date(client.oneTimeLink.expiresAt) - ) { - DEBUG(`Client ${client.id} One Time Link expired.`); - await Database.client.deleteOneTimeLink(client.id); - } + for (const client of Object.values(clients)) { + if ( + client.oneTimeLink !== null && + new Date() > new Date(client.oneTimeLink.expiresAt) + ) { + DEBUG(`Client ${client.id} One Time Link expired.`); + await Database.client.deleteOneTimeLink(client.id); } } + await this.saveConfig(); } diff --git a/src/server/utils/types.ts b/src/server/utils/types.ts index 4c0a6c05..2a398ed0 100644 --- a/src/server/utils/types.ts +++ b/src/server/utils/types.ts @@ -55,17 +55,6 @@ const oneTimeLink = z .min(1, 'zod.otlMin') // i18n key .pipe(safeStringRefine); -const features = z.record( - z.string({ message: 'zod.features' }), // i18n key - z.object( - { - enabled: z.boolean({ message: 'zod.ftBool' }), // i18n key - }, - { message: 'zod.ftObj' } // i18n key - ), - { message: 'zod.ftObj2' } // i18n key -); - const statistics = z.object( { enabled: z.boolean({ message: 'zod.statBool' }), // i18n key @@ -180,13 +169,6 @@ export const passwordSetupType = z.object( { message: objectMessage } ); -export const featuresType = z.object( - { - features: features, - }, - { message: objectMessage } -); - export const statisticsType = z.object( { statistics: statistics, diff --git a/src/services/database/lowdb.ts b/src/services/database/lowdb.ts index 28e7927c..0b638943 100644 --- a/src/services/database/lowdb.ts +++ b/src/services/database/lowdb.ts @@ -19,11 +19,8 @@ import { type OneTimeLink, } from './repositories/client'; import { - AvailableFeatures, ChartType, SystemRepository, - type Feature, - type Features, type Lang, type Statistics, } from './repositories/system'; @@ -81,18 +78,6 @@ class LowDBSystem extends SystemRepository { return makeReadonly(system); } - async updateFeatures(features: Record) { - DEBUG('Update Features'); - this.#db.update((v) => { - for (const key in features) { - if (AvailableFeatures.includes(key as keyof Features)) { - v.system.features[key as keyof Features].enabled = - features[key]!.enabled; - } - } - }); - } - async updateStatistics(statistics: Statistics) { DEBUG('Update Statistics'); this.#db.update((v) => { diff --git a/src/services/database/migrations/1.ts b/src/services/database/migrations/1.ts index 61494e93..b410d076 100644 --- a/src/services/database/migrations/1.ts +++ b/src/services/database/migrations/1.ts @@ -49,21 +49,6 @@ export async function run1(db: Low) { PreDown: '', PostDown: '', }, - features: { - clientExpiration: { - enabled: false, - }, - oneTimeLinks: { - enabled: false, - }, - sortClients: { - enabled: false, - }, - }, - statistics: { - enabled: false, - chartType: ChartType.None, - }, metrics: { prometheus: { enabled: false, diff --git a/src/services/database/repositories/system.ts b/src/services/database/repositories/system.ts index e8c5b8c1..8db1df41 100644 --- a/src/services/database/repositories/system.ts +++ b/src/services/database/repositories/system.ts @@ -49,10 +49,6 @@ export type Prometheus = { password: string | null; }; -export type Feature = { - enabled: boolean; -}; - export type Metrics = { prometheus: Prometheus; }; @@ -62,18 +58,6 @@ export type General = { lang: Lang; }; -export type Features = { - clientExpiration: Feature; - oneTimeLinks: Feature; - sortClients: Feature; -}; - -export const AvailableFeatures: (keyof Features)[] = [ - 'clientExpiration', - 'oneTimeLinks', - 'sortClients', -] as const; - export type System = { general: General; @@ -83,8 +67,6 @@ export type System = { iptables: IpTables; - features: Features; - statistics: Statistics; metrics: Metrics; @@ -100,7 +82,6 @@ export type System = { export abstract class SystemRepository { abstract get(): Promise>; - abstract updateFeatures(features: Record): Promise; abstract updateStatistics(statistics: Statistics): Promise; abstract updateLang(lang: Lang): Promise; abstract updateClientsHostPort(host: string, port: number): Promise;
- {{ feature.description }} -