-- 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:
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
--- 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
--- 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