Skip to content

Commit

Permalink
Update admin routes and views
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewstech committed Apr 7, 2024
1 parent b7a2975 commit fbb57d3
Show file tree
Hide file tree
Showing 6 changed files with 195 additions and 4 deletions.
3 changes: 1 addition & 2 deletions routes/admin.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,12 @@ module.exports = async (req, res) => {
'authorization': token
}
});
console.log(response)
data = await response.json();
res.render("admin", {user: user, users: data, message: ''})

} catch (error) {
console.log(error)
res.render("admin", {user: user, users: data, message: 'Error fetching bitches. Please try again later.'})
res.render("admin", {user: user, users: data, message: 'fetching bitches. Please try again later.'})
}
}

22 changes: 22 additions & 0 deletions routes/adminUser.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
module.exports = async (req, res) => {
let user = req.user;
if (!user.admin){
return res.redirect("/domains?code=5");
}
let data = ''
try {
const response = await fetch(`${ENDPOINT}/users`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'authorization': token
}
});
data = await response.json();
res.render("adminUser", {user: user, users: data, message: ''})
}
catch (error) {
console.log(error)
res.render("adminUser", {user: user, users: data, message: 'fetching bitches. Please try again later.'})
}
}
9 changes: 9 additions & 0 deletions util/router.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,13 @@ router.get("/admin/", authenticateStaffToken, (req, res) => {
routes.admin(req, res);
});

router.get("/admin/users", authenticateStaffToken, (req, res) => {
routes.adminUser(req, res);
});

router.get("/admin/del", authenticateStaffToken, (req, res) => {
routes.adminUser(req, res);
});


module.exports = router;
4 changes: 3 additions & 1 deletion util/routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ const mfa = require("../routes/mfa");
const password = require("../routes/password");
const edit = require("../routes/edit");
const admin = require("../routes/admin");
const adminUser = require("../routes/adminUser");


module.exports = {
Expand All @@ -24,5 +25,6 @@ module.exports = {
mfa,
password,
edit,
admin
admin,
adminUser
}
3 changes: 2 additions & 1 deletion views/admin.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,8 @@
<td class="py-2 px-4 border border-gray-300"><%= user._id %></td>
<td class="py-2 px-4 border border-gray-300"><%= user.username %></td>
<td class="py-2 px-4 border border-gray-300">
<a href="/users?user=<%= user._id %>" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-1 px-2 rounded focus:outline-none focus:shadow-outline">Edit</a>
<a href="/admin/users?id=<%= user._id %>" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-1 px-2 rounded focus:outline-none focus:shadow-outline">Edit</a>
<a href="/admin/del?id=<%= user._id %>" class="bg-red-500 hover:bg-red-700 text-white font-bold py-1 px-2 rounded focus:outline-none focus:shadow-outline">Delete</a>
</td>
</tr>
<% }) %>
Expand Down
158 changes: 158 additions & 0 deletions views/adminUser.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
<head>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/tailwind.min.css" rel="stylesheet">
<link rel="icon"
type="image/png"
href="/assets/logo.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">


</head>
<div class="min-h-full">
<nav class="bg-gray-800">
<div class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<div class="flex h-16 items-center justify-between">
<div class="flex items-center">
<div class="flex-shrink-0">
<img class="h-8 w-8" src="https://raw.githubusercontent.com/open-domains/open-domains.github.io/main/assets/logo.png" alt="Open Domains">
</div>
<div class="hidden md:block">
<div class="ml-10 flex items-baseline space-x-4">
<!-- Current: "bg-gray-900 text-white", Default: "text-gray-300 hover:bg-gray-700 hover:text-white" -->
<a href="/domains/" class="bg-gray-900 text-white rounded-md px-3 py-2 text-sm font-medium" aria-current="page">My Domains</a>
<% if (user.staffMember) { %>
<a href="/staff/" class="text-gray-300 hover:bg-gray-700 hover:text-white rounded-md px-3 py-2 text-sm font-medium">Staff</a>
<% } %>
<a href="https://www.buymeacoffee.com/andrewstech" class="text-gray-300 hover:bg-gray-700 hover:text-white rounded-md px-3 py-2 text-sm font-medium">Donate</a>

</div>
</div>
</div>
<div class="hidden md:block">
<div class="ml-4 flex items-center md:ml-6">
<button type="button" class="relative rounded-full bg-gray-800 p-1 text-gray-400 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-gray-800">
<span class="absolute -inset-1.5"></span>
<span class="sr-only">View notifications</span>
<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" d="M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" />
</svg>
</button>

<!-- Profile dropdown -->
<div class="relative ml-3">
<div>
<button type="button" class="relative flex max-w-xs items-center rounded-full bg-gray-800 text-sm focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-gray-800" id="user-menu-button" aria-expanded="false" aria-haspopup="true">
<span class="absolute -inset-1.5"></span>
<span class="sr-only">Open user menu</span>
<img class="h-8 w-8 rounded-full" src="https:<%= user.gravatar %>" alt="">
</button>
</div>

<!--
Dropdown menu, show/hide based on menu state.
Entering: "transition ease-out duration-100"
From: "transform opacity-0 scale-95"
To: "transform opacity-100 scale-100"
Leaving: "transition ease-in duration-75"
From: "transform opacity-100 scale-100"
To: "transform opacity-0 scale-95"
-->
<div class="absolute right-0 z-10 mt-2 w-48 origin-top-right rounded-md bg-white py-1 shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none hidden" role="menu" id="menu" aria-orientation="vertical" aria-labelledby="user-menu-button" tabindex="-1">
<!-- Active: "bg-gray-100", Not Active: "" -->
<a href="/settings/" class="block px-4 py-2 text-sm text-gray-700" role="menuitem" tabindex="-1" id="user-menu-item-1">Settings</a>
<a href="/logout/" class="block px-4 py-2 text-sm text-gray-700" role="menuitem" tabindex="-1" id="user-menu-item-2">Sign out</a>
</div>
</div>
</div>
</div>
<div class="-mr-2 flex md:hidden">
<!-- Mobile menu button -->
<button type="button" class="relative inline-flex items-center justify-center rounded-md bg-gray-800 p-2 text-gray-400 hover:bg-gray-700 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-gray-800" aria-controls="mobile-menu" aria-expanded="false">
<span class="absolute -inset-0.5"></span>
<span class="sr-only">Open main menu</span>
<!-- Menu open: "hidden", Menu closed: "block" -->
<svg class="block h-6 w-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5" />
</svg>
<!-- Menu open: "block", Menu closed: "hidden" -->
<svg class="hidden h-6 w-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
</div>
</div>
</div>

<!-- Mobile menu, show/hide based on menu state. -->
<div class="md:hidden hidden" id="mobile-menu">
<div class="space-y-1 px-2 pb-3 pt-2 sm:px-3">
<!-- Current: "bg-gray-900 text-white", Default: "text-gray-300 hover:bg-gray-700 hover:text-white" -->
<a href="/domains/" class="bg-gray-900 text-white block rounded-md px-3 py-2 text-base font-medium" aria-current="page">My domains</a>
<% if (user.staffMember) { %>
<a href="/staff/" class="text-gray-300 hover:bg-gray-700 hover:text-white block rounded-md px-3 py-2 text-base font-medium">Staff</a>
<% } %>
<a href="https://www.buymeacoffee.com/andrewstech" class="text-gray-300 hover:bg-gray-700 hover:text-white block rounded-md px-3 py-2 text-base font-medium">Donate</a>
</div>
<div class="border-t border-gray-700 pb-3 pt-4">
<div class="flex items-center px-5">
<div class="flex-shrink-0">
<img class="h-10 w-10 rounded-full" src="https:<%= user.gravatar %>" alt="">
</div>
<div class="ml-3">
<div class="text-base font-medium leading-none text-white"><%= user.username %></div>
<div class="text-sm font-medium leading-none text-gray-400"><%= user.email %></div>
</div>
<button type="button" class="relative ml-auto flex-shrink-0 rounded-full bg-gray-800 p-1 text-gray-400 hover:text-white focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-gray-800">
<span class="absolute -inset-1.5"></span>
<span class="sr-only">View notifications</span>
<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" d="M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" />
</svg>
</button>
</div>
<div class="mt-3 space-y-1 px-2">
<a href="/settings/" class="block rounded-md px-3 py-2 text-base font-medium text-gray-400 hover:bg-gray-700 hover:text-white">Settings</a>
<a href="/logout/" class="block rounded-md px-3 py-2 text-base font-medium text-gray-400 hover:bg-gray-700 hover:text-white">Sign out</a>
</div>
</div>
</div>
</nav>

<% if (message && message.length > 0) { %>
<div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative" role="alert">
<strong class="font-bold">Error!</strong>
<span class="block sm:inline"><%= message %></span>
</div>
<% } %>
<header class="bg-white shadow">
<div class="mx-auto max-w-7xl px-4 py-6 sm:px-6 lg:px-8">
<h1 class="text-3xl font-bold tracking-tight text-gray-900">Checking out: <%= domain %></h1>
</div>
</header>
<main>
<div class="mx-auto max-w-7xl py-6 sm:px-6 lg:px-8">
<!-- Your content -->


</div>
</main>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const menuButton = document.querySelector('[aria-controls="mobile-menu"]');
const mobileMenu = document.getElementById('mobile-menu');
const desktopMenuToggle = document.getElementById('user-menu-button');
const desktopMenu = document.getElementById('menu');
menuButton.addEventListener('click', function() {
const isOpen = mobileMenu.classList.contains('hidden');
mobileMenu.classList.toggle('hidden', !isOpen);
menuButton.setAttribute('aria-expanded', !isOpen);
});
desktopMenuToggle.addEventListener('click', function() {
const isOpen = desktopMenu.classList.contains('hidden');
desktopMenu.classList.toggle('hidden', !isOpen);
});
});
</script>

0 comments on commit fbb57d3

Please sign in to comment.