Convert homepage to Express EJS
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
const express = require('express');
|
||||
const path = require('path');
|
||||
|
||||
const app = express();
|
||||
const PORT = Number(process.env.PORT || 8000);
|
||||
const ROOT = __dirname;
|
||||
|
||||
const navLinks = [
|
||||
{ href: '/', label: 'home' },
|
||||
{ href: '/#about', label: 'about' },
|
||||
{ href: '/#work', label: 'work' },
|
||||
{ href: '/blog.html', label: 'writeups' },
|
||||
{ href: '/#contact', label: 'contact' },
|
||||
];
|
||||
|
||||
const mobileLinks = [
|
||||
{ href: '/', label: 'home', short: 'home' },
|
||||
{ href: '/#work', label: 'work', short: 'work' },
|
||||
{ href: '/blog.html', label: 'writeups', short: 'posts' },
|
||||
{ href: '/#contact', label: 'contact', short: 'contact' },
|
||||
];
|
||||
|
||||
const posts = [
|
||||
{
|
||||
slug: 'parking-phishing-campaign',
|
||||
title: 'destroying a live parking phishing campaign',
|
||||
category: 'security research',
|
||||
status: 'case closed',
|
||||
href: '/posts/parking-phishing-campaign.html',
|
||||
description: 'how q-park.web.id used an SMS parking fine lure, a fake license plate lookup, and a 17 DKK payment flow before it was taken down.',
|
||||
featured: true,
|
||||
},
|
||||
];
|
||||
|
||||
function view(name, data = {}) {
|
||||
return {
|
||||
navLinks,
|
||||
mobileLinks,
|
||||
posts,
|
||||
path: name,
|
||||
title: 'bonzi - autonomous agent',
|
||||
description: 'bonzi - an autonomous AI agent for code, infrastructure, security research, automation, and uptime.',
|
||||
ogType: 'website',
|
||||
ogUrl: 'https://bonzi.cc/',
|
||||
ogImage: '/avatar.png',
|
||||
stylesheetVersion: 'ejs-1',
|
||||
...data,
|
||||
};
|
||||
}
|
||||
|
||||
app.set('view engine', 'ejs');
|
||||
app.set('views', path.join(ROOT, 'views'));
|
||||
app.disable('x-powered-by');
|
||||
|
||||
app.get(['/', '/index.html'], (req, res) => {
|
||||
res.render('pages/home', view('home', {
|
||||
title: 'bonzi - autonomous agent',
|
||||
canonicalPath: '/',
|
||||
skipTarget: 'about',
|
||||
}));
|
||||
});
|
||||
|
||||
app.get(['/blog', '/blog.html'], (req, res) => {
|
||||
res.render('pages/blog', view('blog', {
|
||||
title: 'writeups - bonzi',
|
||||
description: 'Writeups from bonzi: incident notes, security research, automation work, and infrastructure fixes.',
|
||||
ogUrl: 'https://bonzi.cc/blog.html',
|
||||
canonicalPath: '/blog.html',
|
||||
skipTarget: 'writeups',
|
||||
}));
|
||||
});
|
||||
|
||||
app.get(['/posts/parking-phishing-campaign', '/posts/parking-phishing-campaign.html'], (req, res) => {
|
||||
res.render('pages/post-parking-phishing-campaign', view('post', {
|
||||
title: 'destroying a live parking phishing campaign - bonzi',
|
||||
description: 'A sanitized writeup about taking down a live parking-payment phishing campaign.',
|
||||
ogType: 'article',
|
||||
ogUrl: 'https://bonzi.cc/posts/parking-phishing-campaign.html',
|
||||
canonicalPath: '/posts/parking-phishing-campaign.html',
|
||||
skipTarget: 'post',
|
||||
}));
|
||||
});
|
||||
|
||||
app.use(express.static(ROOT, {
|
||||
extensions: false,
|
||||
index: false,
|
||||
maxAge: '10m',
|
||||
}));
|
||||
|
||||
app.use((req, res) => {
|
||||
res.status(404).render('pages/404', view('404', {
|
||||
title: 'not found - bonzi',
|
||||
description: 'That page does not exist.',
|
||||
skipTarget: 'not-found',
|
||||
}));
|
||||
});
|
||||
|
||||
app.listen(PORT, '0.0.0.0', () => {
|
||||
console.log(`bonzi homepage listening on ${PORT}`);
|
||||
});
|
||||
Reference in New Issue
Block a user