diff --git a/helm/Chart.yaml b/helm/Chart.yaml
index 812ff4f..49fac76 100644
--- a/helm/Chart.yaml
+++ b/helm/Chart.yaml
@@ -2,8 +2,8 @@ apiVersion: v2
name: krawl-chart
description: A Helm chart for Krawl honeypot server
type: application
-version: 1.1.1
-appVersion: 1.1.1
+version: 1.1.2
+appVersion: 1.1.2
keywords:
- honeypot
- security
diff --git a/src/database.py b/src/database.py
index ab026de..bda6e88 100644
--- a/src/database.py
+++ b/src/database.py
@@ -1504,6 +1504,7 @@ class DatabaseManager:
"path": log.path,
"user_agent": log.user_agent,
"timestamp": log.timestamp.isoformat(),
+ "log_id": log.id,
}
for log in logs
]
diff --git a/src/templates/jinja2/dashboard/partials/raw_request_modal.html b/src/templates/jinja2/dashboard/partials/raw_request_modal.html
index 06a46bb..e07dc0e 100644
--- a/src/templates/jinja2/dashboard/partials/raw_request_modal.html
+++ b/src/templates/jinja2/dashboard/partials/raw_request_modal.html
@@ -14,7 +14,14 @@
diff --git a/src/templates/jinja2/dashboard/partials/suspicious_table.html b/src/templates/jinja2/dashboard/partials/suspicious_table.html
index 333e8df..1b7f10b 100644
--- a/src/templates/jinja2/dashboard/partials/suspicious_table.html
+++ b/src/templates/jinja2/dashboard/partials/suspicious_table.html
@@ -8,7 +8,7 @@
Path |
User-Agent |
Time |
- |
+ |
@@ -24,7 +24,10 @@
{{ activity.path | e }} |
{{ (activity.user_agent | default(''))[:80] | e }} |
{{ activity.timestamp | format_ts(time_only=True) }} |
-
+ |
+ {% if activity.log_id %}
+
+ {% endif %}
diff --git a/src/templates/static/css/dashboard.css b/src/templates/static/css/dashboard.css
index 5074528..fa5fbae 100644
--- a/src/templates/static/css/dashboard.css
+++ b/src/templates/static/css/dashboard.css
@@ -1108,20 +1108,47 @@ tbody {
border-top: 1px solid #30363d;
border-radius: 0 0 6px 6px;
text-align: right;
+ display: flex;
+ justify-content: flex-end;
+ gap: 8px;
}
-.raw-request-download-btn {
- padding: 8px 16px;
- background: #238636;
- color: #ffffff;
- border: none;
+.raw-request-icon-btn {
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 36px;
+ height: 36px;
+ background: #21262d;
+ color: #8b949e;
+ border: 1px solid #30363d;
border-radius: 6px;
- font-weight: 500;
- font-size: 13px;
cursor: pointer;
- transition: background 0.2s;
+ transition: all 0.2s;
}
-.raw-request-download-btn:hover {
- background: #2ea043;
+.raw-request-icon-btn:hover {
+ background: #30363d;
+ color: #58a6ff;
+ border-color: #58a6ff;
+}
+.raw-request-icon-tooltip {
+ position: absolute;
+ bottom: calc(100% + 6px);
+ left: 50%;
+ transform: translateX(-50%);
+ padding: 4px 8px;
+ background: #1c2128;
+ color: #e6edf3;
+ border: 1px solid #30363d;
+ border-radius: 4px;
+ font-size: 11px;
+ white-space: nowrap;
+ opacity: 0;
+ pointer-events: none;
+ transition: opacity 0.15s;
+}
+.raw-request-icon-btn:hover .raw-request-icon-tooltip {
+ opacity: 1;
}
/* Attack Types Cell Styling */
diff --git a/src/templates/static/js/dashboard.js b/src/templates/static/js/dashboard.js
index e6e848b..329e1e4 100644
--- a/src/templates/static/js/dashboard.js
+++ b/src/templates/static/js/dashboard.js
@@ -111,6 +111,20 @@ document.addEventListener('alpine:init', () => {
this.rawModal.logId = null;
},
+ async copyRawRequest(event) {
+ if (!this.rawModal.content) return;
+ const btn = event.currentTarget;
+ const originalHTML = btn.innerHTML;
+ const checkIcon = '';
+ try {
+ await navigator.clipboard.writeText(this.rawModal.content);
+ btn.innerHTML = checkIcon;
+ } catch {
+ btn.style.color = '#f85149';
+ }
+ setTimeout(() => { btn.innerHTML = originalHTML; btn.style.color = ''; }, 1500);
+ },
+
downloadRawRequest() {
if (!this.rawModal.content) return;
const blob = new Blob([this.rawModal.content], { type: 'text/plain' });
|