mirror of
https://github.com/kjanat/livegraphs-django.git
synced 2026-01-16 22:02:08 +01:00
Compare commits
2 Commits
b3d04a402c
...
alert-auto
| Author | SHA1 | Date | |
|---|---|---|---|
| e48b0c90f3 | |||
| 9d8322064b |
@ -2,6 +2,7 @@ from django.contrib import messages
|
|||||||
from django.contrib.admin.views.decorators import staff_member_required
|
from django.contrib.admin.views.decorators import staff_member_required
|
||||||
from django.contrib.auth.decorators import login_required, user_passes_test
|
from django.contrib.auth.decorators import login_required, user_passes_test
|
||||||
from django.shortcuts import get_object_or_404, redirect
|
from django.shortcuts import get_object_or_404, redirect
|
||||||
|
from django.utils.http import url_has_allowed_host_and_scheme
|
||||||
|
|
||||||
from .models import ExternalDataSource
|
from .models import ExternalDataSource
|
||||||
from .tasks import periodic_fetch_chat_data, refresh_specific_source
|
from .tasks import periodic_fetch_chat_data, refresh_specific_source
|
||||||
@ -36,7 +37,10 @@ def manual_data_refresh(request):
|
|||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
messages.error(request, f"Failed to refresh data: {e}")
|
messages.error(request, f"Failed to refresh data: {e}")
|
||||||
return redirect(request.headers.get("referer", "dashboard")) # Redirect to previous page or dashboard
|
referer = request.headers.get("referer", "")
|
||||||
|
if url_has_allowed_host_and_scheme(referer, allowed_hosts=None):
|
||||||
|
return redirect(referer)
|
||||||
|
return redirect("dashboard") # Redirect to a safe default
|
||||||
|
|
||||||
|
|
||||||
@staff_member_required
|
@staff_member_required
|
||||||
@ -51,4 +55,7 @@ def refresh_specific_datasource(request, source_id):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
messages.error(request, f"Failed to refresh data source {source.name}: {e}")
|
messages.error(request, f"Failed to refresh data source {source.name}: {e}")
|
||||||
|
|
||||||
return redirect(request.headers.get("referer", "/admin/data_integration/externaldatasource/"))
|
referer = request.headers.get("referer", "")
|
||||||
|
if url_has_allowed_host_and_scheme(referer, allowed_hosts=None):
|
||||||
|
return redirect(referer)
|
||||||
|
return redirect("/admin/data_integration/externaldatasource/") # Redirect to a safe default
|
||||||
|
|||||||
@ -299,6 +299,15 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
function createToast(messageText, messageTags) {
|
function createToast(messageText, messageTags) {
|
||||||
|
function escapeHtml(unsafe) {
|
||||||
|
return unsafe
|
||||||
|
.replace(/&/g, "&")
|
||||||
|
.replace(/</g, "<")
|
||||||
|
.replace(/>/g, ">")
|
||||||
|
.replace(/"/g, """)
|
||||||
|
.replace(/'/g, "'");
|
||||||
|
}
|
||||||
|
|
||||||
let toastClass = "";
|
let toastClass = "";
|
||||||
let autohide = true;
|
let autohide = true;
|
||||||
let delay = 5000;
|
let delay = 5000;
|
||||||
@ -329,7 +338,7 @@
|
|||||||
<button type="button" class="btn-close ${toastClass.includes("text-white") ? "btn-close-white" : ""}" data-bs-dismiss="toast" aria-label="Close"></button>
|
<button type="button" class="btn-close ${toastClass.includes("text-white") ? "btn-close-white" : ""}" data-bs-dismiss="toast" aria-label="Close"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="toast-body">
|
<div class="toast-body">
|
||||||
${messageText}
|
${escapeHtml(messageText)}
|
||||||
</div>
|
</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user