Skip to content

Commit 8ca7a11

Browse files
committed
feat: add social_description frontmatter to customise the text shown in social embeds, and adjust keyword extraction for head metadata
1 parent 99ed995 commit 8ca7a11

5 files changed

Lines changed: 22 additions & 7 deletions

File tree

archive/template.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ tags:
1212
thumbnail_src: ~/assets/img/to/thumbnail.jpg # Start with ./... for images relative to your directory.
1313
thumbnail_banner: true # or false depending if you want the thumbnail to show on the post's page.
1414
keywords: key words # Not really important.
15+
social_description: |
16+
This description shows up when sharing the page over social media embeds.
1517
comments: true # Enable comments.
1618
sharable: false # Enable share buttons.
1719
use_math: false

content/advisories/2026-05-03-pixera.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ title: "Advisory: RCE and Arbitrary File Read in AV Stumpfl PIXERA < 25.2 R3"
33
excerpt: CVE-2026-7703, CVE-2026-7704
44
# thumbnail_src: assets/deserialization_meme_69.png
55
# thumbnail_banner: false
6+
social_description: A Remote Code Execution (RCE) vulnerability was discovered in PIXERA media servers. A crafted payload sent to a websocket JSON-RPC API allows unauthenticated users to run arbitrary commands with Administrator privileges and pivot across connected networks.
67
---
78

89
## Overview

content/meta/search.json.njk

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ permalink: /search.json
1111
"type": "post",
1212
"title": "{{post.data.safeTitle | safe}}",
1313
"excerpt": "{{post.data.excerpt}}",
14-
"keywords": {{((post.data.excerpt | mdInline) + post.content) | striptags | keywords | jsonify | safe}},
14+
"keywords": {{((post.data.excerpt | mdInline) + post.content) | striptags | keywordsWithCount | jsonify | safe}},
1515
"tags": {{post.data.tags | exclude("posts") | jsonify | safe}},
1616
"url": "{{post.url}}"
1717
}
@@ -25,7 +25,7 @@ permalink: /search.json
2525
"type": "tag",
2626
"title": "{{page.data.safeTitle | safe}}",
2727
"excerpt": {{clean | truncateWords(20) | jsonify | safe}},
28-
"keywords": {{clean | keywords | jsonify | safe}},
28+
"keywords": {{clean | keywordsWithCount | jsonify | safe}},
2929
"tags": [],
3030
"url": "{{page.url}}"
3131
}

eleventy/filters.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,10 +224,11 @@ export default function (eleventyConfig) {
224224

225225
if (process.env.ENVIRONMENT === 'fast') {
226226
// Keep things fast.
227-
eleventyConfig.addFilter('keywords', content => content);
227+
eleventyConfig.addFilter('keywordsWithCount', content => content);
228+
eleventyConfig.addFilter('keywords', content => [content]);
228229
} else {
229230
// Extract a set of keywords and run-length-encode them to optimise size.
230-
eleventyConfig.addFilter('keywords', function (content) {
231+
eleventyConfig.addFilter('keywordsWithCount', function (content) {
231232
const res = findKeywords(content);
232233
const counter = new Map();
233234
for (const w of res) {
@@ -238,6 +239,10 @@ export default function (eleventyConfig) {
238239
);
239240
return lengthEncoded.join(' ');
240241
});
242+
eleventyConfig.addFilter('keywords', function (content) {
243+
const res = findKeywords(content, false);
244+
return [...new Set(res)];
245+
});
241246
}
242247

243248
eleventyConfig.addFilter('maxDate', (a, b) => {

partials/_includes/utilities/metadata.html

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,13 @@
3232
{% set page_keywords = [] %}
3333
{% set page_keywords = page_keywords | push(site.author.alias | lower) %}
3434
{% if safeTitle %}
35-
{% set page_keywords = page_keywords | push(safeTitle | lower | e) %}
35+
{% set page_keywords = page_keywords | extend(safeTitle | lower | keywords) %}
3636
{% endif %}
3737
{% if excerpt %}
38-
{% set page_keywords = page_keywords | push(safeExcerpt | lower | e) %}
38+
{% set page_keywords = page_keywords | extend(safeExcerpt | lower | keywords) %}
39+
{% endif %}
40+
{% if social_description %}
41+
{% set page_keywords = page_keywords | extend(social_description | lower | keywords) %}
3942
{% endif %}
4043
{% if tags %}
4144
{% set page_keywords = page_keywords | extend(tags | exclude('posts')) %}
@@ -76,7 +79,11 @@
7679
<meta property="twitter:title" content="{{ titleTagText | safe }}"/>
7780

7881
{% if excerpt %}
79-
{% set meta_desc = safeExcerpt + "\n\n" + (content | annihilate('.article-header, .post-preamble, .metadata-container, .metadata-tag-container, #toc-sidebar') | striptags | truncateWords(30)) %}
82+
{% if social_description %}
83+
{% set meta_desc = safeExcerpt + "\n\n" + social_description %}
84+
{% else %}
85+
{% set meta_desc = safeExcerpt + "\n\n" + (content | annihilate('.article-header, .post-preamble, .metadata-container, .metadata-tag-container, #toc-sidebar') | striptags | truncateWords(30)) %}
86+
{% endif %}
8087
{% else %}
8188
{% set meta_desc = site.description %}
8289
{% endif %}

0 commit comments

Comments
 (0)