fix: bug where in single user mode deletion of an api key deletes all (#3358)
* fix: bug where in single user mode deletion of an api key deletes all resolves #3352 * linting
This commit is contained in:
parent
7c787f8959
commit
2f5ed6c705
@ -2,12 +2,12 @@ const TRANSLATIONS = {
|
|||||||
onboarding: {
|
onboarding: {
|
||||||
home: {
|
home: {
|
||||||
title: "مرحبا في",
|
title: "مرحبا في",
|
||||||
getStarted: "بسم الله",
|
getStarted: "بسم الله",
|
||||||
},
|
},
|
||||||
llm: {
|
llm: {
|
||||||
title: "إعدادات نموذج التعلم العميق المفضّلة",
|
title: "إعدادات نموذج التعلم العميق المفضّلة",
|
||||||
description:
|
description:
|
||||||
"يمكن لـِ إيني ثينك إلْلْمْ العمل مع عدة موفرين لنماذج التعلم العميق لأداء خدمة المحادثات",
|
"يمكن لـِ إيني ثينك إلْلْمْ العمل مع عدة موفرين لنماذج التعلم العميق لأداء خدمة المحادثات",
|
||||||
},
|
},
|
||||||
userSetup: {
|
userSetup: {
|
||||||
title: "إنشاء المستعمِل",
|
title: "إنشاء المستعمِل",
|
||||||
@ -18,8 +18,7 @@ const TRANSLATIONS = {
|
|||||||
instancePassword: "كلمة مرورالمثيل",
|
instancePassword: "كلمة مرورالمثيل",
|
||||||
setPassword: "هل تريد إنشاء كلمة مرور ؟",
|
setPassword: "هل تريد إنشاء كلمة مرور ؟",
|
||||||
passwordReq: "يجب أن تحتوي كلمة المرور على ثمانية حروف على الأقل",
|
passwordReq: "يجب أن تحتوي كلمة المرور على ثمانية حروف على الأقل",
|
||||||
passwordWarn:
|
passwordWarn: "من المهم حفظ كلمة المرور هذه لأنه لا يمكن استردادها.",
|
||||||
"من المهم حفظ كلمة المرور هذه لأنه لا يمكن استردادها.",
|
|
||||||
|
|
||||||
adminUsername: "اسم مستعمل حساب المشرف",
|
adminUsername: "اسم مستعمل حساب المشرف",
|
||||||
adminUsernameReq:
|
adminUsernameReq:
|
||||||
@ -33,12 +32,12 @@ const TRANSLATIONS = {
|
|||||||
title: "معالجة البيانات والخصوصية",
|
title: "معالجة البيانات والخصوصية",
|
||||||
description:
|
description:
|
||||||
"نحن ملتزمون بالشفافية والمراقبة عندما يتعلق الأمر ببياناتك الشخصية.",
|
"نحن ملتزمون بالشفافية والمراقبة عندما يتعلق الأمر ببياناتك الشخصية.",
|
||||||
settingsHint:
|
settingsHint: "يمكن إعادة ضبط هذه الإعدادات في أي وقت.",
|
||||||
"يمكن إعادة ضبط هذه الإعدادات في أي وقت.",
|
|
||||||
},
|
},
|
||||||
survey: {
|
survey: {
|
||||||
title: "مرحباً في إيني ثينك إلْلْمْ",
|
title: "مرحباً في إيني ثينك إلْلْمْ",
|
||||||
description: " بما يتناسب مع احتياجاتك ساعدنا إذا أحببت في تصميم إيني ثينك إلْلْمْ",
|
description:
|
||||||
|
" بما يتناسب مع احتياجاتك ساعدنا إذا أحببت في تصميم إيني ثينك إلْلْمْ",
|
||||||
|
|
||||||
email: "ما هو بريدك الالكتروني؟",
|
email: "ما هو بريدك الالكتروني؟",
|
||||||
useCase: "لماذا ستستخدم إيني ثينك إلْلْمْ؟",
|
useCase: "لماذا ستستخدم إيني ثينك إلْلْمْ؟",
|
||||||
@ -167,7 +166,8 @@ const TRANSLATIONS = {
|
|||||||
general: {
|
general: {
|
||||||
vector: {
|
vector: {
|
||||||
title: "عدد المتجهات",
|
title: "عدد المتجهات",
|
||||||
description: "العدد الإجمالي للمتجهات في قاعدة بيانات المتجهات الخاصة بك.",
|
description:
|
||||||
|
"العدد الإجمالي للمتجهات في قاعدة بيانات المتجهات الخاصة بك.",
|
||||||
},
|
},
|
||||||
names: {
|
names: {
|
||||||
description: "سيؤدي هذا فقط إلى تغيير اسم العرض لمساحة العمل الخاصة بك.",
|
description: "سيؤدي هذا فقط إلى تغيير اسم العرض لمساحة العمل الخاصة بك.",
|
||||||
@ -183,8 +183,7 @@ const TRANSLATIONS = {
|
|||||||
},
|
},
|
||||||
pfp: {
|
pfp: {
|
||||||
title: "صورة الملف الشخصي للمساعد",
|
title: "صورة الملف الشخصي للمساعد",
|
||||||
description:
|
description: "تخصيص صورة الملف الشخصي للمساعد لمساحة العمل هذه.",
|
||||||
"تخصيص صورة الملف الشخصي للمساعد لمساحة العمل هذه.",
|
|
||||||
image: "صورة مساحة العمل",
|
image: "صورة مساحة العمل",
|
||||||
remove: "إزالة صورة مساحة العمل",
|
remove: "إزالة صورة مساحة العمل",
|
||||||
},
|
},
|
||||||
@ -324,8 +323,7 @@ const TRANSLATIONS = {
|
|||||||
},
|
},
|
||||||
scrape: {
|
scrape: {
|
||||||
title: "جمع محتوى المواقع الإلكترونية",
|
title: "جمع محتوى المواقع الإلكترونية",
|
||||||
description:
|
description: "السماح للوكيل بزيارة مواقع الويب وجمع محتواها.",
|
||||||
"السماح للوكيل بزيارة مواقع الويب وجمع محتواها.",
|
|
||||||
},
|
},
|
||||||
generate: {
|
generate: {
|
||||||
title: "إنشاء المخططات البيانية",
|
title: "إنشاء المخططات البيانية",
|
||||||
@ -388,8 +386,7 @@ const TRANSLATIONS = {
|
|||||||
},
|
},
|
||||||
icons: {
|
icons: {
|
||||||
title: "أيقونات التذييل المخصصة",
|
title: "أيقونات التذييل المخصصة",
|
||||||
description:
|
description: "تخصيص أيقونات التذييل المعروضة في أسفل الشريط الجانبي.",
|
||||||
"تخصيص أيقونات التذييل المعروضة في أسفل الشريط الجانبي.",
|
|
||||||
icon: "أيقونة",
|
icon: "أيقونة",
|
||||||
link: "رابط",
|
link: "رابط",
|
||||||
},
|
},
|
||||||
@ -425,8 +422,7 @@ const TRANSLATIONS = {
|
|||||||
"يمكن أن يؤدي استخدام نموذج الهمس المحلي على الأجهزة ذات ذاكرة الوصول العشوائي أو وحدة المعالجة المركزية المحدودة إلى تعطيل إني ثينك إلْلْم عند معالجة ملفات الوسائط.",
|
"يمكن أن يؤدي استخدام نموذج الهمس المحلي على الأجهزة ذات ذاكرة الوصول العشوائي أو وحدة المعالجة المركزية المحدودة إلى تعطيل إني ثينك إلْلْم عند معالجة ملفات الوسائط.",
|
||||||
"warn-recommend":
|
"warn-recommend":
|
||||||
"نوصي بذاكرة وصول عشوائي بسعة 2 جيجابايت على الأقل وتحميل ملفات أقل من 10 ميجا بايت.",
|
"نوصي بذاكرة وصول عشوائي بسعة 2 جيجابايت على الأقل وتحميل ملفات أقل من 10 ميجا بايت.",
|
||||||
"warn-end":
|
"warn-end": "سيتم تنزيل النموذج المدمج تلقائيًا عند الاستخدام الأول.",
|
||||||
"سيتم تنزيل النموذج المدمج تلقائيًا عند الاستخدام الأول.",
|
|
||||||
},
|
},
|
||||||
|
|
||||||
embedding: {
|
embedding: {
|
||||||
|
|||||||
@ -493,8 +493,8 @@ const System = {
|
|||||||
return { apiKey: null, error: e.message };
|
return { apiKey: null, error: e.message };
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
deleteApiKey: async function () {
|
deleteApiKey: async function (apiKeyId = "") {
|
||||||
return fetch(`${API_BASE}/system/api-key`, {
|
return fetch(`${API_BASE}/system/api-key/${apiKeyId}`, {
|
||||||
method: "DELETE",
|
method: "DELETE",
|
||||||
headers: baseHeaders(),
|
headers: baseHeaders(),
|
||||||
})
|
})
|
||||||
|
|||||||
@ -537,6 +537,7 @@ function adminEndpoints(app) {
|
|||||||
async (request, response) => {
|
async (request, response) => {
|
||||||
try {
|
try {
|
||||||
const { id } = request.params;
|
const { id } = request.params;
|
||||||
|
if (!id || isNaN(Number(id))) return response.sendStatus(400).end();
|
||||||
await ApiKey.delete({ id: Number(id) });
|
await ApiKey.delete({ id: Number(id) });
|
||||||
|
|
||||||
await EventLogs.logEvent(
|
await EventLogs.logEvent(
|
||||||
|
|||||||
@ -925,24 +925,31 @@ function systemEndpoints(app) {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
app.delete("/system/api-key", [validatedRequest], async (_, response) => {
|
// TODO: This endpoint is replicated in the admin endpoints file.
|
||||||
try {
|
// and should be consolidated to be a single endpoint with flexible role protection.
|
||||||
if (response.locals.multiUserMode) {
|
app.delete(
|
||||||
return response.sendStatus(401).end();
|
"/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 ApiKey.delete({ id: Number(id) });
|
||||||
await EventLogs.logEvent(
|
await EventLogs.logEvent(
|
||||||
"api_key_deleted",
|
"api_key_deleted",
|
||||||
{ deletedBy: response.locals?.user?.username },
|
{ deletedBy: response.locals?.user?.username },
|
||||||
response?.locals?.user?.id
|
response?.locals?.user?.id
|
||||||
);
|
);
|
||||||
return response.status(200).end();
|
return response.status(200).end();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
response.status(500).end();
|
response.status(500).end();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
);
|
||||||
|
|
||||||
app.post(
|
app.post(
|
||||||
"/system/custom-models",
|
"/system/custom-models",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user