// Get current URL const url = window.location.href; // Get time function getCurrentUTCTimeFormatted() { const now = new Date(); const year = now.getUTCFullYear(); const month = String(now.getUTCMonth() + 1).padStart(2, '0'); const day = String(now.getUTCDate()).padStart(2, '0'); const hours = String(now.getUTCHours()).padStart(2, '0'); // Get the hours (00-23) in UTC const minutes = String(now.getUTCMinutes()).padStart(2, '0'); // minutes (00-59) in UTC const seconds = String(now.getUTCSeconds()).padStart(2, '0'); // seconds (00-59) in UTC return `${year}${month}${day}${hours}${minutes}${seconds}`; } const time = getCurrentUTCTimeFormatted(); // Get safe URL string function urlSafeF(url) { return url.replace(/[:\/?=@&(),+*%#]/g, '-'); } const urlsafe = urlSafeF(url); // Get DocType const doctype = document.doctype; let doctypeString = ""; if (doctype) { doctypeString = `\n`; } else { doctypeString = ""; } // Get webpage const output = doctypeString + document.documentElement.outerHTML; const blob = new Blob([output], { type: 'text/plain' }); const url1 = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url1; a.download = time + "-" + urlsafe; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url1); // Download URL to text file const blob1 = new Blob([url + "\n"], { type: 'text/plain' }); const blobUrl = URL.createObjectURL(blob1); const a1 = document.createElement('a'); a1.href = blobUrl; a1.download = time + "-" + urlsafe + ".txt"; document.body.appendChild(a1); a1.click(); document.body.removeChild(a1); URL.revokeObjectURL(blobUrl); read -p "url: " url; xdotool windowactivate $(xdotool search --name "Brave" | sort -n | head -1); sleep 0.1; xdotool key ctrl+t; sleep 0.1; xdotool type "$url"; xdotool key Return; sleep 2; xdotool key ctrl+shift+j; sleep 1; xdotool type "const base64String = \"Ly8gR2V0IGN1cnJlbnQgVVJMCmNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwoKLy8gR2V0IHRpbWUKZnVuY3Rpb24gZ2V0Q3VycmVudFVUQ1RpbWVGb3JtYXR0ZWQoKSB7CiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpOwogICAgY29uc3QgeWVhciA9IG5vdy5nZXRVVENGdWxsWWVhcigpOwogICAgY29uc3QgbW9udGggPSBTdHJpbmcobm93LmdldFVUQ01vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpOwogICAgY29uc3QgZGF5ID0gU3RyaW5nKG5vdy5nZXRVVENEYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7CiAgICBjb25zdCBob3VycyA9IFN0cmluZyhub3cuZ2V0VVRDSG91cnMoKSkucGFkU3RhcnQoMiwgJzAnKTsgLy8gR2V0IHRoZSBob3VycyAoMDAtMjMpIGluIFVUQwogICAgY29uc3QgbWludXRlcyA9IFN0cmluZyhub3cuZ2V0VVRDTWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpOyAvLyBtaW51dGVzICgwMC01OSkgaW4gVVRDCiAgICBjb25zdCBzZWNvbmRzID0gU3RyaW5nKG5vdy5nZXRVVENTZWNvbmRzKCkpLnBhZFN0YXJ0KDIsICcwJyk7IC8vIHNlY29uZHMgKDAwLTU5KSBpbiBVVEMKICAgIHJldHVybiBgJHt5ZWFyfSR7bW9udGh9JHtkYXl9JHtob3Vyc30ke21pbnV0ZXN9JHtzZWNvbmRzfWA7Cn0KY29uc3QgdGltZSA9IGdldEN1cnJlbnRVVENUaW1lRm9ybWF0dGVkKCk7CgovLyBHZXQgc2FmZSBVUkwgc3RyaW5nCmZ1bmN0aW9uIHVybFNhZmVGKHVybCkgewogICAgcmV0dXJuIHVybC5yZXBsYWNlKC9bOlwvPz1AJigpLCsqJSNdL2csICctJyk7Cn0KY29uc3QgdXJsc2FmZSA9IHVybFNhZmVGKHVybCk7CgovLyBHZXQgRG9jVHlwZQpjb25zdCBkb2N0eXBlID0gZG9jdW1lbnQuZG9jdHlwZTsKbGV0IGRvY3R5cGVTdHJpbmcgPSAiIjsKaWYgKGRvY3R5cGUpIHsKICAgIGRvY3R5cGVTdHJpbmcgPSBgPCFET0NUWVBFICR7ZG9jdHlwZS5uYW1lfT5cbmA7Cn0gZWxzZSB7CiAgICBkb2N0eXBlU3RyaW5nID0gIiI7Cn0KCi8vIEdldCB3ZWJwYWdlCmNvbnN0IG91dHB1dCA9IGRvY3R5cGVTdHJpbmcgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub3V0ZXJIVE1MOwpjb25zdCBibG9iID0gbmV3IEJsb2IoW291dHB1dF0sIHsgdHlwZTogJ3RleHQvcGxhaW4nIH0pOwpjb25zdCB1cmwxID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKYS5ocmVmID0gdXJsMTsKYS5kb3dubG9hZCA9IHRpbWUgKyAiLSIgKyB1cmxzYWZlOwpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOwphLmNsaWNrKCk7CmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7ClVSTC5yZXZva2VPYmplY3RVUkwodXJsMSk7CgovLyBEb3dubG9hZCBVUkwgdG8gdGV4dCBmaWxlCmNvbnN0IGJsb2IxID0gbmV3IEJsb2IoW3VybCArICJcbiJdLCB7IHR5cGU6ICd0ZXh0L3BsYWluJyB9KTsKY29uc3QgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYjEpOwpjb25zdCBhMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKYTEuaHJlZiA9IGJsb2JVcmw7CmExLmRvd25sb2FkID0gdGltZSArICItIiArIHVybHNhZmUgKyAiLnR4dCI7CmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYTEpOwphMS5jbGljaygpOwpkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGExKTsKVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKTs=\";const decodedString = atob(base64String);eval(decodedString);"; xdotool key Return # "xdotool type" = takes a while, so remove comments and stuff from the JS code export DISPLAY=:1; read -p "url: " url; xdotool windowactivate $(xdotool search --name "Brave" | sort -n | head -1); sleep 0.1; xdotool key ctrl+t; sleep 0.1; xdotool type "$url"; xdotool key Return; sleep 2; xdotool key ctrl+shift+j; sleep 1; echo "const base64String = \"Y29uc3QgdXJsPXdpbmRvdy5sb2NhdGlvbi5ocmVmO2Z1bmN0aW9uIGdldEN1cnJlbnRVVENUaW1lRm9ybWF0dGVkKCl7Y29uc3Qgbm93PW5ldyBEYXRlKCk7Y29uc3QgeWVhcj1ub3cuZ2V0VVRDRnVsbFllYXIoKTtjb25zdCBtb250aD1TdHJpbmcobm93LmdldFVUQ01vbnRoKCkrMSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IGRheT1TdHJpbmcobm93LmdldFVUQ0RhdGUoKSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IGhvdXJzPVN0cmluZyhub3cuZ2V0VVRDSG91cnMoKSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IG1pbnV0ZXM9U3RyaW5nKG5vdy5nZXRVVENNaW51dGVzKCkpLnBhZFN0YXJ0KDIsJzAnKTtjb25zdCBzZWNvbmRzPVN0cmluZyhub3cuZ2V0VVRDU2Vjb25kcygpKS5wYWRTdGFydCgyLCcwJyk7cmV0dXJuIGAke3llYXJ9JHttb250aH0ke2RheX0ke2hvdXJzfSR7bWludXRlc30ke3NlY29uZHN9YDt9Y29uc3QgdGltZT1nZXRDdXJyZW50VVRDVGltZUZvcm1hdHRlZCgpO2Z1bmN0aW9uIHVybFNhZmVGKHVybCl7cmV0dXJuIHVybC5yZXBsYWNlKC9bOlwvPz1AJigpLCsqJSNdL2csJy0nKTt9Y29uc3QgdXJsc2FmZSA9IHVybFNhZmVGKHVybCk7Y29uc3QgZG9jdHlwZT1kb2N1bWVudC5kb2N0eXBlO2xldCBkb2N0eXBlU3RyaW5nPSIiO2lmKGRvY3R5cGUpe2RvY3R5cGVTdHJpbmc9YDwhRE9DVFlQRSAke2RvY3R5cGUubmFtZX0+XG5gO31lbHNle2RvY3R5cGVTdHJpbmc9IiI7fWNvbnN0IG91dHB1dD1kb2N0eXBlU3RyaW5nK2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUw7Y29uc3QgYmxvYj1uZXcgQmxvYihbb3V0cHV0XSx7dHlwZTondGV4dC9wbGFpbid9KTtjb25zdCB1cmwxPVVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7Y29uc3QgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7YS5ocmVmPXVybDE7YS5kb3dubG9hZD10aW1lKyItIit1cmxzYWZlO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7YS5jbGljaygpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7VVJMLnJldm9rZU9iamVjdFVSTCh1cmwxKTtjb25zdCBibG9iMT1uZXcgQmxvYihbdXJsKyJcbiJdLHt0eXBlOid0ZXh0L3BsYWluJ30pO2NvbnN0IGJsb2JVcmw9VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iMSk7Y29uc3QgYTE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO2ExLmhyZWY9YmxvYlVybDthMS5kb3dubG9hZD10aW1lKyItIit1cmxzYWZlKyIudHh0Ijtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGExKTthMS5jbGljaygpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYTEpO1VSTC5yZXZva2VPYmplY3RVUkwoYmxvYlVybCk7\";const decodedString = atob(base64String);eval(decodedString);" | xsel -ib; xdotool key ctrl+shift+v; xdotool key Return # dev tools console: "allow pasting" was previously typed and entered # Turn off request from remote access to inputs KDE/Plasma popup $ sudo mv -n /usr/share/applications/org.freedesktop.impl.portal.desktop.kde.desktop /usr/share/applications/.org.freedesktop.impl.portal.desktop.kde.desktop # Doesn't work? # https://old.reddit.com/r/kde/comments/1dlspdf/how_to_remove_remote_control_request_prompt/ # Does work :) # https://invent.kde.org/plasma/xdg-desktop-portal-kde/-/merge_requests/326 # run $ flatpak permission-set kde-authorized remote-desktop org.kde.krdpserver yes # $ flatpak permission-set kde-authorized remote-desktop "" yes # No memento, for URLs containing "?" basepath="/srv/http/selenium"; export DISPLAY=:1; read -p "url: " url; xdotool windowactivate $(xdotool search --name "Brave" | sort -n | head -1); sleep 0.1; xdotool key ctrl+t; sleep 0.1; xdotool type "$url"; xdotool key Return; sleep 2; xdotool key ctrl+shift+j; sleep 2; echo "const base64String = \"Y29uc3QgdXJsPXdpbmRvdy5sb2NhdGlvbi5ocmVmO2Z1bmN0aW9uIGdldEN1cnJlbnRVVENUaW1lRm9ybWF0dGVkKCl7Y29uc3Qgbm93PW5ldyBEYXRlKCk7Y29uc3QgeWVhcj1ub3cuZ2V0VVRDRnVsbFllYXIoKTtjb25zdCBtb250aD1TdHJpbmcobm93LmdldFVUQ01vbnRoKCkrMSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IGRheT1TdHJpbmcobm93LmdldFVUQ0RhdGUoKSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IGhvdXJzPVN0cmluZyhub3cuZ2V0VVRDSG91cnMoKSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IG1pbnV0ZXM9U3RyaW5nKG5vdy5nZXRVVENNaW51dGVzKCkpLnBhZFN0YXJ0KDIsJzAnKTtjb25zdCBzZWNvbmRzPVN0cmluZyhub3cuZ2V0VVRDU2Vjb25kcygpKS5wYWRTdGFydCgyLCcwJyk7cmV0dXJuIGAke3llYXJ9JHttb250aH0ke2RheX0ke2hvdXJzfSR7bWludXRlc30ke3NlY29uZHN9YDt9Y29uc3QgdGltZT1nZXRDdXJyZW50VVRDVGltZUZvcm1hdHRlZCgpO2Z1bmN0aW9uIHVybFNhZmVGKHVybCl7cmV0dXJuIHVybC5yZXBsYWNlKC9bOlwvPz1AJigpLCsqJSNdL2csJy0nKTt9Y29uc3QgdXJsc2FmZSA9IHVybFNhZmVGKHVybCk7Y29uc3QgZG9jdHlwZT1kb2N1bWVudC5kb2N0eXBlO2xldCBkb2N0eXBlU3RyaW5nPSIiO2lmKGRvY3R5cGUpe2RvY3R5cGVTdHJpbmc9YDwhRE9DVFlQRSAke2RvY3R5cGUubmFtZX0+XG5gO31lbHNle2RvY3R5cGVTdHJpbmc9IiI7fWNvbnN0IG91dHB1dD1kb2N0eXBlU3RyaW5nK2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUw7Y29uc3QgYmxvYj1uZXcgQmxvYihbb3V0cHV0XSx7dHlwZTondGV4dC9wbGFpbid9KTtjb25zdCB1cmwxPVVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7Y29uc3QgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7YS5ocmVmPXVybDE7YS5kb3dubG9hZD10aW1lKyItIit1cmxzYWZlO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7YS5jbGljaygpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7VVJMLnJldm9rZU9iamVjdFVSTCh1cmwxKTtjb25zdCBibG9iMT1uZXcgQmxvYihbdXJsKyJcbiJdLHt0eXBlOid0ZXh0L3BsYWluJ30pO2NvbnN0IGJsb2JVcmw9VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iMSk7Y29uc3QgYTE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO2ExLmhyZWY9YmxvYlVybDthMS5kb3dubG9hZD10aW1lKyItIit1cmxzYWZlKyIudHh0Ijtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGExKTthMS5jbGljaygpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYTEpO1VSTC5yZXZva2VPYmplY3RVUkwoYmxvYlVybCk7\";const decodedString = atob(base64String);eval(decodedString);" | xsel -ib; xdotool key ctrl+shift+v; xdotool key Return; sleep 2; newest="$(ls /srv/http/selenium/dl -t | head -n2 | tail -n1)"; newpath="$basepath/dl/$newest"; cid="$(curl -sLk -XPOST -F file=@$newpath "https://10.0.0.231:5001/api/v0/add?cid-version=1&chunker=size-1048576&recursive=true&pin=false" | jq .Hash | sed "s/\"//g")"; curl -sLk -XPOST "https://10.0.0.231:5001/api/v0/files/cp?arg=/ipfs/$cid&arg=/created/cid/$cid"; time="$(echo $newest | sed "s/-.*//g")"; urlsafe="$(echo $newest | sed "s/^...............//g")"; url="$(cat "$basepath/dl/$time-$urlsafe.txt")"; arr="$(echo "$url" | sed "s/^https\?:\/\///g" | sed "s/\/.*//g" | sed "s/\./ /g")"; echo "$(echo "${arr[@]}" | tr ' ' '\n' | tac | tr '\n' ' ' | sed "s/ $//g" | sed "s/ /,/g")$(echo "$url" | sed "s/^https\?:\/\/[^\/]*/)/g" | tr "[:upper:]" "[:lower:]") $time {\"locator\": \"urn:ipfs/bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku/$cid\", \"status_code\": \"200\", \"mime_type\": \"text/html;charset=UTF-8\", \"original_uri\": \"$url\", \"title\": \"$(cat "$basepath/dl/$time-$urlsafe" | htmlq --text title)\"}" > $basepath/dl/$time-$urlsafe.cdxj # Upper to lowercase ('tr "[:upper:]" "[:lower:]"') is needed for the # com,example/case lookup thing, but replay incorrectly links to # example.com/case even if the original URL was example.com/CASE # Memento, for URLs not containing "?" basepath="/srv/http/selenium"; export DISPLAY=:1; read -p "url: " url; xdotool windowactivate $(xdotool search --name "Brave" | sort -n | head -1); sleep 0.1; xdotool key ctrl+t; sleep 0.1; xdotool type "$url"; xdotool key Return; sleep 2; xdotool key ctrl+shift+j; sleep 2; echo "const base64String = \"Y29uc3QgdXJsPXdpbmRvdy5sb2NhdGlvbi5ocmVmO2Z1bmN0aW9uIGdldEN1cnJlbnRVVENUaW1lRm9ybWF0dGVkKCl7Y29uc3Qgbm93PW5ldyBEYXRlKCk7Y29uc3QgeWVhcj1ub3cuZ2V0VVRDRnVsbFllYXIoKTtjb25zdCBtb250aD1TdHJpbmcobm93LmdldFVUQ01vbnRoKCkrMSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IGRheT1TdHJpbmcobm93LmdldFVUQ0RhdGUoKSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IGhvdXJzPVN0cmluZyhub3cuZ2V0VVRDSG91cnMoKSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IG1pbnV0ZXM9U3RyaW5nKG5vdy5nZXRVVENNaW51dGVzKCkpLnBhZFN0YXJ0KDIsJzAnKTtjb25zdCBzZWNvbmRzPVN0cmluZyhub3cuZ2V0VVRDU2Vjb25kcygpKS5wYWRTdGFydCgyLCcwJyk7cmV0dXJuIGAke3llYXJ9JHttb250aH0ke2RheX0ke2hvdXJzfSR7bWludXRlc30ke3NlY29uZHN9YDt9Y29uc3QgdGltZT1nZXRDdXJyZW50VVRDVGltZUZvcm1hdHRlZCgpO2Z1bmN0aW9uIHVybFNhZmVGKHVybCl7cmV0dXJuIHVybC5yZXBsYWNlKC9bOlwvPz1AJigpLCsqJSNdL2csJy0nKTt9Y29uc3QgdXJsc2FmZSA9IHVybFNhZmVGKHVybCk7Y29uc3QgZG9jdHlwZT1kb2N1bWVudC5kb2N0eXBlO2xldCBkb2N0eXBlU3RyaW5nPSIiO2lmKGRvY3R5cGUpe2RvY3R5cGVTdHJpbmc9YDwhRE9DVFlQRSAke2RvY3R5cGUubmFtZX0+XG5gO31lbHNle2RvY3R5cGVTdHJpbmc9IiI7fWNvbnN0IG91dHB1dD1kb2N0eXBlU3RyaW5nK2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUw7Y29uc3QgYmxvYj1uZXcgQmxvYihbb3V0cHV0XSx7dHlwZTondGV4dC9wbGFpbid9KTtjb25zdCB1cmwxPVVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7Y29uc3QgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7YS5ocmVmPXVybDE7YS5kb3dubG9hZD10aW1lKyItIit1cmxzYWZlO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7YS5jbGljaygpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7VVJMLnJldm9rZU9iamVjdFVSTCh1cmwxKTtjb25zdCBibG9iMT1uZXcgQmxvYihbdXJsKyJcbiJdLHt0eXBlOid0ZXh0L3BsYWluJ30pO2NvbnN0IGJsb2JVcmw9VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iMSk7Y29uc3QgYTE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO2ExLmhyZWY9YmxvYlVybDthMS5kb3dubG9hZD10aW1lKyItIit1cmxzYWZlKyIudHh0Ijtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGExKTthMS5jbGljaygpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYTEpO1VSTC5yZXZva2VPYmplY3RVUkwoYmxvYlVybCk7\";const decodedString = atob(base64String);eval(decodedString);" | xsel -ib; xdotool key ctrl+shift+v; xdotool key Return; sleep 2; newest="$(ls /srv/http/selenium/dl -t | head -n2 | tail -n1)"; newpath="$basepath/dl/$newest"; cid="$(curl -sLk -XPOST -F file=@$newpath "https://10.0.0.231:5001/api/v0/add?cid-version=1&chunker=size-1048576&recursive=true&pin=false" | jq .Hash | sed "s/\"//g")"; curl -sLk -XPOST "https://10.0.0.231:5001/api/v0/files/cp?arg=/ipfs/$cid&arg=/created/cid/$cid"; time="$(echo $newest | sed "s/-.*//g")"; urlsafe="$(echo $newest | sed "s/^...............//g")"; url="$(cat "$basepath/dl/$time-$urlsafe.txt")"; arr="$(echo "$url" | sed "s/^https\?:\/\///g" | sed "s/\/.*//g" | sed "s/\./ /g")"; echo "$(echo "${arr[@]}" | tr ' ' '\n' | tac | tr '\n' ' ' | sed "s/ $//g" | sed "s/ /,/g")$(echo "$url" | sed "s/^https\?:\/\/[^\/]*/)/g" | tr "[:upper:]" "[:lower:]") $time {\"locator\": \"urn:ipfs/bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku/$cid\", \"status_code\": \"200\", \"mime_type\": \"text/html;charset=UTF-8\", \"original_uri\": \"$url\", \"title\": \"$(cat "$basepath/dl/$time-$urlsafe" | htmlq --text title)\"}" > "$basepath/dl/$time-$urlsafe.cdxj"; membase="$basepath/dl/m/$(date +%s)"; urlpath="$(echo "$url" | sed "s/^https\?:\/\///g" | sed "s/\/$//g")"; if [[ "$url" =~ .*/$ ]]; then mkdir -p "$membase/memento/$time/$urlpath"; cp -n "$time-$urlsafe" "$membase/memento/$time/$urlpath/index.html"; else urlpathnolast="$(echo "$urlpath" | sed "s/\/[^\/]*$//g")"; lastpart="$(echo $urlpath | sed "s/.*\///g")"; mkdir -p "$membase/memento/$time/$urlpathnolast"; cp -n "$time-$urlsafe" "$membase/memento/$time/$urlpathnolast/$lastpart"; fi; cp -n "$basepath/dl/$time-$urlsafe.cdxj" "$membase"; cp -n "$basepath/dl/$time-$urlsafe.txt" "$membase"; cp -n "$basepath/dl/$time-$urlsafe" "$membase" The key is "charset utf-8;". /etc/nginx/sites-available/default ---> map $http_content_type $to { "~^text/html" "text/html; charset=utf-8"; } <--- /etc/nginx/conf.d/ipfs.conf ---> server { listen 443 ssl; listen [::]:443 ssl; server_name 10.0.0.229; ssl_certificate /etc/ssl/private/ssigned.crt; ssl_certificate_key /etc/ssl/private/ssigned.key; charset utf-8; location ~ ^/(ipfs|ipns) { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Content-Type $to; proxy_cache_bypass $http_upgrade; allow all; } } <--- # Memento, for URLs not containing "?" localip=10.0.0.231; basepath="/srv/http/selenium"; export DISPLAY=:1; flatpak permission-set kde-authorized remote-desktop org.kde.krdpserver yes; flatpak permission-set kde-authorized remote-desktop "" yes; read -p "url: " url; xdotool windowactivate $(xdotool search --name "Brave" | sort -n | head -1); sleep 0.1; xdotool key ctrl+t; sleep 0.1; xdotool type "$url"; xdotool key Delete; xdotool key Return; sleep 2; xdotool type " "; sleep 0.2; xdotool key ctrl+shift+j; sleep 2; echo "const base64String = \"Y29uc3QgdXJsPXdpbmRvdy5sb2NhdGlvbi5ocmVmO2Z1bmN0aW9uIGdldEN1cnJlbnRVVENUaW1lRm9ybWF0dGVkKCl7Y29uc3Qgbm93PW5ldyBEYXRlKCk7Y29uc3QgeWVhcj1ub3cuZ2V0VVRDRnVsbFllYXIoKTtjb25zdCBtb250aD1TdHJpbmcobm93LmdldFVUQ01vbnRoKCkrMSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IGRheT1TdHJpbmcobm93LmdldFVUQ0RhdGUoKSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IGhvdXJzPVN0cmluZyhub3cuZ2V0VVRDSG91cnMoKSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IG1pbnV0ZXM9U3RyaW5nKG5vdy5nZXRVVENNaW51dGVzKCkpLnBhZFN0YXJ0KDIsJzAnKTtjb25zdCBzZWNvbmRzPVN0cmluZyhub3cuZ2V0VVRDU2Vjb25kcygpKS5wYWRTdGFydCgyLCcwJyk7cmV0dXJuIGAke3llYXJ9JHttb250aH0ke2RheX0ke2hvdXJzfSR7bWludXRlc30ke3NlY29uZHN9YDt9Y29uc3QgdGltZT1nZXRDdXJyZW50VVRDVGltZUZvcm1hdHRlZCgpO2Z1bmN0aW9uIHVybFNhZmVGKHVybCl7cmV0dXJuIHVybC5yZXBsYWNlKC9bOlwvPz1AJigpLCsqJSNdL2csJy0nKTt9Y29uc3QgdXJsc2FmZSA9IHVybFNhZmVGKHVybCk7Y29uc3QgZG9jdHlwZT1kb2N1bWVudC5kb2N0eXBlO2xldCBkb2N0eXBlU3RyaW5nPSIiO2lmKGRvY3R5cGUpe2RvY3R5cGVTdHJpbmc9YDwhRE9DVFlQRSAke2RvY3R5cGUubmFtZX0+XG5gO31lbHNle2RvY3R5cGVTdHJpbmc9IiI7fWNvbnN0IG91dHB1dD1kb2N0eXBlU3RyaW5nK2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUw7Y29uc3QgYmxvYj1uZXcgQmxvYihbb3V0cHV0XSx7dHlwZTondGV4dC9wbGFpbid9KTtjb25zdCB1cmwxPVVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7Y29uc3QgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7YS5ocmVmPXVybDE7YS5kb3dubG9hZD10aW1lKyItIit1cmxzYWZlO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7YS5jbGljaygpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7VVJMLnJldm9rZU9iamVjdFVSTCh1cmwxKTtjb25zdCBibG9iMT1uZXcgQmxvYihbdXJsKyJcbiJdLHt0eXBlOid0ZXh0L3BsYWluJ30pO2NvbnN0IGJsb2JVcmw9VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iMSk7Y29uc3QgYTE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO2ExLmhyZWY9YmxvYlVybDthMS5kb3dubG9hZD10aW1lKyItIit1cmxzYWZlKyIudHh0Ijtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGExKTthMS5jbGljaygpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYTEpO1VSTC5yZXZva2VPYmplY3RVUkwoYmxvYlVybCk7\";const decodedString = atob(base64String);eval(decodedString);" | xsel -ib; xdotool key ctrl+shift+v; xdotool key Return; sleep 2; newest="$(ls /srv/http/selenium/dl -t | head -n2 | tail -n1)"; newpath="$basepath/dl/$newest"; cid="$(curl -sLk -XPOST -F file=@$newpath "https://$localip:5001/api/v0/add?cid-version=1&chunker=size-1048576&recursive=true&pin=false" | jq .Hash | sed "s/\"//g")"; curl -sLk -XPOST "https://$localip:5001/api/v0/files/cp?arg=/ipfs/$cid&arg=/created/cid/$cid"; time="$(echo $newest | sed "s/-.*//g")"; urlsafe="$(echo $newest | sed "s/^...............//g")"; url="$(cat "$basepath/dl/$time-$urlsafe.txt")"; arr="$(echo "$url" | sed "s/^https\?:\/\///g" | sed "s/\/.*//g" | sed "s/\./ /g")"; echo "$(echo "${arr[@]}" | tr ' ' '\n' | tac | tr '\n' ' ' | sed "s/ $//g" | sed "s/ /,/g")$(echo "$url" | sed "s/^https\?:\/\/[^\/]*/)/g" | tr "[:upper:]" "[:lower:]") $time {\"locator\": \"urn:ipfs/bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku/$cid\", \"status_code\": \"200\", \"mime_type\": \"text/html;charset=UTF-8\", \"original_uri\": \"$url\", \"title\": \"$(cat "$basepath/dl/$time-$urlsafe" | htmlq --text title)\"}" > "$basepath/dl/$time-$urlsafe.cdxj"; membase="$basepath/dl/m/$(date +%s)"; urlpath="$(echo "$url" | sed "s/^https\?:\/\///g" | sed "s/\/$//g")"; if [[ "$url" =~ .*/$ ]]; then mkdir -p "$membase/memento/$time/$urlpath"; cp -n "$basepath/dl/$time-$urlsafe" "$membase/memento/$time/$urlpath/index.html"; else urlpathnolast="$(echo "$urlpath" | sed "s/\/[^\/]*$//g")"; lastpart="$(echo $urlpath | sed "s/.*\///g")"; mkdir -p "$membase/memento/$time/$urlpathnolast"; cp -n "$basepath/dl/$time-$urlsafe" "$membase/memento/$time/$urlpathnolast/$lastpart"; fi; cp -n "$basepath/dl/$time-$urlsafe.cdxj" "$membase"; cp -n "$basepath/dl/$time-$urlsafe.txt" "$membase"; cp -n "$basepath/dl/$time-$urlsafe" "$membase"; filesf() { basedir="$membase"; basedirlen=$(echo "$basedir" | wc --bytes); find "$basedir" -type f | basedirlen="$basedirlen" xargs -d "\n" sh -c 'for args do nobasedir=$(echo "$args" | sed -E "s/^.{$basedirlen}//g"); echo " -F "file=@"\"$args\";filename=\"$nobasedir\"" | tr -d \\n; done' _; }; cid="$(curl -sLk -XPOST -H "Content-Type: multipart/form-data" $(filesf) "https://$localip:5001/api/v0/add?cid-version=1&chunker=size-1048576&recursive=true&wrap-with-directory=true&pin=false" | tail -n1 | jq .Hash | sed "s/\"//g")"; curl -sLk -XPOST "https://$localip:5001/api/v0/files/cp?arg=/ipfs/$cid/memento/$time&arg=/memento/$time"; curl -sLk -XPOST "https://$localip:5001/api/v0/files/cp?arg=/ipfs/$cid&arg=/memento/srccid/$cid"; curl -sLk https://$localip/cgi-bin/taildh?id=$cid; echo $cid; echo $cid | xsel -ib # filesf fails with " " in filename # load page as max zoomed out and scroll down (28 space-bar scrolls) Previous version of this file, "devtools.txt": /ipfs/bafkreihax245t36jyatxf6jeiemgcsq3hurnveyxxoretxurblgay7uveq #!/bin/bash localip=10.0.0.231; basepath="/srv/http/selenium"; export DISPLAY=:1; flatpak permission-set kde-authorized remote-desktop org.kde.krdpserver yes; flatpak permission-set kde-authorized remote-desktop "" yes; read -p "url: " url; xdotool windowactivate $(xdotool search --name "Brave" | sort -n | head -1); sleep 0.1; xdotool key ctrl+t; sleep 0.1; xdotool type "$url"; xdotool key Delete; xdotool key Return; sleep 2; xdotool type " "; sleep 0.2; xdotool key ctrl+shift+j; sleep 2; echo "const base64String = \"Y29uc3QgdXJsPXdpbmRvdy5sb2NhdGlvbi5ocmVmO2Z1bmN0aW9uIGdldEN1cnJlbnRVVENUaW1lRm9ybWF0dGVkKCl7Y29uc3Qgbm93PW5ldyBEYXRlKCk7Y29uc3QgeWVhcj1ub3cuZ2V0VVRDRnVsbFllYXIoKTtjb25zdCBtb250aD1TdHJpbmcobm93LmdldFVUQ01vbnRoKCkrMSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IGRheT1TdHJpbmcobm93LmdldFVUQ0RhdGUoKSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IGhvdXJzPVN0cmluZyhub3cuZ2V0VVRDSG91cnMoKSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IG1pbnV0ZXM9U3RyaW5nKG5vdy5nZXRVVENNaW51dGVzKCkpLnBhZFN0YXJ0KDIsJzAnKTtjb25zdCBzZWNvbmRzPVN0cmluZyhub3cuZ2V0VVRDU2Vjb25kcygpKS5wYWRTdGFydCgyLCcwJyk7cmV0dXJuIGAke3llYXJ9JHttb250aH0ke2RheX0ke2hvdXJzfSR7bWludXRlc30ke3NlY29uZHN9YDt9Y29uc3QgdGltZT1nZXRDdXJyZW50VVRDVGltZUZvcm1hdHRlZCgpO2Z1bmN0aW9uIHVybFNhZmVGKHVybCl7cmV0dXJuIHVybC5yZXBsYWNlKC9bOlwvPz1AJigpLCsqJSNdL2csJy0nKTt9Y29uc3QgdXJsc2FmZSA9IHVybFNhZmVGKHVybCk7Y29uc3QgZG9jdHlwZT1kb2N1bWVudC5kb2N0eXBlO2xldCBkb2N0eXBlU3RyaW5nPSIiO2lmKGRvY3R5cGUpe2RvY3R5cGVTdHJpbmc9YDwhRE9DVFlQRSAke2RvY3R5cGUubmFtZX0+XG5gO31lbHNle2RvY3R5cGVTdHJpbmc9IiI7fWNvbnN0IG91dHB1dD1kb2N0eXBlU3RyaW5nK2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUw7Y29uc3QgYmxvYj1uZXcgQmxvYihbb3V0cHV0XSx7dHlwZTondGV4dC9wbGFpbid9KTtjb25zdCB1cmwxPVVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7Y29uc3QgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7YS5ocmVmPXVybDE7YS5kb3dubG9hZD10aW1lKyItIit1cmxzYWZlO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7YS5jbGljaygpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7VVJMLnJldm9rZU9iamVjdFVSTCh1cmwxKTtjb25zdCBibG9iMT1uZXcgQmxvYihbdXJsKyJcbiJdLHt0eXBlOid0ZXh0L3BsYWluJ30pO2NvbnN0IGJsb2JVcmw9VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iMSk7Y29uc3QgYTE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO2ExLmhyZWY9YmxvYlVybDthMS5kb3dubG9hZD10aW1lKyItIit1cmxzYWZlKyIudHh0Ijtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGExKTthMS5jbGljaygpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYTEpO1VSTC5yZXZva2VPYmplY3RVUkwoYmxvYlVybCk7\";const decodedString = atob(base64String);eval(decodedString);" | xsel -ib; xdotool key ctrl+shift+v; xdotool key Return; sleep 2; newest="$(ls /srv/http/selenium/dl -t | head -n2 | tail -n1)"; newpath="$basepath/dl/$newest"; cid="$(curl -sLk -XPOST -F file=@$newpath "https://$localip:5001/api/v0/add?cid-version=1&chunker=size-1048576&recursive=true&pin=false" | jq .Hash | sed "s/\"//g")"; curl -sLk -XPOST "https://$localip:5001/api/v0/files/cp?arg=/ipfs/$cid&arg=/created/cid/$cid"; time="$(echo $newest | sed "s/-.*//g")"; urlsafe="$(echo $newest | sed "s/^...............//g")"; url="$(cat "$basepath/dl/$time-$urlsafe.txt")"; arr="$(echo "$url" | sed "s/^https\?:\/\///g" | sed "s/\/.*//g" | sed "s/\./ /g")"; echo "$(echo "${arr[@]}" | tr ' ' '\n' | tac | tr '\n' ' ' | sed "s/ $//g" | sed "s/ /,/g")$(echo "$url" | sed "s/^https\?:\/\/[^\/]*/)/g" | tr "[:upper:]" "[:lower:]") $time {\"locator\": \"urn:ipfs/bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku/$cid\", \"status_code\": \"200\", \"mime_type\": \"text/html;charset=UTF-8\", \"original_uri\": \"$url\", \"title\": \"$(cat "$basepath/dl/$time-$urlsafe" | htmlq --text title)\"}" > "$basepath/dl/$time-$urlsafe.cdxj"; membase="$basepath/dl/m/$(date +%s)"; urlpath="$(echo "$url" | sed "s/^https\?:\/\///g" | sed "s/\/$//g")"; if [[ "$url" =~ .*/$ ]]; then mkdir -p "$membase/memento/$time/$urlpath"; cp -n "$basepath/dl/$time-$urlsafe" "$membase/memento/$time/$urlpath/index.html"; else urlpathnolast="$(echo "$urlpath" | sed "s/\/[^\/]*$//g")"; lastpart="$(echo $urlpath | sed "s/.*\///g")"; mkdir -p "$membase/memento/$time/$urlpathnolast"; cp -n "$basepath/dl/$time-$urlsafe" "$membase/memento/$time/$urlpathnolast/$lastpart"; fi cp -n "$basepath/dl/$time-$urlsafe.cdxj" "$membase"; cp -n "$basepath/dl/$time-$urlsafe.txt" "$membase"; cp -n "$basepath/dl/$time-$urlsafe" "$membase"; filesf() { basedir="$membase"; basedirlen=$(echo "$basedir" | wc --bytes); find "$basedir" -type f | basedirlen="$basedirlen" xargs -d "\n" sh -c 'for args do nobasedir=$(echo "$args" | sed -E "s/^.{$basedirlen}//g"); echo " -F "file=@"\"$args\";filename=\"$nobasedir\"" | tr -d \\n; done' _; }; cid="$(curl -sLk -XPOST -H "Content-Type: multipart/form-data" $(filesf) "https://$localip:5001/api/v0/add?cid-version=1&chunker=size-1048576&recursive=true&wrap-with-directory=true&pin=false" | tail -n1 | jq .Hash | sed "s/\"//g")"; curl -sLk -XPOST "https://$localip:5001/api/v0/files/cp?arg=/ipfs/$cid/memento/$time&arg=/memento/$time"; curl -sLk -XPOST "https://$localip:5001/api/v0/files/cp?arg=/ipfs/$cid&arg=/memento/srccid/$cid"; curl -sLk https://$localip/cgi-bin/taildh?id=$cid; echo $cid; echo $cid | xsel -ib; bafkreiep4bgox2ykh2gwqyysr47tgyzaqhsgpsdjfk65i5wwhqtpzbxcma # No memento, for URLs containing "?" localip=localhost; basepath="/srv/http/selenium"; export DISPLAY=:1; read -p "url: " url; xdotool windowactivate $(xdotool search --name "Brave" | sort -n | head -1); sleep 0.1; xdotool key ctrl+t; sleep 0.1; xdotool type "$url"; xdotool key Return; sleep 2; xdotool key ctrl+shift+j; sleep 2; echo "const base64String = \"Y29uc3QgdXJsPXdpbmRvdy5sb2NhdGlvbi5ocmVmO2Z1bmN0aW9uIGdldEN1cnJlbnRVVENUaW1lRm9ybWF0dGVkKCl7Y29uc3Qgbm93PW5ldyBEYXRlKCk7Y29uc3QgeWVhcj1ub3cuZ2V0VVRDRnVsbFllYXIoKTtjb25zdCBtb250aD1TdHJpbmcobm93LmdldFVUQ01vbnRoKCkrMSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IGRheT1TdHJpbmcobm93LmdldFVUQ0RhdGUoKSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IGhvdXJzPVN0cmluZyhub3cuZ2V0VVRDSG91cnMoKSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IG1pbnV0ZXM9U3RyaW5nKG5vdy5nZXRVVENNaW51dGVzKCkpLnBhZFN0YXJ0KDIsJzAnKTtjb25zdCBzZWNvbmRzPVN0cmluZyhub3cuZ2V0VVRDU2Vjb25kcygpKS5wYWRTdGFydCgyLCcwJyk7cmV0dXJuIGAke3llYXJ9JHttb250aH0ke2RheX0ke2hvdXJzfSR7bWludXRlc30ke3NlY29uZHN9YDt9Y29uc3QgdGltZT1nZXRDdXJyZW50VVRDVGltZUZvcm1hdHRlZCgpO2Z1bmN0aW9uIHVybFNhZmVGKHVybCl7cmV0dXJuIHVybC5yZXBsYWNlKC9bOlwvPz1AJigpLCsqJSNdL2csJy0nKTt9Y29uc3QgdXJsc2FmZSA9IHVybFNhZmVGKHVybCk7Y29uc3QgZG9jdHlwZT1kb2N1bWVudC5kb2N0eXBlO2xldCBkb2N0eXBlU3RyaW5nPSIiO2lmKGRvY3R5cGUpe2RvY3R5cGVTdHJpbmc9YDwhRE9DVFlQRSAke2RvY3R5cGUubmFtZX0+XG5gO31lbHNle2RvY3R5cGVTdHJpbmc9IiI7fWNvbnN0IG91dHB1dD1kb2N0eXBlU3RyaW5nK2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUw7Y29uc3QgYmxvYj1uZXcgQmxvYihbb3V0cHV0XSx7dHlwZTondGV4dC9wbGFpbid9KTtjb25zdCB1cmwxPVVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7Y29uc3QgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7YS5ocmVmPXVybDE7YS5kb3dubG9hZD10aW1lKyItIit1cmxzYWZlO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7YS5jbGljaygpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7VVJMLnJldm9rZU9iamVjdFVSTCh1cmwxKTtjb25zdCBibG9iMT1uZXcgQmxvYihbdXJsKyJcbiJdLHt0eXBlOid0ZXh0L3BsYWluJ30pO2NvbnN0IGJsb2JVcmw9VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iMSk7Y29uc3QgYTE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO2ExLmhyZWY9YmxvYlVybDthMS5kb3dubG9hZD10aW1lKyItIit1cmxzYWZlKyIudHh0Ijtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGExKTthMS5jbGljaygpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYTEpO1VSTC5yZXZva2VPYmplY3RVUkwoYmxvYlVybCk7\";const decodedString = atob(base64String);eval(decodedString);" | xsel -ib; xdotool key ctrl+shift+v; xdotool key Return; sleep 2; newest="$(ls /srv/http/selenium/dl -t | head -n2 | tail -n1)"; newpath="$basepath/dl/$newest"; cid="$(curl -sLk -XPOST -F file=@$newpath "http://$localip:5001/api/v0/add?cid-version=1&chunker=size-1048576&recursive=true&pin=false" | jq .Hash | sed "s/\"//g")"; curl -sLk -XPOST "http://$localip:5001/api/v0/files/cp?arg=/ipfs/$cid&arg=/created/cid/$cid"; time="$(echo $newest | sed "s/-.*//g")"; urlsafe="$(echo $newest | sed "s/^...............//g")"; url="$(cat "$basepath/dl/$time-$urlsafe.txt")"; arr="$(echo "$url" | sed "s/^https\?:\/\///g" | sed "s/\/.*//g" | sed "s/\./ /g")"; echo "$(echo "${arr[@]}" | tr ' ' '\n' | tac | tr '\n' ' ' | sed "s/ $//g" | sed "s/ /,/g")$(echo "$url" | sed "s/^https\?:\/\/[^\/]*/)/g" | tr "[:upper:]" "[:lower:]") $time {\"locator\": \"urn:ipfs/bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku/$cid\", \"status_code\": \"200\", \"mime_type\": \"text/html;charset=UTF-8\", \"original_uri\": \"$url\", \"title\": \"$(cat "$basepath/dl/$time-$urlsafe" | htmlq --text title)\"}" > $basepath/dl/$time-$urlsafe.cdxj # No memento, for URLs containing "?" # If www.example.com/path, remove "www." because ipwb will lookup "com,example)/path" with no www. localip=localhost; basepath="/srv/http/selenium"; export DISPLAY=:1; read -p "url: " url; xdotool windowactivate $(xdotool search --name "Brave" | sort -n | head -1); sleep 0.1; xdotool key ctrl+t; sleep 0.1; xdotool type "$url"; xdotool key Return; sleep 2; xdotool key ctrl+shift+j; sleep 2; xdotool key Tab; sleep 2; echo "const base64String = \"Y29uc3QgdXJsPXdpbmRvdy5sb2NhdGlvbi5ocmVmO2Z1bmN0aW9uIGdldEN1cnJlbnRVVENUaW1lRm9ybWF0dGVkKCl7Y29uc3Qgbm93PW5ldyBEYXRlKCk7Y29uc3QgeWVhcj1ub3cuZ2V0VVRDRnVsbFllYXIoKTtjb25zdCBtb250aD1TdHJpbmcobm93LmdldFVUQ01vbnRoKCkrMSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IGRheT1TdHJpbmcobm93LmdldFVUQ0RhdGUoKSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IGhvdXJzPVN0cmluZyhub3cuZ2V0VVRDSG91cnMoKSkucGFkU3RhcnQoMiwnMCcpO2NvbnN0IG1pbnV0ZXM9U3RyaW5nKG5vdy5nZXRVVENNaW51dGVzKCkpLnBhZFN0YXJ0KDIsJzAnKTtjb25zdCBzZWNvbmRzPVN0cmluZyhub3cuZ2V0VVRDU2Vjb25kcygpKS5wYWRTdGFydCgyLCcwJyk7cmV0dXJuIGAke3llYXJ9JHttb250aH0ke2RheX0ke2hvdXJzfSR7bWludXRlc30ke3NlY29uZHN9YDt9Y29uc3QgdGltZT1nZXRDdXJyZW50VVRDVGltZUZvcm1hdHRlZCgpO2Z1bmN0aW9uIHVybFNhZmVGKHVybCl7cmV0dXJuIHVybC5yZXBsYWNlKC9bOlwvPz1AJigpLCsqJSNdL2csJy0nKTt9Y29uc3QgdXJsc2FmZSA9IHVybFNhZmVGKHVybCk7Y29uc3QgZG9jdHlwZT1kb2N1bWVudC5kb2N0eXBlO2xldCBkb2N0eXBlU3RyaW5nPSIiO2lmKGRvY3R5cGUpe2RvY3R5cGVTdHJpbmc9YDwhRE9DVFlQRSAke2RvY3R5cGUubmFtZX0+XG5gO31lbHNle2RvY3R5cGVTdHJpbmc9IiI7fWNvbnN0IG91dHB1dD1kb2N0eXBlU3RyaW5nK2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUw7Y29uc3QgYmxvYj1uZXcgQmxvYihbb3V0cHV0XSx7dHlwZTondGV4dC9wbGFpbid9KTtjb25zdCB1cmwxPVVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7Y29uc3QgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7YS5ocmVmPXVybDE7YS5kb3dubG9hZD10aW1lKyItIit1cmxzYWZlO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7YS5jbGljaygpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7VVJMLnJldm9rZU9iamVjdFVSTCh1cmwxKTtjb25zdCBibG9iMT1uZXcgQmxvYihbdXJsKyJcbiJdLHt0eXBlOid0ZXh0L3BsYWluJ30pO2NvbnN0IGJsb2JVcmw9VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iMSk7Y29uc3QgYTE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO2ExLmhyZWY9YmxvYlVybDthMS5kb3dubG9hZD10aW1lKyItIit1cmxzYWZlKyIudHh0Ijtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGExKTthMS5jbGljaygpO2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYTEpO1VSTC5yZXZva2VPYmplY3RVUkwoYmxvYlVybCk7\";const decodedString = atob(base64String);eval(decodedString);" | xsel -ib; xdotool key ctrl+shift+v; xdotool key Return; sleep 2; newest="$(ls /srv/http/selenium/dl -t | head -n2 | tail -n1)"; newpath="$basepath/dl/$newest"; cid="$(curl -sLk -XPOST -F file=@$newpath "http://$localip:5001/api/v0/add?cid-version=1&chunker=size-1048576&recursive=true&pin=false" | jq .Hash | sed "s/\"//g")"; curl -sLk -XPOST "http://$localip:5001/api/v0/files/cp?arg=/ipfs/$cid&arg=/created/cid/$cid"; time="$(echo $newest | sed "s/-.*//g")"; urlsafe="$(echo $newest | sed "s/^...............//g")"; url="$(cat "$basepath/dl/$time-$urlsafe.txt")"; arr="$(echo "$url" | sed "s/^https\?:\/\///g" | sed "s/\/.*//g" | sed "s/\./ /g")"; echo "$(echo "${arr[@]}" | sed "s/^www //g" | tr ' ' '\n' | tac | tr '\n' ' ' | sed "s/ $//g" | sed "s/ /,/g")$(echo "$url" | sed "s/^https\?:\/\/[^\/]*/)/g" | tr "[:upper:]" "[:lower:]") $time {\"locator\": \"urn:ipfs/bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku/$cid\", \"status_code\": \"200\", \"mime_type\": \"text/html;charset=UTF-8\", \"original_uri\": \"$url\", \"title\": \"$(cat "$basepath/dl/$time-$urlsafe" | htmlq --text title)\"}" > $basepath/dl/$time-$urlsafe.cdxj; echo $basepath/dl/$time-$urlsafe.cdxj