From c2aee19a67d44ea19181696828a6180c6723b0b5 Mon Sep 17 00:00:00 2001 From: timothycarambat Date: Wed, 26 Feb 2025 12:13:08 -0800 Subject: [PATCH 1/2] fix: bug where in single user mode deletion of an api key deletes all resolves #3352 --- frontend/src/models/system.js | 4 ++-- server/endpoints/admin.js | 1 + server/endpoints/system.js | 39 +++++++++++++++++++++-------------- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/frontend/src/models/system.js b/frontend/src/models/system.js index 663cb21b76f..2e4fd63bf19 100644 --- a/frontend/src/models/system.js +++ b/frontend/src/models/system.js @@ -493,8 +493,8 @@ const System = { return { apiKey: null, error: e.message }; }); }, - deleteApiKey: async function () { - return fetch(`${API_BASE}/system/api-key`, { + deleteApiKey: async function (apiKeyId = "") { + return fetch(`${API_BASE}/system/api-key/${apiKeyId}`, { method: "DELETE", headers: baseHeaders(), }) diff --git a/server/endpoints/admin.js b/server/endpoints/admin.js index e4e556e57bc..72a5b0796ae 100644 --- a/server/endpoints/admin.js +++ b/server/endpoints/admin.js @@ -537,6 +537,7 @@ function adminEndpoints(app) { async (request, response) => { try { const { id } = request.params; + if (!id || isNaN(Number(id))) return response.sendStatus(400).end(); await ApiKey.delete({ id: Number(id) }); await EventLogs.logEvent( diff --git a/server/endpoints/system.js b/server/endpoints/system.js index 3b578f94a21..a11edec62f2 100644 --- a/server/endpoints/system.js +++ b/server/endpoints/system.js @@ -925,24 +925,31 @@ function systemEndpoints(app) { } ); - app.delete("/system/api-key", [validatedRequest], async (_, response) => { - try { - if (response.locals.multiUserMode) { - return response.sendStatus(401).end(); - } + // TODO: This endpoint is replicated in the admin endpoints file. + // and should be consolidated to be a single endpoint with flexible role protection. + app.delete( + "/system/api-key/:id", + [validatedRequest], + async (request, response) => { + try { + if (response.locals.multiUserMode) + return response.sendStatus(401).end(); + const { id } = request.params; + if (!id || isNaN(Number(id))) return response.sendStatus(400).end(); - await ApiKey.delete(); - await EventLogs.logEvent( - "api_key_deleted", - { deletedBy: response.locals?.user?.username }, - response?.locals?.user?.id - ); - return response.status(200).end(); - } catch (error) { - console.error(error); - response.status(500).end(); + await ApiKey.delete({ id: Number(id) }); + await EventLogs.logEvent( + "api_key_deleted", + { deletedBy: response.locals?.user?.username }, + response?.locals?.user?.id + ); + return response.status(200).end(); + } catch (error) { + console.error(error); + response.status(500).end(); + } } - }); + ); app.post( "/system/custom-models", From 1c51322e8b1d080206d125855c99d0c5df10a139 Mon Sep 17 00:00:00 2001 From: timothycarambat Date: Wed, 26 Feb 2025 12:13:42 -0800 Subject: [PATCH 2/2] linting --- frontend/src/locales/ar/common.js | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/frontend/src/locales/ar/common.js b/frontend/src/locales/ar/common.js index fdb25fe82ba..a74e67b1c6f 100644 --- a/frontend/src/locales/ar/common.js +++ b/frontend/src/locales/ar/common.js @@ -2,12 +2,12 @@ const TRANSLATIONS = { onboarding: { home: { title: "مرحبا في", - getStarted: "بسم الله", + getStarted: "بسم الله", }, llm: { title: "إعدادات نموذج التعلم العميق المفضّلة", description: -"يمكن لـِ إيني ثينك إلْلْمْ العمل مع عدة موفرين لنماذج التعلم العميق لأداء خدمة المحادثات", + "يمكن لـِ إيني ثينك إلْلْمْ العمل مع عدة موفرين لنماذج التعلم العميق لأداء خدمة المحادثات", }, userSetup: { title: "إنشاء المستعمِل", @@ -18,8 +18,7 @@ const TRANSLATIONS = { instancePassword: "كلمة مرورالمثيل", setPassword: "هل تريد إنشاء كلمة مرور ؟", passwordReq: "يجب أن تحتوي كلمة المرور على ثمانية حروف على الأقل", - passwordWarn: - "من المهم حفظ كلمة المرور هذه لأنه لا يمكن استردادها.", + passwordWarn: "من المهم حفظ كلمة المرور هذه لأنه لا يمكن استردادها.", adminUsername: "اسم مستعمل حساب المشرف", adminUsernameReq: @@ -33,12 +32,12 @@ const TRANSLATIONS = { title: "معالجة البيانات والخصوصية", description: "نحن ملتزمون بالشفافية والمراقبة عندما يتعلق الأمر ببياناتك الشخصية.", - settingsHint: - "يمكن إعادة ضبط هذه الإعدادات في أي وقت.", + settingsHint: "يمكن إعادة ضبط هذه الإعدادات في أي وقت.", }, survey: { title: "مرحباً في إيني ثينك إلْلْمْ", - description: " بما يتناسب مع احتياجاتك ساعدنا إذا أحببت في تصميم إيني ثينك إلْلْمْ", + description: + " بما يتناسب مع احتياجاتك ساعدنا إذا أحببت في تصميم إيني ثينك إلْلْمْ", email: "ما هو بريدك الالكتروني؟", useCase: "لماذا ستستخدم إيني ثينك إلْلْمْ؟", @@ -167,7 +166,8 @@ const TRANSLATIONS = { general: { vector: { title: "عدد المتجهات", - description: "العدد الإجمالي للمتجهات في قاعدة بيانات المتجهات الخاصة بك.", + description: + "العدد الإجمالي للمتجهات في قاعدة بيانات المتجهات الخاصة بك.", }, names: { description: "سيؤدي هذا فقط إلى تغيير اسم العرض لمساحة العمل الخاصة بك.", @@ -183,8 +183,7 @@ const TRANSLATIONS = { }, pfp: { title: "صورة الملف الشخصي للمساعد", - description: - "تخصيص صورة الملف الشخصي للمساعد لمساحة العمل هذه.", + description: "تخصيص صورة الملف الشخصي للمساعد لمساحة العمل هذه.", image: "صورة مساحة العمل", remove: "إزالة صورة مساحة العمل", }, @@ -324,8 +323,7 @@ const TRANSLATIONS = { }, scrape: { title: "جمع محتوى المواقع الإلكترونية", - description: - "السماح للوكيل بزيارة مواقع الويب وجمع محتواها.", + description: "السماح للوكيل بزيارة مواقع الويب وجمع محتواها.", }, generate: { title: "إنشاء المخططات البيانية", @@ -388,8 +386,7 @@ const TRANSLATIONS = { }, icons: { title: "أيقونات التذييل المخصصة", - description: - "تخصيص أيقونات التذييل المعروضة في أسفل الشريط الجانبي.", + description: "تخصيص أيقونات التذييل المعروضة في أسفل الشريط الجانبي.", icon: "أيقونة", link: "رابط", }, @@ -425,8 +422,7 @@ const TRANSLATIONS = { "يمكن أن يؤدي استخدام نموذج الهمس المحلي على الأجهزة ذات ذاكرة الوصول العشوائي أو وحدة المعالجة المركزية المحدودة إلى تعطيل إني ثينك إلْلْم عند معالجة ملفات الوسائط.", "warn-recommend": "نوصي بذاكرة وصول عشوائي بسعة 2 جيجابايت على الأقل وتحميل ملفات أقل من 10 ميجا بايت.", - "warn-end": - "سيتم تنزيل النموذج المدمج تلقائيًا عند الاستخدام الأول.", + "warn-end": "سيتم تنزيل النموذج المدمج تلقائيًا عند الاستخدام الأول.", }, embedding: {