diff --git a/Overlord-Server/public/assets/render.js b/Overlord-Server/public/assets/render.js
index 51e0bf4..5d858a8 100644
--- a/Overlord-Server/public/assets/render.js
+++ b/Overlord-Server/public/assets/render.js
@@ -62,6 +62,19 @@ export function createRenderer({
return;
}
+ const copyBtn = e.target.closest(".copy-id-btn");
+ if (copyBtn) {
+ e.stopPropagation();
+ const fullId = copyBtn.dataset.copy;
+ if (fullId) {
+ navigator.clipboard.writeText(fullId).then(() => {
+ const icon = copyBtn.querySelector(".copy-id-icon");
+ if (icon) { icon.className = "fa-solid fa-check copy-id-icon"; setTimeout(() => { icon.className = "fa-regular fa-copy copy-id-icon"; }, 1200); }
+ }).catch(() => {});
+ }
+ return;
+ }
+
if (e.target.closest(".command-btn")) {
e.stopPropagation();
const rect = e.target.closest(".command-btn").getBoundingClientRect();
@@ -461,8 +474,9 @@ export function createRenderer({
` : ""}
- ID ${deviceId}
+ ID ${deviceId}
${client.hwid ? `HW ${hwid}` : ""}
+ ${client.ip ? ` ${escapeHtml(client.ip)}` : ""}
diff --git a/Overlord-Server/src/db.ts b/Overlord-Server/src/db.ts
index 4ae6eb1..534d58f 100644
--- a/Overlord-Server/src/db.ts
+++ b/Overlord-Server/src/db.ts
@@ -897,7 +897,7 @@ export function listClients(filters: ListFilters): ListResult {
const rows = db
.query
(
- `SELECT id, hwid, role, host, os, arch, version, user, nickname, custom_tag as customTag, custom_tag_note as customTagNote, monitors, country, last_seen as lastSeen, online, ping_ms as pingMs, bookmarked, build_tag as buildTag, built_by_user_id as builtByUserId, enrollment_status as enrollmentStatus, public_key as publicKey, key_fingerprint as keyFingerprint, cpu, gpu, ram, is_admin as isAdmin, elevation, permissions, disconnect_reason as disconnectReason, disconnect_detail as disconnectDetail
+ `SELECT id, hwid, role, ip, host, os, arch, version, user, nickname, custom_tag as customTag, custom_tag_note as customTagNote, monitors, country, last_seen as lastSeen, online, ping_ms as pingMs, bookmarked, build_tag as buildTag, built_by_user_id as builtByUserId, enrollment_status as enrollmentStatus, public_key as publicKey, key_fingerprint as keyFingerprint, cpu, gpu, ram, is_admin as isAdmin, elevation, permissions, disconnect_reason as disconnectReason, disconnect_detail as disconnectDetail
FROM clients
${whereSql}
${orderBy}
@@ -909,6 +909,7 @@ export function listClients(filters: ListFilters): ListResult {
id: c.id,
hwid: c.hwid,
role: (c.role as ClientRole) || "client",
+ ip: c.ip || null,
lastSeen: Number(c.lastSeen) || 0,
host: c.host,
os: c.os || "unknown",