@jarvis394 by the way, can I still add an html page to https://global-protector.glitch.me/api
?
Yes, why not. Just add the code before the '*'
wildcard
Uhmmm… Seems like I have a little problem here… The website just gets stuck in an infinite loop when I try to access the /api page.
Here’s the router (it’s before the api/:action):
app.get("/api", checkAuth, async (req, res) => {
let apiallow = await db.fetch('apiallow')
if (apiallow.includes(req.user.id)) {
res.render(path.resolve(`${templateDir}${path.sep}api.ejs`), {
bot: client,
user: req.user,
auth: true
});
}
});
dashboard/templates/api.ejs:
<%
const db = require('quick.db')
let keys = await db.fetch(`apikeys_${user.id}`)
%>
<%- include('blocks/header', {bot:bot, user: user, auth: auth}) %>
<div class="jumbotron">
<div class="col-sm-8 mx-auto">
<div class="row">
<div class="col">
<i class="fa fa-user fa-fw" aria-hidden="true"></i> In this page, you can create and manage your API keys.
</div>
<div class="col">
<i class="fa fa-user fa-fw" aria-hidden="true"></i> Total API keys: <%= `${keys.total}` %>
</div>
</div>
</div>
<div class="col-sm-8 mx-auto" style="margin-top: 15px;">
<p>
<a class="btn btn-success" data-toggle="modal" data-target="#ApiAuthnewKeyModal" role="button">New key <i class="fas fa-plus" aria-hidden="true"></i></a>
</p>
</div>
</div>
<h1 class="display-4">API Auth Keys</h1>
<form method="post">
<% for (const key in keys) { %>
<div class="card">
<h3 class="card-header">**************<%= key.id.slice(key.length - 4) %></h3>
<div class="card-block" style="margin: 7px">
<h6 class="card-subtitle text-muted">Enabled: <%= key.enabled %><br /><a href="#" data-toggle="modal" data-target="#<%= `${key.id}` %>Modal">Detailed info</a></h6>
</div>
</div>
<div id="<%= `${key.id}` %>Modal" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header btn-info disabled">
<h4 class="modal-title">Auth ID #<%= key.id %></h4>
<button type="button" class="close" data-dismiss="modal">×</button>
</div>
<div class="modal-body">
<p><span style="font-weight: bold;">Key:</span> <%= key.key %></p>
<p><span style="font-weight: bold;">Secret:</span> <%= key.secret %></p>
<p><span style="font-weight: bold;">Enabled:</span> <%= key.enabled %></p>
<p><span style="font-weight: bold;">Atributed to bot id:</span> <%= key.botid %></p>
<%if (key.enabled === 'true') {%>
<%let authid = key.id%>
<p>
<a class="btn btn-success" data-toggle="modal" data-target="#ApiAuthEnableModal" role="button">Enable <i class="fas fa-plus" aria-hidden="true"></i></a>
</p>
<% } else { %>
<%let authid = key.id%>
<p>
<a class="btn btn-danger" data-toggle="modal" data-target="#ApiAuthDisableModal" role="button">Disable <i class="fas fa-plus" aria-hidden="true"></i></a>
</p>
<% } %>
<p>
<a class="fas fa-trash-alt" data-toggle="modal" data-target="#ApiAuthDeleteModal" role="button">Enable <i class="fas fa-plus" aria-hidden="true"></i></a>
</p>
</div>
<div class="modal-footer"><button type="button" class="btn btn-outline-danger" data-dismiss="modal">Close</button></div>
</div>
</div>
</div>
<% } %>
</form>
<!-- Manage Page Modals -->
<div class="modal fade" id="ApiAuthDeleteModal" tabindex="-1" role="dialog" aria-labelledby="ApiAuthDeleteModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="ApiAuthDeleteModalLabel">Delete auth?</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p>
Are you sure you want to delete the API auth <%= authid%>?
</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
<a class="btn btn-primary" href="/deletekey/<%= authid %>" role="button">Leave</a>
</div>
</div>
</div>
</div>
<!-- Manage Page Modals -->
<script>
async function enable(authid) {
let fetch = await db.fetch(`apikeys_${user.id}`)
for (var i in fetch) {
if (fetch[i].id === authid) {
await db.set(`apikeys_${user.id}[i]`, 'true', {target: '.enabled'})
}
}
}
</script>
<div class="modal fade" id="ApiAuthEnableModal" tabindex="-1" role="dialog" aria-labelledby="ApiAuthEnableModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="ApiAuthEnableModalLabel">Enable auth?</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p>
Are you sure you want to enable the API auth <%= authid%>?
</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary" onclick=`enable(authid)`>Enable</a>
</div>
</div>
</div>
</div>
<!-- Manage Page Modals -->
<script>
async function disable(authid) {
let fetch = await db.fetch(`apikeys_${user.id}`)
for (var i in fetch) {
if (fetch[i].id === authid) {
await db.set(`apikeys_${user.id}[i]`, 'false', {target: '.enabled'})
}
}
}
</script>
<div class="modal fade" id="ApiAuthDisableModal" tabindex="-1" role="dialog" aria-labelledby="ApiAuthDisableModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="ApiAuthDisableModalLabel">Disable auth?</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p>
Are you sure you want to disable the API auth <%= authid%>?
</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary" onclick=`disable(authid)`>Disable</a>
</div>
</div>
</div>
</div>
<!-- Manage Page Modals -->
<div class="modal fade" id="ApiAuthnewKeyModal" tabindex="-1" role="dialog" aria-labelledby="ApiAuthnewKeyModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="ApiAuthnewKeyModalLabel">Create new API Auth Key?</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p>
Are you sure you want to create a new API Auth key?
</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
<a class="btn btn-primary" href="/newkey" role="button">Create</a>
</div>
</div>
</div>
</div>
<% include ./blocks/footer %>
apiallow has my discord id and my friend’s discord id. Am I doing something wrong?
Your trying to access Node.js form the client.
You are driving me crazy with the horrible indents.
It has server side rendering using the ejs engine, hopefully turned on earlier than this route.
There’s no action to take if this doesn’t equate to true, if you log an error message and send some response it’d be easier to work out what’s happening.
The indents are horrible because I’m new to ejs and I need to copy paste alot of ejs code to make the pages work (unsuccesfully.)
And I figured out the problem, but now I have a problem that “keys” is not defined. How to do it?