Skip to content

Commit b9f5f14

Browse files
authored
Merge pull request #25 from ZeroHost-Code/beta
v1.0.7
2 parents ca1c845 + 9efe8cf commit b9f5f14

9 files changed

Lines changed: 685 additions & 55 deletions

File tree

config/migrate.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ const tables = {
2121
{ name: 'email_verified', def: 'TINYINT(1) NOT NULL DEFAULT 0' },
2222
{ name: 'verification_token', def: 'VARCHAR(64) DEFAULT NULL' },
2323
{ name: 'verification_token_expires', def: 'DATETIME DEFAULT NULL' },
24+
{ name: 'pending_email', def: 'VARCHAR(255) DEFAULT NULL' },
25+
{ name: 'email_change_token', def: 'VARCHAR(64) DEFAULT NULL' },
26+
{ name: 'email_change_code', def: 'VARCHAR(10) DEFAULT NULL' },
27+
{ name: 'email_change_expires', def: 'DATETIME DEFAULT NULL' },
28+
{ name: 'user_agent', def: 'VARCHAR(512) DEFAULT NULL' },
2429
{ name: 'created_at', def: 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP' },
2530
],
2631
},
@@ -41,6 +46,7 @@ const tables = {
4146
{ name: 'id', def: 'INT AUTO_INCREMENT PRIMARY KEY' },
4247
{ name: 'user_id', def: 'INT NOT NULL' },
4348
{ name: 'ip_address', def: 'VARCHAR(45) NOT NULL' },
49+
{ name: 'user_agent', def: 'VARCHAR(512) DEFAULT NULL' },
4450
{ name: 'created_at', def: 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP' },
4551
],
4652
},

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "zerohost-dashboard",
3-
"version": "1.0.6",
3+
"version": "1.0.7",
44
"private": true,
55
"type": "module",
66
"scripts": {

public/css/style.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3589,6 +3589,10 @@ tbody tr:hover {
35893589
.activity-icon-admin_suspend { background: rgba(245,158,11,0.15); color: var(--accent-orange); }
35903590
.activity-icon-admin_unsuspend { background: rgba(16,185,129,0.15); color: var(--accent-green); }
35913591
.activity-icon-admin_renew_now { background: rgba(6,182,212,0.15); color: var(--accent-cyan); }
3592+
.activity-icon-passkey_login { background: rgba(5,150,105,0.15); color: #059669; }
3593+
.activity-icon-passkey_registered { background: rgba(6,182,212,0.15); color: #06b6d4; }
3594+
.activity-icon-email_verified { background: rgba(5,150,105,0.15); color: #059669; }
3595+
.activity-icon-passkey_deleted { background: rgba(239,68,68,0.15); color: #ef4444; }
35923596

35933597
.activity-content {
35943598
flex: 1;

public/js/admin.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1265,13 +1265,21 @@ async function renderAdminUserDetail(userId) {
12651265
<div class="detail-item"><span class="detail-label">Ptero ID</span><span class="detail-value" style="font-family:monospace">${u.ptero_user_id || 'N/A'}</span></div>
12661266
<div class="detail-item"><span class="detail-label">API Key Set</span><span class="detail-value">${u.ptero_client_api_key ? 'Yes' : 'No'}</span></div>
12671267
<div class="detail-item"><span class="detail-label">Created</span><span class="detail-value">${formatDateWithTooltip(u.created_at)}</span></div>
1268+
<div class="detail-item"><span class="detail-label">Password Hash</span><span class="detail-value" style="font-family:monospace;word-break:break-all;font-size:0.8rem">${u.password_hash ? escapeHtml(u.password_hash) : 'N/A'}</span></div>
1269+
<div class="detail-item"><span class="detail-label">User-Agent</span><span class="detail-value" style="word-break:break-all;font-size:0.8rem">${u.user_agent ? escapeHtml(u.user_agent) : 'N/A'}</span></div>
12681270
</div>
12691271
</div>
12701272
<div class="card">
12711273
<h2 class="card-title" style="margin-bottom:16px">IP Addresses</h2>
12721274
${data.ips && data.ips.length > 0 ? ahtml`
1273-
<div style="display:flex;flex-wrap:wrap;gap:8px">
1274-
${data.ips.map(ip => ahtml`<span class="server-detail-tag" style="font-family:monospace">${ip.ip_address}</span>`).join('')}
1275+
<div style="display:flex;flex-direction:column;gap:10px">
1276+
${data.ips.map(ip => ahtml`
1277+
<div style="border:1px solid var(--border);border-radius:8px;padding:10px 12px;background:var(--bg-secondary)">
1278+
<div style="font-family:monospace;font-size:0.9rem">${escapeHtml(ip.ip_address)}</div>
1279+
<div style="color:var(--text-secondary);font-size:0.75rem;margin-top:4px">${formatDateWithTooltip(ip.created_at)}</div>
1280+
<div style="color:var(--text-secondary);font-size:0.78rem;margin-top:4px;word-break:break-all">${ip.user_agent ? escapeHtml(ip.user_agent) : 'N/A'}</div>
1281+
</div>
1282+
`).join('')}
12751283
</div>
12761284
` : '<p style="color:var(--text-secondary)">No IPs recorded.</p>'}
12771285
</div>

0 commit comments

Comments
 (0)