1
0
Fork 0
mirror of https://git.sr.ht/~seirdy/seirdy.one synced 2024-12-18 06:42:10 +00:00

Compare commits

...

3 commits

Author SHA1 Message Date
Rohan Kumar
8709bf9ec2
Overhaul webmention generation
Use a new branch of webmentiond that lets me pull in all webmentions for
all pages in a single JSON response

Before, Hugo would make one request to webmentiond per page to ask for
approved webmentions for that page. Sometimes, it makes two requests
because some pages used to have a different canonical location. In all,
it ended up making over 150 requests within a second or two. Webmentiond
can handle this for now, but this isn't sustainable: page count will
only increase with time. I wanted to have Hugo instead get all
webmentions for all pages in one cached request.

I recompiled webmentiond from
https://github.com/zerok/webmentiond/pull/65, which updates the API to
support admin access keys. The admin API allows pulling in all
webmentions for all pages, instead of pulling them in for one page at a
time.

Doing so requires getting a bearer token, so I had to manage a new CI
secret: the password for getting a token. I get the token in a shell
script (get-token.sh) and write it to a temporary file, then have Hugo
read the token from that file. The shell script gets the password using
either the CI secret (in CI) or using my password manager (on my
workstation).

TODO: support marginalia (mentions with fragments in their targets)
2022-12-19 11:07:57 -08:00
Rohan Kumar
12b511c369
mention webfinger in "about" page 2022-12-18 11:35:51 -08:00
Rohan Kumar
1a46dc52fd
More webfinger accs 2022-12-18 11:18:41 -08:00
8 changed files with 93 additions and 18 deletions

View file

@ -11,7 +11,8 @@ packages:
sources: sources:
- https://git.sr.ht/~seirdy/seirdy.one - https://git.sr.ht/~seirdy/seirdy.one
secrets: secrets:
- cc1eb90c-b07b-4c46-86d4-58fec41cf0e4 - cc1eb90c-b07b-4c46-86d4-58fec41cf0e4 # ssh key
- b0bfa66e-3cf2-468f-9ea4-085819eccd18 # webmentiond key
triggers: triggers:
- action: email - action: email
condition: always condition: always

1
.gitignore vendored
View file

@ -18,3 +18,4 @@ public.eac
# when i feel like it # when i feel like it
styles/ styles/
.vale.ini .vale.ini
.webmentiond-token

View file

@ -24,7 +24,9 @@ csv/webrings.csv:
.PHONY: hugo .PHONY: hugo
hugo: csv/webrings.csv $(SRCFILES) hugo: csv/webrings.csv $(SRCFILES)
sh scripts/get-token.sh
hugo -b $(HUGO_BASEURL) $(HUGO_FLAGS) -d $(OUTPUT_DIR) hugo -b $(HUGO_BASEURL) $(HUGO_FLAGS) -d $(OUTPUT_DIR)
rm .webmentiond-token
mv $(OUTPUT_DIR)/about/_index.gmi $(OUTPUT_DIR)/about/index.gmi mv $(OUTPUT_DIR)/about/_index.gmi $(OUTPUT_DIR)/about/index.gmi
# .hintrc-local for linting local files # .hintrc-local for linting local files

View file

@ -6,6 +6,14 @@ Online Handle: Seirdy
I'm known as Rohan and as Seirdy. There are some differences between these personas, but the line between the two is blurry. It's fine to mix them up. I'm known as Rohan and as Seirdy. There are some differences between these personas, but the line between the two is blurry. It's fine to mix them up.
This page lists my most relevant accounts. A more comprehensive list of my online accounts is available via WebFinger:
=> https://seirdy.one/.well-known/webfinger?resource=acct%3Aseirdy%40seirdy.one WebFinger for acct:seirdy@seirdy.one
Any currently-active public account not listed via WebFinger isn't actually me; please let me know if you find one.
I've published a version of my OpenPGP key via Web Key Directory; this version has notations containing Ariadne identity proofs for a few more accounts of mine. You can verify those accounts on any Keyoxide instance using Web Key Directory. I hope to migrate identity proofs to something besides OpenPGP in the future.
## About this capsule ## About this capsule
This page's canonical location is on seirdy.one: This page's canonical location is on seirdy.one:
@ -58,7 +66,7 @@ My handle is "Seirdy" on all the platforms I use:
If you send me marketing emails or solicit guest posts, I will block you and submit you to third-party blocklists without warning. If you send me marketing emails or solicit guest posts, I will block you and submit you to third-party blocklists without warning.
My username is Seirdy on Reddit, Hacker News, Lobsters, Tildes.net, Linux Weekly News, Codeberg, and a few other places. For IRC, my nick is Seirdy on Libera.chat, Snoonet, OFTC, Tilde.Chat, apionet, and a few smaller networks. Some more profiles are available via Ariadne identity proofs; you can look me up on Keyoxide using Web Key Directory. My username is Seirdy on Reddit, Hacker News, Lobsters, Tildes.net, Linux Weekly News, Codeberg, and a few other places. For IRC, my nick is Seirdy on Libera.chat, Snoonet, OFTC, Tilde.Chat, apionet, and a few smaller networks.
My secondary Matrix account for Synapse-only rooms is @seirdy:fairydust.space. My Matrix account used to be @seirdy:envs.net but I've since migrated to my own Conduit server. My secondary Matrix account for Synapse-only rooms is @seirdy:fairydust.space. My Matrix account used to be @seirdy:envs.net but I've since migrated to my own Conduit server.

View file

@ -11,6 +11,10 @@ stype: "https://schema.org/AboutPage https://schema.org/ProfilePage"
I'm known as Rohan and as Seirdy. There are some differences between these personas, but the line between the two is blurry. It's fine to mix them up. I'm known as Rohan and as Seirdy. There are some differences between these personas, but the line between the two is blurry. It's fine to mix them up.
This page lists my most relevant accounts. A more comprehensive list of my online accounts is available via WebFinger: [acct:seirdy@seirdy.one](https://seirdy.one/.well-known/webfinger?resource=acct%3Aseirdy%40seirdy.one). Any currently-active public account not listed via WebFinger isn't actually me; please let me know if you find one.
I've published a version of my OpenPGP key via Web Key Directory; this version has notations containing Ariadne identity proofs for a few more accounts of mine. You can [verify those accounts on any Keyoxide instance](https://keyoxide.org/wkd/seirdy%40seirdy.one) (requires JavaScript). I hope to migrate identity proofs to something besides OpenPGP in the future.
Rohan: meat­space persona {#Rohan} Rohan: meat­space persona {#Rohan}
----------------------------- -----------------------------
@ -104,8 +108,6 @@ I go by <span class="p-nickname nickname" itemprop="alternateName">Seirdy</span>
If you send me marketing emails or solicit guest posts, I will block you and submit you to third-party blocklists without warning. If you send me marketing emails or solicit guest posts, I will block you and submit you to third-party blocklists without warning.
I've published a version of my OpenPGP key via Web Key Directory; this version has notations containing Ariadne identity proofs for a few more accounts of mine. You can [verify those accounts on any Keyoxide instance](https://keyoxide.org/wkd/seirdy%40seirdy.one) (requires JavaScript).
At least two platforms listed in the "Social (centralized)" category are not endorsed, and I'm trying to wind down my use of them. If you find a "Seirdy" somewhere else and don't know whether or not it's me, please contact me and ask instead of assuming that it must be me. At least two platforms listed in the "Social (centralized)" category are not endorsed, and I'm trying to wind down my use of them. If you find a "Seirdy" somewhere else and don't know whether or not it's me, please contact me and ask instead of assuming that it must be me.
I used to have the Matrix ID `@seirdy:envs.net`. I sometimes use `@seirdy:fairydust.space` for technical reasons (seirdy.one runs a Conduit server but certain features only work in Synapse rooms). I used to have the Matrix ID `@seirdy:envs.net`. I sometimes use `@seirdy:fairydust.space` for technical reasons (seirdy.one runs a Conduit server but certain features only work in Synapse rooms).

View file

@ -1,5 +1,4 @@
{{- $wbmLinks := (slice "https://si3t.ch/log/2021-04-18-entetes-floc.html" "https://xmpp.org/2021/02/newsletter-02-feburary/" "https://gurlic.com/technology/post/393626430212145157" "https://gurlic.com/technology/post/343249858599059461" "https://www.librepunk.club/@penryn/108411423190214816" "https://benign.town/@josias/108457015755310198" "http://www.tuxmachines.org/node/148146" "https://i.reddit.com/r/web_design/comments/k0dmpj/an_opinionated_list_of_best_practices_for_textual/gdmxy4u/" "https://bbbhltz.space/posts/thoughts-on-tech-feb2021/" "https://jorts.horse/@alice/108477866954580532" "https://brid.gy/comment/mastodon/@Seirdy@pleroma.envs.net/AK7FeQ4h2tUCKNwlXc/AK7GtGkE7JOVgm1Cgi" "https://fosstodon.org/@werwolf/108529382741681838" "https://mastodon.social/@WahbAllat/108986614624476982" "https://linuxrocks.online/@friend/109029028283860044" "https://fosstodon.org/@fullstackthaumaturge/108765040526523487" "https://inhji.de/notes/an-opinionated-list-of-best-practices-for-textual-websites" "https://ravidwivedi.in/whatsapp/" "https://hackers.town/@theruran/108440680870400884" "https://hackers.town/@theruran/108440475936938471" "https://mckinley.cc/twtxt/2022-may-aug.html#2022-06-25T16:06:07-07:00" "https://tarnkappe.info/lesetipps-bayern-it-sicherheit-db-app-trackt-neue-eu-datenbank/" "https://catcatnya.com/@kescher/109221687024062842" "https://catcatnya.com/@kescher/109221707054861018" "https://catcatnya.com/@kescher/109221721385520640" "https://catcatnya.com/@kescher/109221750082044200" "https://brid.gy/post/twitter/seirdy/1536747178877673475" "https://markesler.com/blog/website-design/" "https://catcatnya.com/@kescher/108601418196537980" "https://chaos.social/@n0toose/109035270210401105" "https://nicfab.it/en/posts/aware-digital-communication-respecting-privacy-and-the-apps-or-services-you-choose/" "https://haxf4rall.com/2022/09/23/a-collection-of-articles-about-hardening-linux/" "https://mastodon.randomroad.social/@dctrud/108680634691924661" "https://brid.gy/post/twitter/seirdy/1535891978969174016" "https://mastodon.technology/@codeberg/108403449317373462" "https://harveyr.net/posts/14kb/" "https://brid.gy/comment/mastodon/@Seirdy@pleroma.envs.net/ANUjukccjwEmivz3ia/ANUmmjSDUviUeCz42S") -}} {{- $wbmLinks := (slice "https://si3t.ch/log/2021-04-18-entetes-floc.html" "https://xmpp.org/2021/02/newsletter-02-feburary/" "https://gurlic.com/technology/post/393626430212145157" "https://gurlic.com/technology/post/343249858599059461" "https://www.librepunk.club/@penryn/108411423190214816" "https://benign.town/@josias/108457015755310198" "http://www.tuxmachines.org/node/148146" "https://i.reddit.com/r/web_design/comments/k0dmpj/an_opinionated_list_of_best_practices_for_textual/gdmxy4u/" "https://bbbhltz.space/posts/thoughts-on-tech-feb2021/" "https://jorts.horse/@alice/108477866954580532" "https://brid.gy/comment/mastodon/@Seirdy@pleroma.envs.net/AK7FeQ4h2tUCKNwlXc/AK7GtGkE7JOVgm1Cgi" "https://fosstodon.org/@werwolf/108529382741681838" "https://mastodon.social/@WahbAllat/108986614624476982" "https://linuxrocks.online/@friend/109029028283860044" "https://fosstodon.org/@fullstackthaumaturge/108765040526523487" "https://inhji.de/notes/an-opinionated-list-of-best-practices-for-textual-websites" "https://ravidwivedi.in/whatsapp/" "https://hackers.town/@theruran/108440680870400884" "https://hackers.town/@theruran/108440475936938471" "https://mckinley.cc/twtxt/2022-may-aug.html#2022-06-25T16:06:07-07:00" "https://tarnkappe.info/lesetipps-bayern-it-sicherheit-db-app-trackt-neue-eu-datenbank/" "https://catcatnya.com/@kescher/109221687024062842" "https://catcatnya.com/@kescher/109221707054861018" "https://catcatnya.com/@kescher/109221721385520640" "https://catcatnya.com/@kescher/109221750082044200" "https://brid.gy/post/twitter/seirdy/1536747178877673475" "https://markesler.com/blog/website-design/" "https://catcatnya.com/@kescher/108601418196537980" "https://chaos.social/@n0toose/109035270210401105" "https://nicfab.it/en/posts/aware-digital-communication-respecting-privacy-and-the-apps-or-services-you-choose/" "https://haxf4rall.com/2022/09/23/a-collection-of-articles-about-hardening-linux/" "https://mastodon.randomroad.social/@dctrud/108680634691924661" "https://brid.gy/post/twitter/seirdy/1535891978969174016" "https://mastodon.technology/@codeberg/108403449317373462" "https://harveyr.net/posts/14kb/" "https://brid.gy/comment/mastodon/@Seirdy@pleroma.envs.net/ANUjukccjwEmivz3ia/ANUmmjSDUviUeCz42S") -}}
{{- $archivetodayLinks := (slice "https://example.com") -}}
{{- $rewritesDict := dict "" "" -}} {{- $rewritesDict := dict "" "" -}}
{{- range $i, $r := (getCSV "," "/csv/rewrites.csv") -}} {{- range $i, $r := (getCSV "," "/csv/rewrites.csv") -}}
{{- $rewritesDict = merge $rewritesDict (dict (index $r 0) (index $r 1)) -}} {{- $rewritesDict = merge $rewritesDict (dict (index $r 0) (index $r 1)) -}}
@ -7,21 +6,33 @@
<h3 id="webmentions" tabindex="-1">Web&#173;mentions</h3> <h3 id="webmentions" tabindex="-1">Web&#173;mentions</h3>
<p>This site supports <a href="https://indieweb.org/webmention">Webmentions</a>, a backlink-based alternative to traditional comment forms.</p> <p>This site supports <a href="https://indieweb.org/webmention">Webmentions</a>, a backlink-based alternative to traditional comment forms.</p>
{{ partial "webmention-form.html" . }} {{ partial "webmention-form.html" . }}
{{- $target := .RelPermalink | replaceRE "^/~seirdy/" "/" }} {{- /* Fetch all webmentions with bearer token */ -}}
{{ $url1 := printf "https://seirdy.one/webmentions/get?status=approved&target=https://seirdy.one%s" $target -}} {{ $bearer_token := "" }}
{{ $webmentions := (getJSON $url1) -}} {{- with readFile ".webmentiond-token" -}}
{{- if lt .Date.Unix 1653616670 -}}{{- /* commit c84c8d4 changed my URL schemes, so fetch menchies for the legacy scheme on old posts. */ -}} {{- $auth := printf "Bearer %s" . -}}
{{- $oldTarget := $target | replaceRE "/posts" "" | replaceRE "/$" ".html" -}} {{- $bearer_token = dict "Authorization" $auth -}}
{{- $url2 := printf "https://seirdy.one/webmentions/get?status=approved&target=https://seirdy.one%s" $oldTarget -}} {{- end -}}
{{- $webmentions = $webmentions | append (getJSON $url2) -}} {{- $mentionsURL := "https://seirdy.one/webmentions/manage/mentions?limit=9999&status=approved" -}}
{{- end -}} {{- $allMentions := (getJSON $mentionsURL $bearer_token).items -}}
{{- if gt (len $webmentions) 0 -}} {{- /* Filter webmentions to just the ones for the current targets */ -}}
{{- $canonicalRelPermalink := .RelPermalink | replaceRE "^/~seirdy/" "/" -}}
{{- $target := printf "%s%s" .Site.Params.CanonicalBaseURL $canonicalRelPermalink -}}
{{- $targets := (slice $target) -}}
{{- /* commit c84c8d4 changed my URL schemes, so fetch menchies for the legacy scheme on old posts. */ -}}
{{- if lt .Date.Unix 1653616670 -}}
{{- $oldTarget := $target | replaceRE "/posts" "" | replaceRE "/$" ".html" -}}
{{ $targets = (slice $target $oldTarget) }}
{{- end -}}
{{- $webmentions := where $allMentions "target" "in" $targets -}}
{{- /* Render webmentions if they exist */ -}}
{{- $count := (len $webmentions) -}}
{{- if gt $count 0 -}}
<p>Webmentions received for this post appear in the following list after I approve them. I sometimes send Webmentions to myself on behalf of linking sites that dont support them. I auto-replace broken links with <a href="https://web.archive.org/">Wayback Machine</a> snapshots, if they exist.</p> <p>Webmentions received for this post appear in the following list after I approve them. I sometimes send Webmentions to myself on behalf of linking sites that dont support them. I auto-replace broken links with <a href="https://web.archive.org/">Wayback Machine</a> snapshots, if they exist.</p>
<details> <details>
<summary>Toggle Webmentions</summary> <summary>Toggle {{ $count }} Webmentions</summary>
<dl> <dl>
{{ range sort $webmentions "created_at" -}} {{ range sort $webmentions "created_at" -}}
{{ $webmention := . -}} {{ $webmention := . -}}
{{- /* Boolean: should we should handle this webmention like a comment or a linkback? */ -}} {{- /* Boolean: should we should handle this webmention like a comment or a linkback? */ -}}
{{- $hasContent := and (isset $webmention "content") (gt (countrunes $webmention.content) 50) -}} {{- $hasContent := and (isset $webmention "content") (gt (countrunes $webmention.content) 50) -}}
{{- $title := $webmention.title -}} {{- $title := $webmention.title -}}
@ -42,8 +53,6 @@
{{- end -}} {{- end -}}
{{- if in $wbmLinks $src -}} {{- if in $wbmLinks $src -}}
{{- $src = printf "https://web.archive.org/web/0/%s" $src -}} {{- $src = printf "https://web.archive.org/web/0/%s" $src -}}
{{- else if in $archivetodayLinks $src -}}
{{- $src = printf "https://archive.today/oldest/%s" $src -}}
{{- end -}} {{- end -}}
{{ if (eq $webmention.type "like") -}} {{ if (eq $webmention.type "like") -}}
<div itemprop="potentialAction" itemscope="" itemtype="https://schema.org/LikeAction" class="u-like h-cite"> <div itemprop="potentialAction" itemscope="" itemtype="https://schema.org/LikeAction" class="u-like h-cite">

32
scripts/get-token.sh Normal file
View file

@ -0,0 +1,32 @@
#!/bin/sh
#
# Script to authenticate with webmentiond and grab a temporary generated
# bearer token, writing it to .webmentiond-token for Hugo to then read.
set -e
_key() {
if [ -n "$BUILD_SUBMITTER" ]; then
cat ~/.webmentiond-key
else
pash show webmentiond-ci-key
fi
}
key="$(_key)"
set -u
# just a lil curl wrapper I use on seirdy.one
ccurl() {
curl --proto "=https" --proto-default https --tlsv1.3 --cert-status --compressed $*
}
_token() {
ccurl -sX POST https://seirdy.one/webmentions/authenticate/access-key -d "key=$key"
}
token="$(_token)"
set +u
printf '%s' "$token" >.webmentiond-token

View file

@ -141,6 +141,16 @@
"href": "https://gitlab.gnome.org/Seirdy", "href": "https://gitlab.gnome.org/Seirdy",
"type": "text/html" "type": "text/html"
}, },
{
"rel": "http://webfinger.net/rel/profile-page",
"href": "https://launchpad.net/~seirdy",
"type": "text/html"
},
{
"rel": "http://webfinger.net/rel/profile-page",
"href": "https://pypi.org/user/Seirdy",
"type": "text/html"
},
{ {
"rel": "http://webfinger.net/rel/profile-page", "rel": "http://webfinger.net/rel/profile-page",
"href": "https://bugzilla.mozilla.org/user_profile?user_id=683392", "href": "https://bugzilla.mozilla.org/user_profile?user_id=683392",
@ -151,11 +161,21 @@
"href": "https://en.wikipedia.org/wiki/User:Seirdy", "href": "https://en.wikipedia.org/wiki/User:Seirdy",
"type": "text/html" "type": "text/html"
}, },
{
"rel": "http://webfinger.net/rel/profile-page",
"href": "https://linuxreviews.org/User:Seirdy",
"type": "text/html"
},
{ {
"rel": "http://webfinger.net/rel/profile-page", "rel": "http://webfinger.net/rel/profile-page",
"href": "https://tinygem.org/Seirdy/", "href": "https://tinygem.org/Seirdy/",
"type": "text/html" "type": "text/html"
}, },
{
"rel": "http://webfinger.net/rel/profile-page",
"href": "https://getpocket.com/@2bzd3p90T15aMg2cU9A11cqAn9g8T9aK1aNTX0m75fuVH5W901d76Zh9S2eKH41c",
"type": "text/html"
},
{ {
"rel": "http://webfinger.net/rel/profile-page", "rel": "http://webfinger.net/rel/profile-page",
"href": "https://archive.org/details/@seirdy", "href": "https://archive.org/details/@seirdy",