import basicAuth from "express-basic-auth";
import express from "express";
import querystring from "querystring";
import { Low, JSONFile } from "lowdb";
app.use(express.static("public"));
// Docs: https://github.com/typicode/lowdb
const adapter = new JSONFile("db.json");
const db = new Low(adapter);
db.data ||= { loggedInUsers: [] };
users: { admin: "password123" },
async (request, response) => {
const { loggedInUsers } = db.data;
const { user } = request.query;
// Add the user to the database
if (!loggedInUsers.includes(user)) {
loggedInUsers.push(user);
// Construct query parameters for redirect back to Canva
const params = querystring.stringify({
state: request.query.state,
// Redirect back to Canva
response.redirect(302, `https://canva.com/apps/configured?${params}`);
// Handle requests for content
app.post("/content/resources/find", async (request, response) => {
const { loggedInUsers } = db.data;
const { user } = request.body;
if (loggedInUsers.includes(user)) {
name: "Leaning Tower of Pisa",
url: "https://picsum.photos/id/629/600",
url: "https://picsum.photos/id/629/2000",
contentType: "image/jpeg",
// The user is not logged-in
errorCode: "CONFIGURATION_REQUIRED",
// Handle disconnection requests
app.post("/configuration/delete", async (request, response) => {
// Remove the current user from the database
db.data.loggedInUsers = db.data.loggedInUsers.filter((user) => {
return user !== request.body.user;
app.listen(process.env.PORT || 3000);