From 764953fcbce76171221b096a738ba6d1cdd8515b Mon Sep 17 00:00:00 2001 From: Jeffrey Phillips Freeman <the@jeffreyfreeman.me> Date: Thu, 12 Oct 2023 13:14:44 -0400 Subject: [PATCH] Created status and activity ajson endpoints per page --- CHANGELOG.md | 3 ++ config/_default/hugo.toml | 13 ++++-- layouts/_default/single.activity.ajson | 1 + layouts/_default/single.activity_status.ajson | 1 + layouts/index.activity_outbox.ajson | 41 +------------------ layouts/index.html | 4 +- layouts/partials/activity.ajson | 10 +++++ layouts/partials/status.ajson | 41 +++++++++++++++++++ vercel.json | 26 ++++++++++++ 9 files changed, 95 insertions(+), 45 deletions(-) create mode 100644 layouts/_default/single.activity.ajson create mode 100644 layouts/_default/single.activity_status.ajson create mode 100644 layouts/partials/activity.ajson create mode 100644 layouts/partials/status.ajson diff --git a/CHANGELOG.md b/CHANGELOG.md index a55283a75..8db1a9ffb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ ## 1.0.2 * Fixed bad id in `/followers` ActivityPub endpoint. +* Created activity and status pages for each page independent from the outbox. + This should enable searches for specific posts to work rather than simply + pointing to the main user. ## 1.0.1 diff --git a/config/_default/hugo.toml b/config/_default/hugo.toml index cfa243db2..ba3f25d02 100644 --- a/config/_default/hugo.toml +++ b/config/_default/hugo.toml @@ -12,8 +12,11 @@ enableRobotsTXT = true [services.rss] limit = 50 -[permalinks] -post = "/:title/" +# [permalinks] +# [permalinks.page] +# news = "/:section/:slug/" +# projects = "/:section/:slug/" +# resource = "/:section/:slug/" [taxonimies] tag = "tags" @@ -39,11 +42,15 @@ baseName = "outbox" mediaType = "application/json" notAlternative = true baseName = "manifest" +[outputFormats.ACTIVITY_STATUS] +mediaType = "application/activity+json" +notAlternative = true +baseName = "status" [outputs] home = ["HTML", "RSS", "ACTIVITY", "ACTIVITY_OUTBOX", "MANIFEST"] section = ["HTML", "RSS"] -page = ["HTML"] +page = ["HTML", "ACTIVITY_STATUS", "ACTIVITY"] [related] # Only include matches with rank >= threshold. This is a normalized rank between 0 and 100. diff --git a/layouts/_default/single.activity.ajson b/layouts/_default/single.activity.ajson new file mode 100644 index 000000000..2497ee7c4 --- /dev/null +++ b/layouts/_default/single.activity.ajson @@ -0,0 +1 @@ +{{ partial "activity.ajson" . }} diff --git a/layouts/_default/single.activity_status.ajson b/layouts/_default/single.activity_status.ajson new file mode 100644 index 000000000..d907084b2 --- /dev/null +++ b/layouts/_default/single.activity_status.ajson @@ -0,0 +1 @@ +{{ partial "status.ajson" . }} diff --git a/layouts/index.activity_outbox.ajson b/layouts/index.activity_outbox.ajson index 0ebe9780e..1bced6bf1 100644 --- a/layouts/index.activity_outbox.ajson +++ b/layouts/index.activity_outbox.ajson @@ -16,46 +16,7 @@ "orderedItems": [ {{ range $index, $element := $all }} {{- if ne $index 0 }}, {{ end }} - { - "@context": "https://www.w3.org/ns/activitystreams", - "id": "{{.Permalink}}-create", - "type": "Create", - "actor": "{{ .Site.BaseURL }}{{ site.Params.apUser | lower}}", - "object": { - "id": "{{ .Permalink }}", - "type": "Note", - "content": {{ printf "\"" | safeHTML }}<b>{{.Title}}</b>{{ if .Summary }}<br>{{ replace (replace .Summary "\n" "<br>") "\r" "" | safeHTML}}{{ end }}<br><br>Read more here:<br><a href='{{.Permalink}}'>{{.Permalink}}</a><br><br>{{ if .Site.Params.renderArticleHashtags }}{{ if .Params.tags }}{{ range $indexArticleTags, $elementArticleTag := .Params.tags }}{{ if ne $indexArticleTags 0 }} {{ end }}<a href='{{ site.BaseURL }}tags/{{ $elementArticleTag | lower }}' class='mention hashtag' rel='tag'>#<span>{{ $elementArticleTag }}</span></a>{{ end }}{{ end }}{{ end }} {{ if .Site.Params.renderDefaultHashtags }}{{ if .Site.Params.postHashtags }}{{ range $indexTags, $elementTag := .Site.Params.postHashtags }}{{ if ne $indexTags 0 }} {{ end }}<a href='#' class='mention hashtag' rel='tag'>#<span>{{ $elementTag }}</span></a>{{ end }}{{ end }}{{ end }}{{ printf "\"" | safeHTML }}, - "url": "{{.Permalink}}", - "attributedTo": "{{ .Site.BaseURL }}{{ site.Params.apUser | lower}}", - "to": "https://www.w3.org/ns/activitystreams#Public", - {{ if (or (and .Site.Params.postHashtags .Site.Params.renderDefaultHashtags) (and .Params.tags .Site.Params.renderArticleHashtags)) }} - "tag": [ - {{- if (and .Site.Params.postHashtags .Site.Params.renderDefaultHashtags) }} - {{- range $indexTags, $elementTag := .Site.Params.postHashtags }} - {{- if ne $indexTags 0 }}, {{ end }} - { - "type": "Hashtag", - "href": "{{ site.BaseURL | safeHTML }}tags/{{ $elementTag | lower }}", - "name": "#{{ $elementTag }}" - } - {{- end }} - {{- end }} - {{- $hasTagContent := (and .Site.Params.postHashtags .Site.Params.renderDefaultHashtags) }} - {{- if (and .Params.tags .Site.Params.renderArticleHashtags) }} - {{- range $indexTags, $elementTag := .Params.tags }} - {{- if (or (ne $indexTags 0) $hasTagContent) }}, {{ end }} - { - "type": "Hashtag", - "href": "{{ site.BaseURL | safeHTML }}tags/{{ $elementTag | lower }}", - "name": "#{{ $elementTag }}" - } - {{- end }} - {{- end }} - ], - {{- end }} - "published": {{ dateFormat "2006-01-02T15:04:05-07:00" .Date | jsonify }} - } - } + {{ partial "activity.ajson" . }} {{end}} ] } diff --git a/layouts/index.html b/layouts/index.html index 9eb2d0499..6ba1fb76d 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -1,3 +1,3 @@ -{{ partial "top_home.html" }} +{{ partial "top_home.html" . }} {{ .Content }} -{{ partial "bottom_home.html" }} +{{ partial "bottom_home.html" . }} diff --git a/layouts/partials/activity.ajson b/layouts/partials/activity.ajson new file mode 100644 index 000000000..983943f59 --- /dev/null +++ b/layouts/partials/activity.ajson @@ -0,0 +1,10 @@ +{ + "@context": "https://www.w3.org/ns/activitystreams", + "id": "{{.Permalink}}activity", + "type": "Create", + "actor": "{{ .Site.BaseURL }}{{ site.Params.apUser | lower}}", + "published": {{ dateFormat "2006-01-02T15:04:05-07:00" .Date | jsonify }}, + "to": [ "https://www.w3.org/ns/activitystreams#Public" ], + "cc": [ "{{ .Site.BaseURL }}followers" ], + "object": {{ partial "status.ajson" . }} +} diff --git a/layouts/partials/status.ajson b/layouts/partials/status.ajson new file mode 100644 index 000000000..224005107 --- /dev/null +++ b/layouts/partials/status.ajson @@ -0,0 +1,41 @@ +{ + "id": "{{ .Permalink }}", + "type": "Note", + "summary": null, + "inReplyTo": null, + "published": {{ dateFormat "2006-01-02T15:04:05-07:00" .Date | jsonify }}, + "url": "{{.Permalink}}", + "attributedTo": "{{ .Site.BaseURL }}{{ site.Params.apUser | lower}}", + "to": [ "https://www.w3.org/ns/activitystreams#Public" ], + "cc": [ "{{ .Site.BaseURL }}followers" ], + "sensitive": false, + "atomUri": "{{ .Permalink }}", + "inReplyToAtomUri": null, + "content": {{ printf "\"" | safeHTML }}<b>{{.Title}}</b>{{ if .Summary }}<br>{{ replace (replace .Summary "\n" "<br>") "\r" "" | safeHTML}}{{ end }}<br><br>Read more here:<br><a href='{{.Permalink}}'>{{.Permalink}}</a><br><br>{{ if .Site.Params.renderArticleHashtags }}{{ if .Params.tags }}{{ range $indexArticleTags, $elementArticleTag := .Params.tags }}{{ if ne $indexArticleTags 0 }} {{ end }}<a href='{{ site.BaseURL }}tags/{{ $elementArticleTag | lower }}' class='mention hashtag' rel='tag'>#<span>{{ $elementArticleTag }}</span></a>{{ end }}{{ end }}{{ end }} {{ if .Site.Params.renderDefaultHashtags }}{{ if .Site.Params.postHashtags }}{{ range $indexTags, $elementTag := .Site.Params.postHashtags }}{{ if ne $indexTags 0 }} {{ end }}<a href='#' class='mention hashtag' rel='tag'>#<span>{{ $elementTag }}</span></a>{{ end }}{{ end }}{{ end }}{{ printf "\"" | safeHTML }}, + "attachment": [], + {{ if (or (and .Site.Params.postHashtags .Site.Params.renderDefaultHashtags) (and .Params.tags .Site.Params.renderArticleHashtags)) }} + "tag": [ + {{- if (and .Site.Params.postHashtags .Site.Params.renderDefaultHashtags) }} + {{- range $indexTags, $elementTag := .Site.Params.postHashtags }} + {{- if ne $indexTags 0 }}, {{ end }} + { + "type": "Hashtag", + "href": "{{ site.BaseURL | safeHTML }}tags/{{ $elementTag | lower }}", + "name": "#{{ $elementTag }}" + } + {{- end }} + {{- end }} + {{- $hasTagContent := (and .Site.Params.postHashtags .Site.Params.renderDefaultHashtags) }} + {{- if (and .Params.tags .Site.Params.renderArticleHashtags) }} + {{- range $indexTags, $elementTag := .Params.tags }} + {{- if (or (ne $indexTags 0) $hasTagContent) }}, {{ end }} + { + "type": "Hashtag", + "href": "{{ site.BaseURL | safeHTML }}tags/{{ $elementTag | lower }}", + "name": "#{{ $elementTag }}" + } + {{- end }} + {{- end }} + ] + {{- end }} +} diff --git a/vercel.json b/vercel.json index 231d06354..3132c1573 100644 --- a/vercel.json +++ b/vercel.json @@ -59,6 +59,32 @@ { "source": "/send-note", "destination": "/api/activitypub/sendNote.js" + }, + { + "source": "/:pathSection/:pathPage/", + "has": [ + { + "type": "header", + "key": "Accept", + "value": "application/activity+json" + } + ], + "destination": "/:pathSection/:pathPage/status.ajson" + }, + { + "source": "/:pathSection/:pathPage/", + "has": [ + { + "type": "header", + "key": "Accept", + "value": "application/json" + } + ], + "destination": "/:pathSection/:pathPage/status.ajson" + }, + { + "source": "/:pathSection/:pathPage/activity", + "destination": "/:pathSection/:pathPage/activity.ajson" } ], "functions": { -- GitLab