-- Leo's gemini proxy

-- Connecting to git.thebackupbox.net:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

repo: fmrl
action: commit
revision:
path_from:
revision_from: bb84fbb8ac0853c1a775bc9a2e7f7918ccc7abfb:
path_to:
revision_to:

git.thebackupbox.net

fmrl

git://git.thebackupbox.net/fmrl

commit bb84fbb8ac0853c1a775bc9a2e7f7918ccc7abfb
Author: epoch <epoch@hack.thebackupbox.net>
Date:   Mon Jun 27 07:01:07 2022 +0000

    added opengraph support

diff --git a/Makefile b/Makefile

index caf36637f8e7c6436899a6dc2f520ec1986ce485..

index ..ed1e6b46b815f05e8ddc36886aa59901c29919cf 100644

--- a/Makefile
+++ b/Makefile
@@ -7,5 +7,7 @@ all:
 install:
 	install -Dt $(PREFIX)/var/www/fmrl/ index.cgi
 	install -Dt $(PREFIX)/var/www/sites/hacking/cgi-bin/ fmrl-svg.cgi
-	install -Dt $(PREFIX)/var/www/sites/hacking/cgi-bin/ fmrl-uri.cgi
+	install -Dt $(PREFIX)/var/www/sites/hacking/cgi-bin/ fmrl-og.cgi
+	install -Dt $(PREFIX)/var/www/lib/ fmrl-og-inline.cgi
 	install -Dt $(PREFIX)/var/www/sites/hacking/cgi-bin/ fmrl-client.cgi
+	install -Dt $(PREFIX)/var/www/sites/hacking/cgi-bin/ fmrl-uri.cgi
diff --git a/fmrl-og-inline.cgi b/fmrl-og-inline.cgi
new file mode 100755
index 0000000000000000000000000000000000000000..dd277c190a750954e52673669fa10409cbd8ce2f
--- /dev/null
+++ b/fmrl-og-inline.cgi
@@ -0,0 +1,21 @@
+#!/bin/sh
+user="$(printf "%s\n" "$QUERY_STRING" | tr '&' '\n' | grep ^user= | cut -d= -f2-)"
+host="${HTTP_HOST}"
+if [ -z "$user" ];then
+  printf 'Content-Type: text/plain\r\n\r\n'
+else
+  file="/var/www/fmrl/.users/$user"
+  u_avatar="https://thebackupbox.net$(jq -r .avatar.original < "$file" | html_entities_encode)"
+  u_name="$(jq -r .name < "$file" | html_entities_encode)"
+  u_emoji="$(jq -r .emoji < "$file" | html_entities_encode)"
+  u_status="$(jq -r .status < "$file" | html_entities_encode)"
+  u_media="$(jq -r .media < "$file" | html_entities_encode)"
+  u_media_type="$(jq -r .media_type < "$file" | tr -cd '0-9')"
+  media_verb="reading,watching,watching,listening to,listening to,playing"
+  u_media_verb="$(printf "%s\n" "$media_verb" | cut -d, -f${u_media_type})"
+  self_url="https://thebackupbox.net/cgi-bin/fmrl-og.cgi?user=${user}"
+  printf '  <meta property="og:image"       content="%s" />\n' "$u_avatar"
+  printf '  <meta property="og:description" content="%s %s %s" />\n' "$u_status" "$u_media_verb" "$u_media"
+  printf '  <meta property="og:title"       content="%s (%s@%s)" />\n' "$u_name" "$user" "$host"
+  printf '  <meta property="og:url"         content="fmrl:%s@%s" />\n' "$user" "$host"
+fi
diff --git a/fmrl-og.cgi b/fmrl-og.cgi
new file mode 100755
index 0000000000000000000000000000000000000000..2a3bd2883364151840dbefb24c43044a723ae346
--- /dev/null
+++ b/fmrl-og.cgi
@@ -0,0 +1,40 @@
+#!/bin/sh
+user="$(printf "%s\n" "$QUERY_STRING" | tr '&' '\n' | grep ^user= | cut -d= -f2-)"
+host="${HTTP_HOST}"
+if [ -z "$user" ];then
+  printf 'Content-Type: text/plain\r\n\r\n'
+else
+  file="/var/www/fmrl/.users/$user"
+  last_modified="$(stat -c '%Y' "${file}")"
+  if [ "${HTTP_IF_MODIFIED_SINCE}" ];then
+    if_modified_since="$(date "+%s" --date="$(printf '%s\n' "${HTTP_IF_MODIFIED_SINCE}" | cut -d+ -f1)")"
+    if [ "${if_modified_since}" -ge "${last_modified}" ];then
+      printf 'Status: 304 Not Modified\r\n\r\n'
+      exit 0
+    fi
+  fi
+  u_avatar="https://thebackupbox.net$(jq -r .avatar.original < "$file" | html_entities_encode)"
+  #u_avatar="data:image/png;base64,$(wget -qO- http://thebackupbox.net$(jq -r .avatar.original < "$file") | base64 | tr -d '\n')"
+  u_name="$(jq -r .name < "$file" | html_entities_encode)"
+  u_emoji="$(jq -r .emoji < "$file" | html_entities_encode)"
+  u_status="$(jq -r .status < "$file" | html_entities_encode)"
+  u_media="$(jq -r .media < "$file" | html_entities_encode)"
+  u_media_type="$(jq -r .media_type < "$file" | tr -cd '0-9')"
+  media_verb="reading,watching,watching,listening to,listening to,playing"
+  u_media_verb="$(printf "%s\n" "$media_verb" | cut -d, -f${u_media_type})"
+  self_url="https://thebackupbox.net/cgi-bin/fmrl-og.cgi?user=${user}"
+  printf "Expires: %s\r\n" "$(rfc7231date)"
+  printf "Content-Type: text/html\r\n\r\n"
+  printf '<html>\n'
+  printf ' <head>\n'
+  #printf '  <meta property="og:image"       content="%s" />' "$u_avatar"
+  printf '  <meta property="og:image"       content="%s" />' "$u_avatar"
+  printf '  <meta property="og:description" content="%s %s %s" />' "$u_status" "$u_media_verb" "$u_media"
+  printf '  <meta property="og:title"       content="%s (%s@%s)" />' "$u_name" "$user" "$host"
+  printf '  <meta property="og:url"         content="fmrl:%s@%s" />' "$user" "$host"
+  printf ' </head>\n'
+  printf ' <body>\n'
+  printf ' open-graph test of fmrl for user %s@%s\n' "$user" "$host"
+  printf ' </body>\n'
+  printf '</html>\n'
+fi
diff --git a/index.cgi b/index.cgi

index bb4d94476d6becd4b2f90d1c0afdab5c901eab0e..

index ..93e9a015d42c88545ad099de18d6ee07c1f40387 100755

--- a/index.cgi
+++ b/index.cgi
@@ -17,6 +17,7 @@ case "$PATH_INFO" in
 #    fi
     user="$(printf "%s\n" "$PATH_INFO" | cut -d/ -f3)"
     user_file="/var/www/fmrl/.users/${user}"
+    user_data="$(cat "${user_file}")"
     if [ "HTTP_TRANSFER_ENCODING" = "chunked" ];then
       printf "Status: 501 Not Implemented\r\n"
       printf "Content-Type: text/plain\r\n\r\n"
@@ -44,7 +45,7 @@ case "$PATH_INFO" in
         avatar_original="/cgi-bin/xface.cgi?$(printf "%s\n" "${HTTPSESS_X_FACE_QS_SAFE}" | sed 's|"|%22|g')"
       else ### if there is no xface either, use the previously defined avatar.
         echo "no xface found :/"
-        avatar_original="$(cat ".users/${user}" | jq -r .avatar.original)"
+        avatar_original="$(printf "%s\n" "${user_data}" | jq -r .avatar.original)"
         if [ ! "$avatar_original" ];then ### if there wasn't a previously defined avatar, set it to no-face
           echo "no previous value either. using no-face"
           avatar_original="/cgi-bin/xface.cgi?$(printf "%s\n" "${HTTPSESS_X_FACE_QS_SAFE}" | sed 's|"|%22|g')"
@@ -54,27 +55,27 @@ case "$PATH_INFO" in

     name="$(printf "%s\n" "$input_json" | jq -r .name//empty | sed 's|"|\\"|g')"
     if [ ! "$name" ];then
-      name="$(cat ".users/${user}" | jq -r .name//empty | sed 's|"|\\"|g')"
+      name="$(printf "%s\n" "${user_data}" | jq -r .name//empty | sed 's|"|\\"|g')"
     fi

     status="$(printf "%s\n" "$input_json" | jq -r .status//empty | sed 's|"|\\"|g')"
     if [ ! "$status" ];then
-      status="$(cat ".users/${user}" | jq -r .status//empty | sed 's|"|\\"|g')"
+      status="$(printf "%s\n" "${user_data}" | jq -r .status//empty | sed 's|"|\\"|g')"
     fi

     emoji="$(printf "%s\n" "$input_json" | jq -r .emoji//empty | sed 's|"|\\"|g')"
     if [ ! "$emoji" ];then
-      emoji="$(cat ".users/${user}" | jq -r .emoji//empty | sed 's|"|\\"|g')"
+      emoji="$(printf "%s\n" "${user_data}" | jq -r .emoji//empty | sed 's|"|\\"|g')"
     fi

     media="$(printf "%s\n" "$input_json" | jq -r .media//empty | sed 's|"|\\"|g')"
     if [ ! "$media" ];then
-      media="$(cat ".users/${user}" | jq -r .media//empty | sed 's|"|\\"|g')"
+      media="$(printf "%s\n" "${user_data}" | jq -r .media//empty | sed 's|"|\\"|g')"
     fi

     media_type="$(printf "%s\n" "$input_json" | jq -r .media_type//empty | tr -cd '0-9')"
     if [ ! "$media_type" ];then
-      media_type="$(cat ".users/${user}" | jq -r .media_type//empty)"
+      media_type="$(printf "%s\n" "${user_data}" | jq -r .media_type//empty)"
       if [ ! "$media_type" ];then
         media_type=0 #will help find buggy clients
       fi
@@ -82,10 +83,10 @@ case "$PATH_INFO" in

     uri="$(printf "%s\n" "$input_json" | jq -r .uri//empty | sed 's|"|\\"|g')"
     if [ ! "$uri" ];then
-      uri="$(cat ".users/${user}" | jq -r .uri//empty | sed 's|"|\\"|g')"
+      uri="$(printf "%s\n" "${user_data}" | jq -r .uri//empty | sed 's|"|\\"|g')"
     fi

-    json="$(cat <<-END
+    json="$(cat <<END
 {
   "avatar": {
       "original": "${avatar_original}"

-----END OF PAGE-----

-- Response ended

-- Page fetched on Sun Jun 2 14:15:52 2024