webring/internal/user/templates/users_management.html
2025-12-08 18:51:34 +03:00

178 lines
6.9 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Users Management - Webring</title>
<link rel="stylesheet" href="/static/dashboard.css">
<link rel="preconnect" href="https://rsms.me/">
<link rel="stylesheet" href="https://rsms.me/inter/inter.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/remixicon@4.3.0/fonts/remixicon.css">
</head>
<body>
<header class="admin-header">
<div class="header-content">
<div class="header-left">
<a href="/admin" class="logo-link">
<div class="logo">
<i class="ri-bubble-chart-fill"></i>
<span class="logo-text">Webring</span>
</div>
</a>
<div class="page-info">
<h1>User Management</h1>
</div>
</div>
<div class="header-right">
<nav class="header-nav">
<a href="/admin" class="nav-item">
<i class="ri-settings-line"></i>
<span>Sites</span>
</a>
<a href="/admin/requests" class="nav-item">
<i class="ri-shield-user-line"></i>
<span>Requests</span>
</a>
<a href="/admin/users" class="nav-item active">
<i class="ri-user-settings-line"></i>
<span>Users</span>
</a>
<div class="nav-divider"></div>
<a href="/" class="nav-item secondary">
<i class="ri-global-line"></i>
<span>Public</span>
</a>
<a href="/api/docs/" class="nav-item secondary">
<i class="ri-book-line"></i>
<span>API</span>
</a>
{{if ne .CurrentUser.ID -1}}
<form action="/logout" method="POST" style="display: inline;">
{{csrfField .Request}}
<button type="submit" class="nav-item logout-btn">
<i class="ri-logout-circle-line"></i>
<span>Logout</span>
</button>
</form>
{{end}}
</nav>
</div>
</div>
</header>
<main>
{{if eq .CurrentUser.ID -1}}
<div class="notice-card">
<div class="notice-icon">
<i class="ri-information-line"></i>
</div>
<div class="notice-content">
<div class="notice-title">Basic Authentication Access</div>
<div class="notice-text">
You are accessing user management via basic authentication.
</div>
</div>
</div>
{{end}}
<div class="users-grid">
{{range .Users}}
<div class="user-card {{if .IsAdmin}}admin{{end}}">
<div class="user-header">
<div class="user-avatar-lg">
{{if .IsAdmin}}
<i class="ri-shield-user-fill"></i>
{{else}}
<i class="ri-user-line"></i>
{{end}}
</div>
<div class="user-info-lg">
<div class="user-name-lg">
{{if .FirstName}}{{.FirstName}}{{end}}
{{if .LastName}} {{.LastName}}{{end}}
{{if not .FirstName}}{{if not .LastName}}
<span class="user-name-fallback">Unnamed User</span>
{{end}}{{end}}
</div>
<div class="user-meta">
{{if .TelegramUsername}}
<span class="user-handle">@{{.TelegramUsername}}</span>
{{end}}
<span class="user-id">ID: {{.ID}}</span>
</div>
</div>
<div class="user-role-badge">
{{if .IsAdmin}}
<span class="role-badge admin">
<i class="ri-shield-check-fill"></i>
Admin
</span>
{{else}}
<span class="role-badge user">
<i class="ri-user-line"></i>
User
</span>
{{end}}
</div>
</div>
<div class="user-details">
<div class="detail-item">
<span class="detail-label">Telegram ID:</span>
<span class="detail-value">
{{if ne .TelegramID 0}}{{.TelegramID}}{{else}}<em>Not set</em>{{end}}
</span>
</div>
<div class="detail-item">
<span class="detail-label">Username:</span>
<span class="detail-value">
{{if .TelegramUsername}}@{{.TelegramUsername}}{{else}}<em>Not set</em>{{end}}
</span>
</div>
<div class="detail-item">
<span class="detail-label">Joined:</span>
<span class="detail-value">{{.CreatedAt.Format "Jan 2, 2006"}}</span>
</div>
</div>
<div class="user-actions">
{{if ne .ID $.CurrentUser.ID}}
<button type="submit" form="form-{{.ID}}" class="btn {{if .IsAdmin}}btn-warning{{else}}btn-success{{end}} btn-block" onclick="return confirm('Are you sure you want to change this user\'s admin status? This will log them out.')">
{{if .IsAdmin}}
<i class="ri-shield-cross-line"></i>
Remove Admin
{{else}}
<i class="ri-shield-user-line"></i>
Make Admin
{{end}}
</button>
<form action="/admin/users/{{.ID}}/toggle-admin" method="POST" id="form-{{.ID}}">
{{csrfField $.Request}}
</form>
{{else}}
<div class="self-indicator">
<i class="ri-user-star-line"></i>
<span>This is you</span>
</div>
{{end}}
</div>
</div>
{{else}}
<div class="empty-state">
<div class="empty-icon">
<i class="ri-user-add-line"></i>
</div>
<div class="empty-title">No Users Found</div>
<div class="empty-description">Users are created when they first log in via Telegram.</div>
<div class="empty-actions">
<a href="/login" class="btn btn-primary">
<i class="ri-telegram-line"></i>
Login with Telegram
</a>
</div>
</div>
{{end}}
</div>
</main>
</body>
</html>