Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion site/resources-static/robots.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ User-agent: AdsBot-Google-Mobile-Apps
Allow: /
User-agent: FriendlyCrawler
Disallow: /
Sitemap: https://web.pulsar-edit.dev/sitemap.xml
Sitemap: https://packages.pulsar-edit.dev/sitemap.xml
2 changes: 1 addition & 1 deletion site/resources-static/sitemap.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://web.pulsar-edit.dev/</loc>
<loc>https://packages.pulsar-edit.dev/</loc>
<lastmod>2022-11-04</lastmod>
<priority>1.0</priority>
</url>
Expand Down
2 changes: 2 additions & 0 deletions site/templates/header.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
<title><%=page.name%></title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="utf-8">
<% if (page.include_og) { %>
<meta property="og:title" content="<%=page.name%>">
<meta property="og:url" content="<%=page.og_url%>">
<meta property="og:site_name" content="Pulsar Package Registry">
Expand All @@ -20,6 +21,7 @@
<meta name="twitter:title" content="<%=page.name%>">
<meta name="twitter:description" content="<%=page.og_description%>">
<meta name="description" content="<%=page.og_description%>">
<% } %>
<meta name="application-name" content="Pulsar Package Explorer">
<link rel="alternate" href="https://packages.pulsar-edit.dev/" hreflang="x-default">
<link rel="alternate" href="https://packages.pulsar-edit.dev/" hreflang="en">
Expand Down
71 changes: 17 additions & 54 deletions src/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,14 @@ const server_version = require("../package.json").version;
const { apiurl } = require("./config.js").getConfig();
const cache = require("./cache.js");

const DEV = process.env.PULSAR_STATUS === "dev" ? true : false;

app.set("views", "./site/templates");
app.set("view engine", "ejs");

app.use((req, res, next) => {
// Setup redirect of all `web` requests to `packages`
if (req.subdomains[0] === "web") {
res.status(301).redirect(`https://packages.pulsar-edit.dev${req.originalUrl}`);
return;
}
req.start = Date.now();
res.append("Server", `Pulsar Package Frontend/${server_version} (${process.platform})`);
Expand All @@ -36,7 +35,6 @@ app.get("/", async (req, res) => {
// We know our cache is good and lets serve the data
res.append("Server-Timing", timecop.toHeader());
res.render("home", {
dev: DEV,
featured: cached,
page: utils.getOpenGraphData()
});
Expand All @@ -51,7 +49,7 @@ app.get("/", async (req, res) => {
let obj = await utils.prepareForListing(api.body);
timecop.end("transcribe");
res.append("Server-Timing", timecop.toHeader());
res.render("home", { dev: DEV, featured: obj, page: utils.getOpenGraphData() });
res.render("home", { featured: obj, page: utils.getOpenGraphData() });
// then set featured cache
cache.setFeatured(obj);
} catch(err) {
Expand All @@ -65,8 +63,7 @@ app.get("/packages", async (req, res) => {
let timecop = new utils.Timecop();
timecop.start("api");
try {
let api = await superagent.get(`${apiurl}/api/packages`)
.query(req.query);
let api = await superagent.get(`${apiurl}/api/packages`).query(req.query);
const pagination = utils.getPagination(req, api);
timecop.end("api");
timecop.start("transcribe");
Expand All @@ -76,19 +73,14 @@ app.get("/packages", async (req, res) => {
res.render(
"package_list",
{
dev: DEV,
packages: obj,
pagination,
query: req.query,
page: utils.getOpenGraphData({ og_url: "https://packages.pulsar-edit.dev/packages" })
}
);
} catch(err) {
utils.displayError(req, res, {
error: utils.modifyErrorText(err),
dev: DEV,
page: utils.getOpenGraphData({ og_url: "https://packages.pulsar-edit.dev/packages" })
});
utils.displayError(req, res, err);
}
});

Expand All @@ -104,7 +96,6 @@ app.get("/packages/featured", async (req, res) => {
timecop.end("transcribe");
res.append("Server-Timing", timecop.toHeader());
res.render("package_list", {
dev: DEV,
packages: obj,
page: utils.getOpenGraphData({ name: "Featured Packages", og_url: "https://web.pulsar-edit.dev/packages/featured" })
});
Expand All @@ -130,7 +121,6 @@ app.get("/packages/search", async (req, res) => {
res.render(
"package_list",
{
dev: DEV,
packages: obj,
query: req.query,
search: req.query.q,
Expand All @@ -142,7 +132,6 @@ app.get("/packages/search", async (req, res) => {
}
);
} catch(err) {
console.log(err);
utils.displayError(req, res, err);
}
});
Expand All @@ -164,7 +153,6 @@ app.get("/packages/:packageName", async (req, res) => {
timecop.end("transcribe");
res.append("Server-Timing", timecop.toHeader());
res.render("package_page", {
dev: DEV,
pack: obj,
page: utils.getOpenGraphData({
name: obj.name,
Expand All @@ -177,43 +165,15 @@ app.get("/packages/:packageName", async (req, res) => {
})
});
} catch(err) {
let status_to_display = false; // Since the status is ignored if not a number,
// we initialize as boolean to no-op in the case we don't find a proper status

const validStatusIs = (val, key) => {
if (typeof val?.response?.[key] === "boolean" && val.response[key]) {
return true;
} else {
return false;
}
};

if (validStatusIs(err, "notFound")) {
status_to_display = 404;
} else if (validStatusIs(err, "unauthorized")) {
status_to_display = 401;
} else if (validStatusIs(err, "forbidden")) {
status_to_display = 403;
} else if (validStatusIs(err, "badRequest")) {
status_to_display = 400;
}

utils.displayError(req, res, {
error: utils.modifyErrorText(err),
dev: DEV,
page: utils.getOpenGraphData({ og_url: "https://packages.pulsar-edit.dev/packages" }),
status_to_display: status_to_display
});
utils.displayError(req, res, err);
}
});

app.get("/users", async (req, res) => {
// The Signed in User Details Page

// This is the signed in user page.
// Since we will let the JavaScript on the page handle any API call needed here lets just
// render a page and not do anything
res.render("user", { dev: DEV, page: utils.getOpenGraphData({
res.render("user", { page: utils.getOpenGraphData({
name: "Pulsar User Account",
og_url: "https://packages.pulsar-edit.dev/users"
})});
Expand All @@ -223,7 +183,7 @@ app.get("/login", async (req, res) => {
// The Login/Sign Up Page showing all sign in options

// This is a very simple return with no api, so we will just render
res.render("login", { dev: DEV, page: utils.getOpenGraphData({
res.render("login", { page: utils.getOpenGraphData({
name: "Pulsar Sign In/Up",
og_url: "https://packages.pulsar-edit.dev/login",
og_description: "The Pulsar User Sign In Page"
Expand All @@ -234,23 +194,26 @@ app.get("/logout", async (req, res) => {
// The Login/Sign Up Page showing all sign in options

// This is a very simple return with no api, so we will just render
res.render("logout", { dev: DEV, page: utils.getOpenGraphData({
res.render("logout", { page: utils.getOpenGraphData({
name: "Pulsar Logout",
og_url: "https://packages.pulsar-edit.dev/logout",
og_description: "The Pulsar Log Out Page"
})});
});

app.use(async (req, res) => {
app.use((req, res) => {
// 404 here, keep at last position
await utils.displayError(req, res, {
error: `The page '${req.url}' cannot be found.`,
dev: DEV,
page: utils.getOpenGraphData(),
status_to_display: 404
utils.displayError(req, res, {
status: 404,
msg: `The page '${req.url}' cannot be found.`
});
});

app.use((err, req, res, _next) => {
// Last call error handler, overriding ExpressJS's default
utils.displayError(req, res, err);
});

const BADGE_META = {
"Made for Pulsar!": {
description: "This package was written specifically for Pulsar and did not exist in the Atom package repository."
Expand Down
21 changes: 11 additions & 10 deletions src/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,14 @@ const reg = require("./reg.js");

// Collection of utility functions for the frontend

async function displayError(req, res, details) {
function displayError(req, res, details) {
console.error(details);
if (typeof details?.status_to_display === "number") {
res.status(details.status_to_display).render("error", details);
} else {
res.status(500).render("error", details);
}
const status = details.status ?? 500;
const msg = modifyErrorText(details) ?? details;
res.status(status).render("error", {
page: { name: "This page encountered an error!", include_og: false },
error: msg
});
}

let currentPackage = null;
Expand Down Expand Up @@ -143,11 +144,10 @@ function modifyErrorText(err) {
if (typeof err === "object") {
if (typeof err.status === "number") {
// This is likely an error thrown from `superagent`
let text = `'${err.status}' Received from '${err?.response?.req?.host}${err?.response?.req?.path}'\n\t\t ${err.toString()}`;
return text;
return `'${err.status}' Received from '${err?.response?.req?.host}${err?.response?.req?.path}'\n\t\t ${err.toString()}`;
} else {
// TODO Additional possibilities added here
return err;
return err.toString();
}
} else {
// We likely already have an error message string
Expand Down Expand Up @@ -453,7 +453,8 @@ function getOpenGraphData(overrides = {}) {
og_url: overrides.og_url ?? "https://packages.pulsar-edit.dev/",
og_description: overrides.og_description ?? "The Pulsar Package Registry",
og_image: overrides.og_image ?? "https://web.pulsar-edit.dev/public/pulsar_name.svg",
og_image_type: overrides.og_image_type ?? "image/svg+xml"
og_image_type: overrides.og_image_type ?? "image/svg+xml",
include_og: true
};

if (overrides.og_image_width) {
Expand Down