youssefreda9 commited on
Commit
b3b321f
·
1 Parent(s): 2653fef

fix: XSS escape error messages + 30s fetch timeout for dialect

Browse files
Files changed (1) hide show
  1. src/index.html +9 -3
src/index.html CHANGED
@@ -1208,11 +1208,14 @@
1208
  if (applyBtn) applyBtn.classList.add('is-hidden');
1209
  if (convertBtn) { convertBtn.disabled = true; convertBtn.textContent = '⏳ جاري التحويل...'; }
1210
 
 
 
1211
  try {
1212
  var resp = await fetch('/api/dialect', {
1213
  method: 'POST',
1214
  headers: { 'Content-Type': 'application/json' },
1215
- body: JSON.stringify({ text: input })
 
1216
  });
1217
  var data = await resp.json();
1218
  if (data.status === 'success' && data.converted_text) {
@@ -1222,12 +1225,15 @@
1222
  if (applyBtn) applyBtn.classList.remove('is-hidden');
1223
  } else {
1224
  _dialectResult = '';
1225
- resultDiv.innerHTML = '<p class="text-secondary text-center">' + (data.error || 'حدث خطأ أثناء التحويل') + '</p>';
 
1226
  }
1227
  } catch (err) {
1228
  _dialectResult = '';
1229
- resultDiv.innerHTML = '<p class="text-secondary text-center">حدث خطأ — تأكد من الاتصال</p>';
 
1230
  } finally {
 
1231
  if (convertBtn) { convertBtn.disabled = false; convertBtn.textContent = 'تحويل إلى الفصحى'; }
1232
  }
1233
  }
 
1208
  if (applyBtn) applyBtn.classList.add('is-hidden');
1209
  if (convertBtn) { convertBtn.disabled = true; convertBtn.textContent = '⏳ جاري التحويل...'; }
1210
 
1211
+ var _abortCtrl = new AbortController();
1212
+ var _timeout = setTimeout(function(){ _abortCtrl.abort(); }, 30000);
1213
  try {
1214
  var resp = await fetch('/api/dialect', {
1215
  method: 'POST',
1216
  headers: { 'Content-Type': 'application/json' },
1217
+ body: JSON.stringify({ text: input }),
1218
+ signal: _abortCtrl.signal
1219
  });
1220
  var data = await resp.json();
1221
  if (data.status === 'success' && data.converted_text) {
 
1225
  if (applyBtn) applyBtn.classList.remove('is-hidden');
1226
  } else {
1227
  _dialectResult = '';
1228
+ var errMsg = (data.error || 'حدث خطأ أثناء التحويل').replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
1229
+ resultDiv.innerHTML = '<p class="text-secondary text-center">' + errMsg + '</p>';
1230
  }
1231
  } catch (err) {
1232
  _dialectResult = '';
1233
+ var msg = err.name === 'AbortError' ? 'انتهى وقت الانتظار — حاول مرة أخرى' : 'حدث خطأ — تأكد من الاتصال';
1234
+ resultDiv.innerHTML = '<p class="text-secondary text-center">' + msg + '</p>';
1235
  } finally {
1236
+ clearTimeout(_timeout);
1237
  if (convertBtn) { convertBtn.disabled = false; convertBtn.textContent = 'تحويل إلى الفصحى'; }
1238
  }
1239
  }