add files - www.codemadness.org - www.codemadness.org saait content files (HTM) git clone git://git.codemadness.org/www.codemadness.org (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 47022e7faf705fa6125141b4c287ad0cd6b33b2a (DIR) parent b161469566524336ec669af12ec1fd5c312dfdf0 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org> Date: Thu, 11 Aug 2022 13:43:59 +0200 add files Diffstat: A output/2fa-totp.html | 98 +++++++++++++++++++++++++++++++ A output/2fa-totp.md | 57 +++++++++++++++++++++++++++++++ A output/downloads/2fa/qr.png | 0 A output/openbsd-riscv64-vm.html | 128 +++++++++++++++++++++++++++++++ A output/openbsd-riscv64-vm.md | 79 +++++++++++++++++++++++++++++++ A output/phlog/2fa-totp | 65 +++++++++++++++++++++++++++++++ A output/phlog/openbsd-riscv64-vm | 87 +++++++++++++++++++++++++++++++ A output/phlog/rss | 252 +++++++++++++++++++++++++++++++ A output/phlog/todo | 2 ++ A output/phlog/todo-application | 104 +++++++++++++++++++++++++++++++ A output/phlog/totp | 65 +++++++++++++++++++++++++++++++ A output/todo-application.html | 126 +++++++++++++++++++++++++++++++ A output/todo-application.md | 96 +++++++++++++++++++++++++++++++ A output/todo.html | 2 ++ A output/totp.html | 98 +++++++++++++++++++++++++++++++ A output/totp.md | 57 +++++++++++++++++++++++++++++++ A pages/todo-application.cfg | 6 ++++++ A pages/todo-application.md | 96 +++++++++++++++++++++++++++++++ A pages/totp.cfg | 6 ++++++ A pages/totp.md | 57 +++++++++++++++++++++++++++++++ 20 files changed, 1481 insertions(+), 0 deletions(-) --- (DIR) diff --git a/output/2fa-totp.html b/output/2fa-totp.html @@ -0,0 +1,98 @@ +<!DOCTYPE html> +<html dir="ltr" lang="en"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <meta http-equiv="Content-Language" content="en" /> + <meta name="viewport" content="width=device-width" /> + <meta name="keywords" content="oauthtool, zbarimg, totp, 2FA, authenticator" /> + <meta name="description" content="Using 2FA TOTP without crappy authenticator apps" /> + <meta name="author" content="Hiltjo" /> + <meta name="generator" content="Static content generated using saait: https://codemadness.org/saait.html" /> + <title>2FA TOTP without crappy authenticator apps - Codemadness</title> + <link rel="stylesheet" href="style.css" type="text/css" media="screen" /> + <link rel="stylesheet" href="print.css" type="text/css" media="print" /> + <link rel="alternate" href="atom.xml" type="application/atom+xml" title="Codemadness Atom Feed" /> + <link rel="alternate" href="atom_content.xml" type="application/atom+xml" title="Codemadness Atom Feed with content" /> + <link rel="icon" href="/favicon.png" type="image/png" /> +</head> +<body> + <nav id="menuwrap"> + <table id="menu" width="100%" border="0"> + <tr> + <td id="links" align="left"> + <a href="index.html">Blog</a> | + <a href="/git/" title="Git repository with some of my projects">Git</a> | + <a href="/releases/">Releases</a> | + <a href="gopher://codemadness.org">Gopherhole</a> + </td> + <td id="links-contact" align="right"> + <span class="hidden"> | </span> + <a href="feeds.html">Feeds</a> | + <a href="pgp.asc">PGP</a> | + <a href="mailto:hiltjo@AT@codemadness.DOT.org">Mail</a> + </td> + </tr> + </table> + </nav> + <hr class="hidden" /> + <main id="mainwrap"> + <div id="main"> + <article> +<header> + <h1>2FA TOTP without crappy authenticator apps</h1> + <p> + <strong>Last modification on </strong> <time>2022-03-23</time> + </p> +</header> + +<p>This describes how to use 2FA without using crappy authenticator "apps" or a +mobile device.</p> +<h2>Install</h2> +<p>On OpenBSD:</p> +<pre><code>pkg_add oath-toolkit zbar +</code></pre> +<ul> +<li>oath-toolkit is used to generate the digits based on the secret key.</li> +<li>zbar is used to scan the QR code text.</li> +</ul> +<h2>Steps</h2> +<p>Save the QR code image from the authenticator app, website to an image file. +Scan the QR code text from the image:</p> +<pre><code>zbarimg image.png +</code></pre> +<p>An example QR code:</p> +<p><img src="downloads/2fa/qr.png" alt="QR code example" /></p> +<p>The output is typically something like:</p> +<pre><code>QR-Code:otpauth://totp/Example:someuser@codemadness.org?secret=SECRETKEY&issuer=Codemadness +</code></pre> +<p>You only need to scan this QR-code for the secret key once. +Make sure to store the secret key in a private safe place and don't show it to +anyone else.</p> +<p>Using the secret key the following command outputs a 6-digit code by default. +In this example we also assume the key is base32-encoded. +There can be other parameters and options, this is documented in the Yubico URI +string format reference below.</p> +<p>Command:</p> +<pre><code>oathtool --totp -b SOMEKEY +</code></pre> +<ul> +<li>The --totp option uses the time-variant TOTP mode, by default it uses HMAC SHA1.</li> +<li>The -b option use base32 encoding of KEY instead of hex.</li> +</ul> +<p>Tip: you can create a script that automatically puts the digits in the +clipboard, for example:</p> +<pre><code>oathtool --totp -b SOMEKEY | xclip +</code></pre> +<h2>References</h2> +<ul> +<li><a href="https://linux.die.net/man/1/zbarimg">zbarimg(1) man page</a></li> +<li><a href="https://www.nongnu.org/oath-toolkit/man-oathtool.html">oathtool(1) man page</a></li> +<li><a href="https://datatracker.ietf.org/doc/html/rfc6238">RFC6238 - TOTP: Time-Based One-Time Password Algorithm</a></li> +<li><a href="https://docs.yubico.com/yesdk/users-manual/application-oath/uri-string-format.html">Yucibo.com - otpauth URI string format</a></li> +</ul> + + </article> + </div> + </main> +</body> +</html> (DIR) diff --git a/output/2fa-totp.md b/output/2fa-totp.md @@ -0,0 +1,57 @@ +This describes how to use 2FA without using crappy authenticator "apps" or a +mobile device. + + +## Install + +On OpenBSD: + + pkg_add oath-toolkit zbar + +* oath-toolkit is used to generate the digits based on the secret key. +* zbar is used to scan the QR code text. + + +## Steps + +Save the QR code image from the authenticator app, website to an image file. +Scan the QR code text from the image: + + zbarimg image.png + +An example QR code: + +![QR code example](https://codemadness.org/downloads/2fa/qr.png) + +The output is typically something like: + + QR-Code:otpauth://totp/Example:someuser@codemadness.org?secret=SECRETKEY&issuer=Codemadness + +You only need to scan this QR-code for the secret key once. +Make sure to store the secret key in a private safe place and don't show it to +anyone else. + +Using the secret key the following command outputs a 6-digit code by default. +In this example we also assume the key is base32-encoded. +There can be other parameters and options, this is documented in the Yubico URI +string format reference below. + +Command: + + oathtool --totp -b SOMEKEY + +* The --totp option uses the time-variant TOTP mode, by default it uses HMAC SHA1. +* The -b option use base32 encoding of KEY instead of hex. + +Tip: you can create a script that automatically puts the digits in the +clipboard, for example: + + oathtool --totp -b SOMEKEY | xclip + + +## References + +* [zbarimg(1) man page](https://linux.die.net/man/1/zbarimg) +* [oathtool(1) man page](https://www.nongnu.org/oath-toolkit/man-oathtool.html) +* [RFC6238 - TOTP: Time-Based One-Time Password Algorithm](https://datatracker.ietf.org/doc/html/rfc6238) +* [Yucibo.com - otpauth URI string format](https://docs.yubico.com/yesdk/users-manual/application-oath/uri-string-format.html) (DIR) diff --git a/output/downloads/2fa/qr.png b/output/downloads/2fa/qr.png Binary files differ. (DIR) diff --git a/output/openbsd-riscv64-vm.html b/output/openbsd-riscv64-vm.html @@ -0,0 +1,128 @@ +<!DOCTYPE html> +<html dir="ltr" lang="en"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <meta http-equiv="Content-Language" content="en" /> + <meta name="viewport" content="width=device-width" /> + <meta name="keywords" content="OpenBSD, RISCV64, RISC-V, QEMU, vm" /> + <meta name="description" content="Setup an OpenBSD RISCV-64 VM in QEMU" /> + <meta name="author" content="Hiltjo" /> + <meta name="generator" content="Static content generated using saait: https://codemadness.org/saait.html" /> + <title>Setup an OpenBSD RISCV64 VM in QEMU - Codemadness</title> + <link rel="stylesheet" href="style.css" type="text/css" media="screen" /> + <link rel="stylesheet" href="print.css" type="text/css" media="print" /> + <link rel="alternate" href="atom.xml" type="application/atom+xml" title="Codemadness Atom Feed" /> + <link rel="alternate" href="atom_content.xml" type="application/atom+xml" title="Codemadness Atom Feed with content" /> + <link rel="icon" href="/favicon.png" type="image/png" /> +</head> +<body> + <nav id="menuwrap"> + <table id="menu" width="100%" border="0"> + <tr> + <td id="links" align="left"> + <a href="index.html">Blog</a> | + <a href="/git/" title="Git repository with some of my projects">Git</a> | + <a href="/releases/">Releases</a> | + <a href="gopher://codemadness.org">Gopherhole</a> + </td> + <td id="links-contact" align="right"> + <span class="hidden"> | </span> + <a href="feeds.html">Feeds</a> | + <a href="pgp.asc">PGP</a> | + <a href="mailto:hiltjo@AT@codemadness.DOT.org">Mail</a> + </td> + </tr> + </table> + </nav> + <hr class="hidden" /> + <main id="mainwrap"> + <div id="main"> + <article> +<header> + <h1>Setup an OpenBSD RISCV64 VM in QEMU</h1> + <p> + <strong>Last modification on </strong> <time>2021-10-26</time> + </p> +</header> + +<p>This describes how to setup an OpenBSD RISCV64 VM in QEMU.</p> +<p>The shellscript below does the following:</p> +<ul> +<li>Set up the disk image (raw format).</li> +<li>Patch the disk image with the OpenBSD miniroot file for the installation.</li> +<li>Downloads the opensbi and u-boot firmware files for qemu.</li> +<li>Run the VM with the supported settings.</li> +</ul> +<p>The script is tested on the host GNU/Void Linux and OpenBSD-current.</p> +<p><strong>IMPORTANT!: The signature and checksum for the miniroot, u-boot and opensbi +files are not verified. If the host is OpenBSD make sure to instead install the +packages (pkg_add u-boot-riscv64 opensbi) and adjust the firmware path for the +qemu -bios and -kernel options. </strong></p> +<h2>Shellscript</h2> +<pre><code>#!/bin/sh +# mirror list: https://www.openbsd.org/ftp.html +mirror="https://ftp.bit.nl/pub/OpenBSD/" +release="7.0" +minirootname="miniroot70.img" + +miniroot() { + test -f "${minirootname}" && return # download once + + url="${mirror}/${release}/riscv64/${minirootname}" + curl -o "${minirootname}" "${url}" +} + +createrootdisk() { + test -f disk.raw && return # create once + qemu-img create disk.raw 10G # create 10 GB disk + dd conv=notrunc if=${minirootname} of=disk.raw # write miniroot to disk +} + +opensbi() { + f="opensbi.tgz" + test -f "${f}" && return # download and extract once. + + url="${mirror}/${release}/packages/amd64/opensbi-0.9p0.tgz" + curl -o "${f}" "${url}" + + tar -xzf "${f}" share/opensbi/generic/fw_jump.bin +} + +uboot() { + f="uboot.tgz" + test -f "${f}" && return # download and extract once. + + url="${mirror}/${release}/packages/amd64/u-boot-riscv64-2021.07p0.tgz" + curl -o "${f}" "${url}" + + tar -xzf "${f}" share/u-boot/qemu-riscv64_smode/u-boot.bin +} + +setup() { + miniroot + createrootdisk + opensbi + uboot +} + +run() { + qemu-system-riscv64 \ + -machine virt \ + -nographic \ + -m 2048M \ + -smp 2 \ + -bios share/opensbi/generic/fw_jump.bin \ + -kernel share/u-boot/qemu-riscv64_smode/u-boot.bin \ + -drive file=disk.raw,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 \ + -netdev user,id=net0,ipv6=off -device virtio-net-device,netdev=net0 +} + +setup +run +</code></pre> + + </article> + </div> + </main> +</body> +</html> (DIR) diff --git a/output/openbsd-riscv64-vm.md b/output/openbsd-riscv64-vm.md @@ -0,0 +1,79 @@ +This describes how to setup an OpenBSD RISCV64 VM in QEMU. + +The shellscript below does the following: + +* Set up the disk image (raw format). +* Patch the disk image with the OpenBSD miniroot file for the installation. +* Downloads the opensbi and u-boot firmware files for qemu. +* Run the VM with the supported settings. + +The script is tested on the host GNU/Void Linux and OpenBSD-current. + +**IMPORTANT!: The signature and checksum for the miniroot, u-boot and opensbi +files are not verified. If the host is OpenBSD make sure to instead install the +packages (pkg_add u-boot-riscv64 opensbi) and adjust the firmware path for the +qemu -bios and -kernel options. ** + + +## Shellscript + + #!/bin/sh + # mirror list: https://www.openbsd.org/ftp.html + mirror="https://ftp.bit.nl/pub/OpenBSD/" + release="7.0" + minirootname="miniroot70.img" + + miniroot() { + test -f "${minirootname}" && return # download once + + url="${mirror}/${release}/riscv64/${minirootname}" + curl -o "${minirootname}" "${url}" + } + + createrootdisk() { + test -f disk.raw && return # create once + qemu-img create disk.raw 10G # create 10 GB disk + dd conv=notrunc if=${minirootname} of=disk.raw # write miniroot to disk + } + + opensbi() { + f="opensbi.tgz" + test -f "${f}" && return # download and extract once. + + url="${mirror}/${release}/packages/amd64/opensbi-0.9p0.tgz" + curl -o "${f}" "${url}" + + tar -xzf "${f}" share/opensbi/generic/fw_jump.bin + } + + uboot() { + f="uboot.tgz" + test -f "${f}" && return # download and extract once. + + url="${mirror}/${release}/packages/amd64/u-boot-riscv64-2021.07p0.tgz" + curl -o "${f}" "${url}" + + tar -xzf "${f}" share/u-boot/qemu-riscv64_smode/u-boot.bin + } + + setup() { + miniroot + createrootdisk + opensbi + uboot + } + + run() { + qemu-system-riscv64 \ + -machine virt \ + -nographic \ + -m 2048M \ + -smp 2 \ + -bios share/opensbi/generic/fw_jump.bin \ + -kernel share/u-boot/qemu-riscv64_smode/u-boot.bin \ + -drive file=disk.raw,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 \ + -netdev user,id=net0,ipv6=off -device virtio-net-device,netdev=net0 + } + + setup + run (DIR) diff --git a/output/phlog/2fa-totp b/output/phlog/2fa-totp @@ -0,0 +1,65 @@ +1<- Back / codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i# 2FA TOTP without crappy authenticator apps codemadness.org 70 +i codemadness.org 70 +iLast modification on 2022-03-23 codemadness.org 70 +i codemadness.org 70 +iThis describes how to use 2FA without using crappy authenticator "apps" or a codemadness.org 70 +imobile device. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Install codemadness.org 70 +i codemadness.org 70 +iOn OpenBSD: codemadness.org 70 +i codemadness.org 70 +i pkg_add oath-toolkit zbar codemadness.org 70 +i codemadness.org 70 +i* oath-toolkit is used to generate the digits based on the secret key. codemadness.org 70 +i* zbar is used to scan the QR code text. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Steps codemadness.org 70 +i codemadness.org 70 +iSave the QR code image from the authenticator app, website to an image file. codemadness.org 70 +iScan the QR code text from the image: codemadness.org 70 +i codemadness.org 70 +i zbarimg image.png codemadness.org 70 +i codemadness.org 70 +iAn example QR code: codemadness.org 70 +i codemadness.org 70 +IQR code example /downloads/2fa/qr.png codemadness.org 70 +i codemadness.org 70 +iThe output is typically something like: codemadness.org 70 +i codemadness.org 70 +i QR-Code:otpauth://totp/Example:someuser@codemadness.org?secret=SECRETKEY&issuer=Codemadness codemadness.org 70 +i codemadness.org 70 +iYou only need to scan this QR-code for the secret key once. codemadness.org 70 +iMake sure to store the secret key in a private safe place and don't show it to codemadness.org 70 +ianyone else. codemadness.org 70 +i codemadness.org 70 +iUsing the secret key the following command outputs a 6-digit code by default. codemadness.org 70 +iIn this example we also assume the key is base32-encoded. codemadness.org 70 +iThere can be other parameters and options, this is documented in the Yubico URI codemadness.org 70 +istring format reference below. codemadness.org 70 +i codemadness.org 70 +iCommand: codemadness.org 70 +i codemadness.org 70 +i oathtool --totp -b SOMEKEY codemadness.org 70 +i codemadness.org 70 +i* The --totp option uses the time-variant TOTP mode, by default it uses HMAC SHA1. codemadness.org 70 +i* The -b option use base32 encoding of KEY instead of hex. codemadness.org 70 +i codemadness.org 70 +iTip: you can create a script that automatically puts the digits in the codemadness.org 70 +iclipboard, for example: codemadness.org 70 +i codemadness.org 70 +i oathtool --totp -b SOMEKEY | xclip codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## References codemadness.org 70 +i codemadness.org 70 +h* zbarimg(1) man page URL:https://linux.die.net/man/1/zbarimg codemadness.org 70 +h* oathtool(1) man page URL:https://www.nongnu.org/oath-toolkit/man-oathtool.html codemadness.org 70 +h* RFC6238 - TOTP: Time-Based One-Time Password Algorithm URL:https://datatracker.ietf.org/doc/html/rfc6238 codemadness.org 70 +h* Yucibo.com - otpauth URI string format URL:https://docs.yubico.com/yesdk/users-manual/application-oath/uri-string-format.html codemadness.org 70 +. (DIR) diff --git a/output/phlog/openbsd-riscv64-vm b/output/phlog/openbsd-riscv64-vm @@ -0,0 +1,87 @@ +1<- Back / codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i# Setup an OpenBSD RISCV64 VM in QEMU codemadness.org 70 +i codemadness.org 70 +iLast modification on 2021-10-26 codemadness.org 70 +i codemadness.org 70 +iThis describes how to setup an OpenBSD RISCV64 VM in QEMU. codemadness.org 70 +i codemadness.org 70 +iThe shellscript below does the following: codemadness.org 70 +i codemadness.org 70 +i* Set up the disk image (raw format). codemadness.org 70 +i* Patch the disk image with the OpenBSD miniroot file for the installation. codemadness.org 70 +i* Downloads the opensbi and u-boot firmware files for qemu. codemadness.org 70 +i* Run the VM with the supported settings. codemadness.org 70 +i codemadness.org 70 +iThe script is tested on the host GNU/Void Linux and OpenBSD-current. codemadness.org 70 +i codemadness.org 70 +i**IMPORTANT!: The signature and checksum for the miniroot, u-boot and opensbi codemadness.org 70 +ifiles are not verified. If the host is OpenBSD make sure to instead install the codemadness.org 70 +ipackages (pkg_add u-boot-riscv64 opensbi) and adjust the firmware path for the codemadness.org 70 +iqemu -bios and -kernel options. ** codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Shellscript codemadness.org 70 +i codemadness.org 70 +i #!/bin/sh codemadness.org 70 +i # mirror list: https://www.openbsd.org/ftp.html codemadness.org 70 +i mirror="https://ftp.bit.nl/pub/OpenBSD/" codemadness.org 70 +i release="7.0" codemadness.org 70 +i minirootname="miniroot70.img" codemadness.org 70 +i codemadness.org 70 +i miniroot() { codemadness.org 70 +i test -f "${minirootname}" && return # download once codemadness.org 70 +i codemadness.org 70 +i url="${mirror}/${release}/riscv64/${minirootname}" codemadness.org 70 +i curl -o "${minirootname}" "${url}" codemadness.org 70 +i } codemadness.org 70 +i codemadness.org 70 +i createrootdisk() { codemadness.org 70 +i test -f disk.raw && return # create once codemadness.org 70 +i qemu-img create disk.raw 10G # create 10 GB disk codemadness.org 70 +i dd conv=notrunc if=${minirootname} of=disk.raw # write miniroot to disk codemadness.org 70 +i } codemadness.org 70 +i codemadness.org 70 +i opensbi() { codemadness.org 70 +i f="opensbi.tgz" codemadness.org 70 +i test -f "${f}" && return # download and extract once. codemadness.org 70 +i codemadness.org 70 +i url="${mirror}/${release}/packages/amd64/opensbi-0.9p0.tgz" codemadness.org 70 +i curl -o "${f}" "${url}" codemadness.org 70 +i codemadness.org 70 +i tar -xzf "${f}" share/opensbi/generic/fw_jump.bin codemadness.org 70 +i } codemadness.org 70 +i codemadness.org 70 +i uboot() { codemadness.org 70 +i f="uboot.tgz" codemadness.org 70 +i test -f "${f}" && return # download and extract once. codemadness.org 70 +i codemadness.org 70 +i url="${mirror}/${release}/packages/amd64/u-boot-riscv64-2021.07p0.tgz" codemadness.org 70 +i curl -o "${f}" "${url}" codemadness.org 70 +i codemadness.org 70 +i tar -xzf "${f}" share/u-boot/qemu-riscv64_smode/u-boot.bin codemadness.org 70 +i } codemadness.org 70 +i codemadness.org 70 +i setup() { codemadness.org 70 +i miniroot codemadness.org 70 +i createrootdisk codemadness.org 70 +i opensbi codemadness.org 70 +i uboot codemadness.org 70 +i } codemadness.org 70 +i codemadness.org 70 +i run() { codemadness.org 70 +i qemu-system-riscv64 \ codemadness.org 70 +i -machine virt \ codemadness.org 70 +i -nographic \ codemadness.org 70 +i -m 2048M \ codemadness.org 70 +i -smp 2 \ codemadness.org 70 +i -bios share/opensbi/generic/fw_jump.bin \ codemadness.org 70 +i -kernel share/u-boot/qemu-riscv64_smode/u-boot.bin \ codemadness.org 70 +i -drive file=disk.raw,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 \ codemadness.org 70 +i -netdev user,id=net0,ipv6=off -device virtio-net-device,netdev=net0 codemadness.org 70 +i } codemadness.org 70 +i codemadness.org 70 +i setup codemadness.org 70 +i run codemadness.org 70 +. (DIR) diff --git a/output/phlog/rss b/output/phlog/rss @@ -0,0 +1,252 @@ +1<- Back / codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i# Using RSS/Atom feeds codemadness.org 70 +i codemadness.org 70 +iLast modification on 2022-04-18 codemadness.org 70 +i codemadness.org 70 +iTODO: codemadness.org 70 +ix link to sfeed and sfeed_curses page codemadness.org 70 +ix link to curl page codemadness.org 70 +ix link to iconv manual or POSIX page? codemadness.org 70 +i- link to RSS2 latest adhoc spec? codemadness.org 70 +i- change luke smith links to eevblog or so? codemadness.org 70 +i- OPML: change links to codemadness and some youtube channels? codemadness.org 70 +i- change dxvk github link to yt-dlp or maybe openbsd? codemadness.org 70 +i codemadness.org 70 +i- peertube/oddyssee change link from luke smith? codemadness.org 70 +i- change OPML feed links. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i- section for website authors: codemadness.org 70 +i - add an option for the full content Atom feed if possible. codemadness.org 70 +i - please keep RSS/Atom alive. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## What is RSS/Atom and what problems does it solve? codemadness.org 70 +i codemadness.org 70 +iBoth are data formats in XML to store a list of feed entries, such as text or codemadness.org 70 +imedia items in a structured manner. codemadness.org 70 +i codemadness.org 70 +h* RSS is an evolving standard (and it is a bit vaguely defined sometimes). URL:https://www.rssboard.org/rss-specification codemadness.org 70 +h* Atom is a RFC standardized format: "RFC4287 - The Atom Syndication Format" URL:https://tools.ietf.org/html/rfc4287 codemadness.org 70 +i codemadness.org 70 +iRSS/Atom is commonly used for: codemadness.org 70 +i* Keeping track of news from newssites (headlines and content). codemadness.org 70 +i* Keeping track of software releases. codemadness.org 70 +i* Listings of podcasts with maybe some .mp3 file attachment aka an enclosure. codemadness.org 70 +i* Bittorrent listings with a .torrent or magnet link. codemadness.org 70 +i codemadness.org 70 +iIn general this makes organizing and keeping track of content more structured codemadness.org 70 +iand convenient. As a user you can more quickly filter interesting news and codemadness.org 70 +idon't have to use all the different site navigations. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## RSS/Atom formats and extensions codemadness.org 70 +i codemadness.org 70 +i* Atom 1.0 (RFC 4287): https://datatracker.ietf.org/doc/html/rfc4287 codemadness.org 70 +i* Atom 0.3 (draft, historic): rarely used anymore. codemadness.org 70 +i* RSS 0.91+. codemadness.org 70 +i* RDF (when used with RSS). codemadness.org 70 +i* MediaRSS extensions (media:). codemadness.org 70 +i* Dublin Core extensions (dc:). codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Atom XML example codemadness.org 70 +i codemadness.org 70 +iThis is an example of the XML data format of an Atom feed. Typically there is codemadness.org 70 +iatleast a title, link and a timestamp, for example for the xkcd.com Atom feed codemadness.org 70 +iat https://xkcd.com/atom.xml: codemadness.org 70 +i codemadness.org 70 +i <?xml version="1.0" encoding="utf-8"?> codemadness.org 70 +i <feed xml:lang="en"> codemadness.org 70 +i <title>xkcd.com</title> <!-- feed title --> codemadness.org 70 +i <link href="https://xkcd.com/" rel="alternate"/> codemadness.org 70 +i <id>https://xkcd.com/</id> codemadness.org 70 +i <updated>2020-09-04T00:00:00Z</updated> codemadness.org 70 +i codemadness.org 70 +i <!-- items --> codemadness.org 70 +i <entry> codemadness.org 70 +i <title>University COVID Model</title> codemadness.org 70 +i <link href="https://xkcd.com/2355/" /> codemadness.org 70 +i <updated>2020-09-04T00:00:00Z</updated> codemadness.org 70 +i <id>https://xkcd.com/2355/</id> codemadness.org 70 +i <summary type="html"> codemadness.org 70 +i <img src="https://imgs.xkcd.com/comics/somename.png "/> codemadness.org 70 +i </summary> codemadness.org 70 +i </entry> codemadness.org 70 +i <!-- ... more items. --> codemadness.org 70 +i </feed> codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## General way to get a RSS/Atom feed codemadness.org 70 +i codemadness.org 70 +iA common way for websites to indicate they have RSS/Atom feeds is to have a codemadness.org 70 +ilink reference in the HTML code. codemadness.org 70 +i codemadness.org 70 +iFor Atom: codemadness.org 70 +i codemadness.org 70 +i <link rel="alternate" href="atom.xml" type="application/atom+xml" title="Codemadness Atom Feed" /> codemadness.org 70 +i codemadness.org 70 +ior for RSS: codemadness.org 70 +i codemadness.org 70 +i <link rel="alternate" href="rss.xml" type="application/rss+xml" title="Codemadness RSS Feed" /> codemadness.org 70 +i codemadness.org 70 +hThe »sfeed_web« tool can also help with these sort of feeds and /sfeed.html codemadness.org 70 +iextract the URLs from a HTML page: codemadness.org 70 +i codemadness.org 70 +i url="https://codemadness.org"; curl -s "$url" | sfeed_web "$url" codemadness.org 70 +i codemadness.org 70 +iThe Firefox webbrowser used to show an icon to indicate it has a RSS/Atom. codemadness.org 70 +iUnfortunately browsers nowadays don't show this anymore by default. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Websites codemadness.org 70 +i codemadness.org 70 +i### Github codemadness.org 70 +i codemadness.org 70 +iGithub offers an Atom feed of releases and of commits. codemadness.org 70 +i codemadness.org 70 +h* Releases URL:https://github.com/yt-dlp/yt-dlp/releases.atom codemadness.org 70 +h* Tags URL:https://github.com/yt-dlp/yt-dlp/tags.atom codemadness.org 70 +h* »Commits«: by adding URL:https://github.com/yt-dlp/yt-dlp/commits/master.atom codemadness.org 70 +i ".atom" to the URI you can get the Atom feed. codemadness.org 70 +i codemadness.org 70 +iUnfortunately it doesn't offer a way to get a feed of issues directly. It can codemadness.org 70 +ihowever be done using the public API and a conversion script: codemadness.org 70 +i codemadness.org 70 +1https://git.codemadness.org/randomcrap/file/config/sfeed/connectors/github.html /git/randomcrap/file/config/sfeed/connectors/github.gph codemadness.org 70 +i codemadness.org 70 +iGithub API documentation reference: codemadness.org 70 +i codemadness.org 70 +hhttps://docs.github.com/en/rest/reference/issues URL:https://docs.github.com/en/rest/reference/issues codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i### Peertube codemadness.org 70 +i codemadness.org 70 +hhttps://videos.lukesmith.xyz/feeds/videos.xml?videoChannelId=2 URL:https://videos.lukesmith.xyz/feeds/videos.xml?videoChannelId=2 codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i### Odysee / LBRY codemadness.org 70 +i codemadness.org 70 +hhttps://odysee.com/$/rss/@Luke/70 URL:https://odysee.com/$/rss/@Luke/70 codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i### Reddit codemadness.org 70 +i codemadness.org 70 +iBy adding ".rss" to the URI you can get the RSS feed: codemadness.org 70 +i codemadness.org 70 +hhttps://old.reddit.com/r/openbsd/.rss URL:https://old.reddit.com/r/openbsd/.rss codemadness.org 70 +i codemadness.org 70 +iSome parameters can be changed. This is described in the Reddit API codemadness.org 70 +hdocumentation: »https://www.reddit.com/dev/api/« URL:https://www.reddit.com/dev/api/ codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i### Vimeo codemadness.org 70 +i codemadness.org 70 +iHere is a Vimeo connector script that converts data from the public JSON API to codemadness.org 70 +ian Atom feed: codemadness.org 70 +i codemadness.org 70 +1https://git.codemadness.org/randomcrap/file/config/sfeed/connectors/vimeo.html /git/randomcrap/file/config/sfeed/connectors/vimeo.gph codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i### Wordpress codemadness.org 70 +i codemadness.org 70 +iMany news websites use Wordpress. Some don't offer a RSS/Atom feed in the HTML codemadness.org 70 +iheader code. Some still allow to fetch them using the common URI: "/feed/". codemadness.org 70 +i codemadness.org 70 +hLike: »https://www.pine64.org/feed/« URL:https://www.pine64.org/feed/ codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i### Youtube codemadness.org 70 +i codemadness.org 70 +iTo get the latest videos by channel ID: codemadness.org 70 +i codemadness.org 70 +hhttps://www.youtube.com/feeds/videos.xml?channel_id=UC45N5D3dvAFvLEby-XOn4og URL:https://www.youtube.com/feeds/videos.xml?channel_id=UC45N5D3dvAFvLEby-XOn4og codemadness.org 70 +i codemadness.org 70 +iOr the latest videos by username: codemadness.org 70 +i codemadness.org 70 +hhttps://www.youtube.com/feeds/videos.xml?user=AwesomeSauceNews URL:https://www.youtube.com/feeds/videos.xml?user=AwesomeSauceNews codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +iMy minimalistic Youtube front-end idiotbox shows the Atom feed of channels, for codemadness.org 70 +iexample using the search "gunther": codemadness.org 70 +i codemadness.org 70 +hhttps://idiotbox.codemadness.org/?q=gunther URL:https://idiotbox.codemadness.org/?q=gunther codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Wikipedia codemadness.org 70 +i codemadness.org 70 +iIt's possible to view the edit history of a page, for example: codemadness.org 70 +i codemadness.org 70 +hhttps://en.wikipedia.org/w/index.php?title=Frikandel&feed=atom&action=history URL:https://en.wikipedia.org/w/index.php?title=Frikandel&feed=atom&action=history codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Services and proxies codemadness.org 70 +i codemadness.org 70 +i### RSSBridge codemadness.org 70 +i codemadness.org 70 +iI have not used this program myself and it seems a bit bloated but it offers a codemadness.org 70 +iway of converting some websites to RSS. However for some sites an API key is codemadness.org 70 +irequired. codemadness.org 70 +i codemadness.org 70 +hhttps://github.com/RSS-Bridge/rss-bridge URL:https://github.com/RSS-Bridge/rss-bridge codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i### Twitter / Nitter codemadness.org 70 +i codemadness.org 70 +iHere is a proxy website for Twitter called Nitter that offers RSS feeds: codemadness.org 70 +i codemadness.org 70 +hhttps://nitter.net/ID_AA_Carmack/rss URL:https://nitter.net/ID_AA_Carmack/rss codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## OPML codemadness.org 70 +i codemadness.org 70 +iOPML is a XML-based format typically used for importing or exporting a list of feeds. codemadness.org 70 +iSome programs that support it are newsboat, sfeed, rss2email, Mozilla Thunderbird. codemadness.org 70 +i codemadness.org 70 +iThe format typically looks like this: codemadness.org 70 +i codemadness.org 70 +i <?xml version="1.0" encoding="UTF-8"?> codemadness.org 70 +i <opml version="1.0"> codemadness.org 70 +i <body> codemadness.org 70 +i <outline type="rss" title="suckless sites" text="suckless sites" xmlUrl="https://git.suckless.org/sites/atom.xml"/> codemadness.org 70 +i <outline type="rss" title="scc compiler" text="scc compiler" xmlUrl="https://git.simple-cc.org/scc/atom.xml"/> codemadness.org 70 +i </body> codemadness.org 70 +i </opml> codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +iFor sfeed to export to OPML: codemadness.org 70 +i codemadness.org 70 +i sfeed_opml_export > file.opml codemadness.org 70 +i codemadness.org 70 +iFor sfeed to import and convert OPML to an sfeed rc file: codemadness.org 70 +i codemadness.org 70 +i sfeed_opml_import < file.opml > ~/.sfeed/sfeedrc codemadness.org 70 +i codemadness.org 70 +iTo export in newsboat: codemadness.org 70 +i codemadness.org 70 +i newsboat -e > file.opml codemadness.org 70 +i codemadness.org 70 +iFor RSS2email: codemadness.org 70 +i codemadness.org 70 +i r2e opmlexport > file.opml codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Tools codemadness.org 70 +i codemadness.org 70 +h* sfeed: RSS/Atom parser and tool to convert from XML to a simple TAB-separated format. URL:https://codemadness.org/sfeed.html codemadness.org 70 +i It contains various RSS/Atom-related helper programs and formatting programs aswell. codemadness.org 70 +h* curl: swiss-army-knife tool to get data from many protocols, like HTTP, HTTPS, gopher. URL:https://curl.se/ codemadness.org 70 +h* alternatively: hurl: a HTTP, HTTPS and gopher file grabber URL:https://codemadness.org/hurl.html codemadness.org 70 +h* iconv: useful to convert text-encoding to UTF-8. URL:https://pubs.opengroup.org/onlinepubs/9699919799/utilities/iconv.html codemadness.org 70 +h* youtube-dl to download videos by URL from Youtube (or many other sites). URL:https://youtube-dl.org/ codemadness.org 70 +h* alternatively: yt-dlp which is a fork of youtube-dl and more actively maintained at the moment. URL:https://github.com/yt-dlp/yt-dlp codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## The end codemadness.org 70 +i codemadness.org 70 +iI hope this is useful. codemadness.org 70 +. (DIR) diff --git a/output/phlog/todo b/output/phlog/todo @@ -0,0 +1 @@ +todo-application +\ No newline at end of file (DIR) diff --git a/output/phlog/todo-application b/output/phlog/todo-application @@ -0,0 +1,104 @@ +1<- Back / codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i# A simple TODO application codemadness.org 70 +i codemadness.org 70 +iLast modification on 2022-07-01 codemadness.org 70 +i codemadness.org 70 +iThis article describes a TODO application or workflow. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Workflow codemadness.org 70 +i codemadness.org 70 +iIt works like this: codemadness.org 70 +i codemadness.org 70 +i* Open any text editor. codemadness.org 70 +i* Edit the text. codemadness.org 70 +i* Save it in a file (probably named "TODO"). codemadness.org 70 +i* Feel happy about it. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## The text format codemadness.org 70 +i codemadness.org 70 +iThe text format I use is this: codemadness.org 70 +i codemadness.org 70 +i [indendations]<symbol><SPACE><item text><NEWLINE> codemadness.org 70 +i codemadness.org 70 +iMost of the time an item is just one line. codemadness.org 70 +iThis format is just a general guideline to keep the items somewhat structured. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Symbols codemadness.org 70 +i codemadness.org 70 +iItems are prefixed with a symbol. codemadness.org 70 +i codemadness.org 70 +i* - is an item which is planned to be done at some point. codemadness.org 70 +i* x is an item which is done. codemadness.org 70 +i* ? is an item which I'm not (yet) sure about. It can also be an idea. codemadness.org 70 +i codemadness.org 70 +iI use an indendation with a TAB before an item to indicate item dependencies. codemadness.org 70 +iThe items can be nested. codemadness.org 70 +i codemadness.org 70 +iFor the prioritization I put the most important items and sections from the top codemadness.org 70 +ito the bottom. These can be reshuffled as you wish of course. codemadness.org 70 +i codemadness.org 70 +iTo delete an item you remove the line. To archive an item you keep the line. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Sections codemadness.org 70 +i codemadness.org 70 +iA section is a line which has no symbol. This is like a header to group items. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Example codemadness.org 70 +i codemadness.org 70 +i Checklist for releasing project 0.1: codemadness.org 70 +i - Test project with different compilers and check for warnings. codemadness.org 70 +i - Documentation: codemadness.org 70 +i - Proofread and make sure it matches all program behaviour. codemadness.org 70 +i - Run mandoc -Tlint on the man pages. codemadness.org 70 +i ? Copy useful examples from the README file to the man page? codemadness.org 70 +i - Run testsuite and check for failures before release. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i project 0.2: codemadness.org 70 +i ? Investigate if feature mentioned by some user is worth adding. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i# Example: secure remote cloud-encrypted edit session(tm) codemadness.org 70 +i codemadness.org 70 +i ssh -t host 'ed TODO' codemadness.org 70 +i codemadness.org 70 +i# Example: multi-user secure remote cloud-encrypted edit session(tm) codemadness.org 70 +i codemadness.org 70 +i ssh host codemadness.org 70 +i tmux or tmux a codemadness.org 70 +i ed TODO codemadness.org 70 +i codemadness.org 70 +i# Example: version-controlled multi-user secure remote cloud-encrypted edit session(tm) codemadness.org 70 +i codemadness.org 70 +i ssh host codemadness.org 70 +i tmux or tmux a codemadness.org 70 +i ed TODO codemadness.org 70 +i git add TODO codemadness.org 70 +i git commit -m 'TODO: update' codemadness.org 70 +i codemadness.org 70 +i## Pros codemadness.org 70 +i codemadness.org 70 +i* When you open the TODO file the most important items are at the top. codemadness.org 70 +i* The items are easy to read and modify with any text editor. codemadness.org 70 +i* It is easy to extend the format and use with other text tools. codemadness.org 70 +i* The format is portable: it works on sticky-notes on your CRT monitor too! codemadness.org 70 +i* No monthly online subscription needed and full NO-money-back guarantee. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Cons codemadness.org 70 +i codemadness.org 70 +i* Complex lists with interconnected dependencies might not work, maybe. codemadness.org 70 +i* It's assumed there is one person maintaining the TODO file. Merging items codemadness.org 70 +i from multiple people at the same time in this workflow is not recommended. codemadness.org 70 +i* It is too simple: noone will be impressed by it. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +iI hope this is inspirational or something, codemadness.org 70 +. (DIR) diff --git a/output/phlog/totp b/output/phlog/totp @@ -0,0 +1,65 @@ +1<- Back / codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i# 2FA TOTP without crappy authenticator apps codemadness.org 70 +i codemadness.org 70 +iLast modification on 2022-03-24 codemadness.org 70 +i codemadness.org 70 +iThis describes how to use 2FA without using crappy authenticator "apps" or a codemadness.org 70 +imobile device. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Install codemadness.org 70 +i codemadness.org 70 +iOn OpenBSD: codemadness.org 70 +i codemadness.org 70 +i pkg_add oath-toolkit zbar codemadness.org 70 +i codemadness.org 70 +i* oath-toolkit is used to generate the digits based on the secret key. codemadness.org 70 +i* zbar is used to scan the QR barcode text from the image. codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## Steps codemadness.org 70 +i codemadness.org 70 +iSave the QR code image from the authenticator app, website to an image file. codemadness.org 70 +iScan the QR code text from the image: codemadness.org 70 +i codemadness.org 70 +i zbarimg image.png codemadness.org 70 +i codemadness.org 70 +iAn example QR code: codemadness.org 70 +i codemadness.org 70 +IQR code example /downloads/2fa/qr.png codemadness.org 70 +i codemadness.org 70 +iThe output is typically something like: codemadness.org 70 +i codemadness.org 70 +i QR-Code:otpauth://totp/Example:someuser@codemadness.org?secret=SECRETKEY&issuer=Codemadness codemadness.org 70 +i codemadness.org 70 +iYou only need to scan this QR-code for the secret key once. codemadness.org 70 +iMake sure to store the secret key in a private safe place and don't show it to codemadness.org 70 +ianyone else. codemadness.org 70 +i codemadness.org 70 +iUsing the secret key the following command outputs a 6-digit code by default. codemadness.org 70 +iIn this example we also assume the key is base32-encoded. codemadness.org 70 +iThere can be other parameters and options, this is documented in the Yubico URI codemadness.org 70 +istring format reference below. codemadness.org 70 +i codemadness.org 70 +iCommand: codemadness.org 70 +i codemadness.org 70 +i oathtool --totp -b SOMEKEY codemadness.org 70 +i codemadness.org 70 +i* The --totp option uses the time-variant TOTP mode, by default it uses HMAC SHA1. codemadness.org 70 +i* The -b option uses base32 encoding of KEY instead of hex. codemadness.org 70 +i codemadness.org 70 +iTip: you can create a script that automatically puts the digits in the codemadness.org 70 +iclipboard, for example: codemadness.org 70 +i codemadness.org 70 +i oathtool --totp -b SOMEKEY | xclip codemadness.org 70 +i codemadness.org 70 +i codemadness.org 70 +i## References codemadness.org 70 +i codemadness.org 70 +h* zbarimg(1) man page URL:https://linux.die.net/man/1/zbarimg codemadness.org 70 +h* oathtool(1) man page URL:https://www.nongnu.org/oath-toolkit/man-oathtool.html codemadness.org 70 +h* RFC6238 - TOTP: Time-Based One-Time Password Algorithm URL:https://datatracker.ietf.org/doc/html/rfc6238 codemadness.org 70 +h* Yubico.com - otpauth URI string format URL:https://docs.yubico.com/yesdk/users-manual/application-oath/uri-string-format.html codemadness.org 70 +. (DIR) diff --git a/output/todo-application.html b/output/todo-application.html @@ -0,0 +1,126 @@ +<!DOCTYPE html> +<html dir="ltr" lang="en"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <meta http-equiv="Content-Language" content="en" /> + <meta name="viewport" content="width=device-width" /> + <meta name="keywords" content="todo, simple solutions(tm)" /> + <meta name="description" content="A simple TODO application workflow" /> + <meta name="author" content="Hiltjo" /> + <meta name="generator" content="Static content generated using saait: https://codemadness.org/saait.html" /> + <title>A simple TODO application - Codemadness</title> + <link rel="stylesheet" href="style.css" type="text/css" media="screen" /> + <link rel="stylesheet" href="print.css" type="text/css" media="print" /> + <link rel="alternate" href="atom.xml" type="application/atom+xml" title="Codemadness Atom Feed" /> + <link rel="alternate" href="atom_content.xml" type="application/atom+xml" title="Codemadness Atom Feed with content" /> + <link rel="icon" href="/favicon.png" type="image/png" /> +</head> +<body> + <nav id="menuwrap"> + <table id="menu" width="100%" border="0"> + <tr> + <td id="links" align="left"> + <a href="index.html">Blog</a> | + <a href="/git/" title="Git repository with some of my projects">Git</a> | + <a href="/releases/">Releases</a> | + <a href="gopher://codemadness.org">Gopherhole</a> + </td> + <td id="links-contact" align="right"> + <span class="hidden"> | </span> + <a href="feeds.html">Feeds</a> | + <a href="pgp.asc">PGP</a> | + <a href="mailto:hiltjo@AT@codemadness.DOT.org">Mail</a> + </td> + </tr> + </table> + </nav> + <hr class="hidden" /> + <main id="mainwrap"> + <div id="main"> + <article> +<header> + <h1>A simple TODO application</h1> + <p> + <strong>Last modification on </strong> <time>2022-07-01</time> + </p> +</header> + +<p>This article describes a TODO application or workflow.</p> +<h2>Workflow</h2> +<p>It works like this:</p> +<ul> +<li>Open any text editor.</li> +<li>Edit the text.</li> +<li>Save it in a file (probably named "TODO").</li> +<li>Feel happy about it.</li> +</ul> +<h2>The text format</h2> +<p>The text format I use is this:</p> +<pre><code>[indendations]<symbol><SPACE><item text><NEWLINE> +</code></pre> +<p>Most of the time an item is just one line. +This format is just a general guideline to keep the items somewhat structured.</p> +<h2>Symbols</h2> +<p>Items are prefixed with a symbol.</p> +<ul> +<li>- is an item which is planned to be done at some point.</li> +<li>x is an item which is done.</li> +<li>? is an item which I'm not (yet) sure about. It can also be an idea.</li> +</ul> +<p>I use an indendation with a TAB before an item to indicate item dependencies. +The items can be nested.</p> +<p>For the prioritization I put the most important items and sections from the top +to the bottom. These can be reshuffled as you wish of course.</p> +<p>To delete an item you remove the line. To archive an item you keep the line.</p> +<h2>Sections</h2> +<p>A section is a line which has no symbol. This is like a header to group items.</p> +<h2>Example</h2> +<pre><code>Checklist for releasing project 0.1: +- Test project with different compilers and check for warnings. +- Documentation: + - Proofread and make sure it matches all program behaviour. + - Run mandoc -Tlint on the man pages. + ? Copy useful examples from the README file to the man page? +- Run testsuite and check for failures before release. + + +project 0.2: +? Investigate if feature mentioned by some user is worth adding. +</code></pre> +<h1>Example: secure remote cloud-encrypted edit session(tm)</h1> +<pre><code>ssh -t host 'ed TODO' +</code></pre> +<h1>Example: multi-user secure remote cloud-encrypted edit session(tm)</h1> +<pre><code>ssh host +tmux or tmux a +ed TODO +</code></pre> +<h1>Example: version-controlled multi-user secure remote cloud-encrypted edit session(tm)</h1> +<pre><code>ssh host +tmux or tmux a +ed TODO +git add TODO +git commit -m 'TODO: update' +</code></pre> +<h2>Pros</h2> +<ul> +<li>When you open the TODO file the most important items are at the top.</li> +<li>The items are easy to read and modify with any text editor.</li> +<li>It is easy to extend the format and use with other text tools.</li> +<li>The format is portable: it works on sticky-notes on your CRT monitor too!</li> +<li>No monthly online subscription needed and full NO-money-back guarantee.</li> +</ul> +<h2>Cons</h2> +<ul> +<li>Complex lists with interconnected dependencies might not work, maybe.</li> +<li>It's assumed there is one person maintaining the TODO file. Merging items +from multiple people at the same time in this workflow is not recommended.</li> +<li>It is too simple: noone will be impressed by it.</li> +</ul> +<p>I hope this is inspirational or something,</p> + + </article> + </div> + </main> +</body> +</html> (DIR) diff --git a/output/todo-application.md b/output/todo-application.md @@ -0,0 +1,96 @@ +This article describes a TODO application or workflow. + + +## Workflow + +It works like this: + +* Open any text editor. +* Edit the text. +* Save it in a file (probably named "TODO"). +* Feel happy about it. + + +## The text format + +The text format I use is this: + + [indendations]<symbol><SPACE><item text><NEWLINE> + +Most of the time an item is just one line. +This format is just a general guideline to keep the items somewhat structured. + + +## Symbols + +Items are prefixed with a symbol. + +* - is an item which is planned to be done at some point. +* x is an item which is done. +* ? is an item which I'm not (yet) sure about. It can also be an idea. + +I use an indendation with a TAB before an item to indicate item dependencies. +The items can be nested. + +For the prioritization I put the most important items and sections from the top +to the bottom. These can be reshuffled as you wish of course. + +To delete an item you remove the line. To archive an item you keep the line. + + +## Sections + +A section is a line which has no symbol. This is like a header to group items. + + +## Example + + Checklist for releasing project 0.1: + - Test project with different compilers and check for warnings. + - Documentation: + - Proofread and make sure it matches all program behaviour. + - Run mandoc -Tlint on the man pages. + ? Copy useful examples from the README file to the man page? + - Run testsuite and check for failures before release. + + + project 0.2: + ? Investigate if feature mentioned by some user is worth adding. + + +# Example: secure remote cloud-encrypted edit session(tm) + + ssh -t host 'ed TODO' + +# Example: multi-user secure remote cloud-encrypted edit session(tm) + + ssh host + tmux or tmux a + ed TODO + +# Example: version-controlled multi-user secure remote cloud-encrypted edit session(tm) + + ssh host + tmux or tmux a + ed TODO + git add TODO + git commit -m 'TODO: update' + +## Pros + +* When you open the TODO file the most important items are at the top. +* The items are easy to read and modify with any text editor. +* It is easy to extend the format and use with other text tools. +* The format is portable: it works on sticky-notes on your CRT monitor too! +* No monthly online subscription needed and full NO-money-back guarantee. + + +## Cons + +* Complex lists with interconnected dependencies might not work, maybe. +* It's assumed there is one person maintaining the TODO file. Merging items + from multiple people at the same time in this workflow is not recommended. +* It is too simple: noone will be impressed by it. + + +I hope this is inspirational or something, (DIR) diff --git a/output/todo.html b/output/todo.html @@ -0,0 +1 @@ +todo-application.html +\ No newline at end of file (DIR) diff --git a/output/totp.html b/output/totp.html @@ -0,0 +1,98 @@ +<!DOCTYPE html> +<html dir="ltr" lang="en"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <meta http-equiv="Content-Language" content="en" /> + <meta name="viewport" content="width=device-width" /> + <meta name="keywords" content="oauthtool, zbarimg, totp, 2FA, authenticator" /> + <meta name="description" content="Using 2FA TOTP without crappy authenticator apps" /> + <meta name="author" content="Hiltjo" /> + <meta name="generator" content="Static content generated using saait: https://codemadness.org/saait.html" /> + <title>2FA TOTP without crappy authenticator apps - Codemadness</title> + <link rel="stylesheet" href="style.css" type="text/css" media="screen" /> + <link rel="stylesheet" href="print.css" type="text/css" media="print" /> + <link rel="alternate" href="atom.xml" type="application/atom+xml" title="Codemadness Atom Feed" /> + <link rel="alternate" href="atom_content.xml" type="application/atom+xml" title="Codemadness Atom Feed with content" /> + <link rel="icon" href="/favicon.png" type="image/png" /> +</head> +<body> + <nav id="menuwrap"> + <table id="menu" width="100%" border="0"> + <tr> + <td id="links" align="left"> + <a href="index.html">Blog</a> | + <a href="/git/" title="Git repository with some of my projects">Git</a> | + <a href="/releases/">Releases</a> | + <a href="gopher://codemadness.org">Gopherhole</a> + </td> + <td id="links-contact" align="right"> + <span class="hidden"> | </span> + <a href="feeds.html">Feeds</a> | + <a href="pgp.asc">PGP</a> | + <a href="mailto:hiltjo@AT@codemadness.DOT.org">Mail</a> + </td> + </tr> + </table> + </nav> + <hr class="hidden" /> + <main id="mainwrap"> + <div id="main"> + <article> +<header> + <h1>2FA TOTP without crappy authenticator apps</h1> + <p> + <strong>Last modification on </strong> <time>2022-03-24</time> + </p> +</header> + +<p>This describes how to use 2FA without using crappy authenticator "apps" or a +mobile device.</p> +<h2>Install</h2> +<p>On OpenBSD:</p> +<pre><code>pkg_add oath-toolkit zbar +</code></pre> +<ul> +<li>oath-toolkit is used to generate the digits based on the secret key.</li> +<li>zbar is used to scan the QR barcode text from the image.</li> +</ul> +<h2>Steps</h2> +<p>Save the QR code image from the authenticator app, website to an image file. +Scan the QR code text from the image:</p> +<pre><code>zbarimg image.png +</code></pre> +<p>An example QR code:</p> +<p><img src="downloads/2fa/qr.png" alt="QR code example" /></p> +<p>The output is typically something like:</p> +<pre><code>QR-Code:otpauth://totp/Example:someuser@codemadness.org?secret=SECRETKEY&issuer=Codemadness +</code></pre> +<p>You only need to scan this QR-code for the secret key once. +Make sure to store the secret key in a private safe place and don't show it to +anyone else.</p> +<p>Using the secret key the following command outputs a 6-digit code by default. +In this example we also assume the key is base32-encoded. +There can be other parameters and options, this is documented in the Yubico URI +string format reference below.</p> +<p>Command:</p> +<pre><code>oathtool --totp -b SOMEKEY +</code></pre> +<ul> +<li>The --totp option uses the time-variant TOTP mode, by default it uses HMAC SHA1.</li> +<li>The -b option uses base32 encoding of KEY instead of hex.</li> +</ul> +<p>Tip: you can create a script that automatically puts the digits in the +clipboard, for example:</p> +<pre><code>oathtool --totp -b SOMEKEY | xclip +</code></pre> +<h2>References</h2> +<ul> +<li><a href="https://linux.die.net/man/1/zbarimg">zbarimg(1) man page</a></li> +<li><a href="https://www.nongnu.org/oath-toolkit/man-oathtool.html">oathtool(1) man page</a></li> +<li><a href="https://datatracker.ietf.org/doc/html/rfc6238">RFC6238 - TOTP: Time-Based One-Time Password Algorithm</a></li> +<li><a href="https://docs.yubico.com/yesdk/users-manual/application-oath/uri-string-format.html">Yubico.com - otpauth URI string format</a></li> +</ul> + + </article> + </div> + </main> +</body> +</html> (DIR) diff --git a/output/totp.md b/output/totp.md @@ -0,0 +1,57 @@ +This describes how to use 2FA without using crappy authenticator "apps" or a +mobile device. + + +## Install + +On OpenBSD: + + pkg_add oath-toolkit zbar + +* oath-toolkit is used to generate the digits based on the secret key. +* zbar is used to scan the QR barcode text from the image. + + +## Steps + +Save the QR code image from the authenticator app, website to an image file. +Scan the QR code text from the image: + + zbarimg image.png + +An example QR code: + +![QR code example](https://codemadness.org/downloads/2fa/qr.png) + +The output is typically something like: + + QR-Code:otpauth://totp/Example:someuser@codemadness.org?secret=SECRETKEY&issuer=Codemadness + +You only need to scan this QR-code for the secret key once. +Make sure to store the secret key in a private safe place and don't show it to +anyone else. + +Using the secret key the following command outputs a 6-digit code by default. +In this example we also assume the key is base32-encoded. +There can be other parameters and options, this is documented in the Yubico URI +string format reference below. + +Command: + + oathtool --totp -b SOMEKEY + +* The --totp option uses the time-variant TOTP mode, by default it uses HMAC SHA1. +* The -b option uses base32 encoding of KEY instead of hex. + +Tip: you can create a script that automatically puts the digits in the +clipboard, for example: + + oathtool --totp -b SOMEKEY | xclip + + +## References + +* [zbarimg(1) man page](https://linux.die.net/man/1/zbarimg) +* [oathtool(1) man page](https://www.nongnu.org/oath-toolkit/man-oathtool.html) +* [RFC6238 - TOTP: Time-Based One-Time Password Algorithm](https://datatracker.ietf.org/doc/html/rfc6238) +* [Yubico.com - otpauth URI string format](https://docs.yubico.com/yesdk/users-manual/application-oath/uri-string-format.html) (DIR) diff --git a/pages/todo-application.cfg b/pages/todo-application.cfg @@ -0,0 +1,6 @@ +title = A simple TODO application +id = todo +description = A simple TODO application workflow +keywords = todo, simple solutions(tm) +created = 2022-07-01 +updated = 2022-07-01 (DIR) diff --git a/pages/todo-application.md b/pages/todo-application.md @@ -0,0 +1,96 @@ +This article describes a TODO application or workflow. + + +## Workflow + +It works like this: + +* Open any text editor. +* Edit the text. +* Save it in a file (probably named "TODO"). +* Feel happy about it. + + +## The text format + +The text format I use is this: + + [indendations]<symbol><SPACE><item text><NEWLINE> + +Most of the time an item is just one line. +This format is just a general guideline to keep the items somewhat structured. + + +## Symbols + +Items are prefixed with a symbol. + +* - is an item which is planned to be done at some point. +* x is an item which is done. +* ? is an item which I'm not (yet) sure about. It can also be an idea. + +I use an indendation with a TAB before an item to indicate item dependencies. +The items can be nested. + +For the prioritization I put the most important items and sections from the top +to the bottom. These can be reshuffled as you wish of course. + +To delete an item you remove the line. To archive an item you keep the line. + + +## Sections + +A section is a line which has no symbol. This is like a header to group items. + + +## Example + + Checklist for releasing project 0.1: + - Test project with different compilers and check for warnings. + - Documentation: + - Proofread and make sure it matches all program behaviour. + - Run mandoc -Tlint on the man pages. + ? Copy useful examples from the README file to the man page? + - Run testsuite and check for failures before release. + + + project 0.2: + ? Investigate if feature mentioned by some user is worth adding. + + +# Example: secure remote cloud-encrypted edit session(tm) + + ssh -t host 'ed TODO' + +# Example: multi-user secure remote cloud-encrypted edit session(tm) + + ssh host + tmux or tmux a + ed TODO + +# Example: version-controlled multi-user secure remote cloud-encrypted edit session(tm) + + ssh host + tmux or tmux a + ed TODO + git add TODO + git commit -m 'TODO: update' + +## Pros + +* When you open the TODO file the most important items are at the top. +* The items are easy to read and modify with any text editor. +* It is easy to extend the format and use with other text tools. +* The format is portable: it works on sticky-notes on your CRT monitor too! +* No monthly online subscription needed and full NO-money-back guarantee. + + +## Cons + +* Complex lists with interconnected dependencies might not work, maybe. +* It's assumed there is one person maintaining the TODO file. Merging items + from multiple people at the same time in this workflow is not recommended. +* It is too simple: noone will be impressed by it. + + +I hope this is inspirational or something, (DIR) diff --git a/pages/totp.cfg b/pages/totp.cfg @@ -0,0 +1,6 @@ +title = 2FA TOTP without crappy authenticator apps +id = totp +description = Using 2FA TOTP without crappy authenticator apps +keywords = oauthtool, zbarimg, totp, 2FA, authenticator +created = 2022-03-23 +updated = 2022-03-24 (DIR) diff --git a/pages/totp.md b/pages/totp.md @@ -0,0 +1,57 @@ +This describes how to use 2FA without using crappy authenticator "apps" or a +mobile device. + + +## Install + +On OpenBSD: + + pkg_add oath-toolkit zbar + +* oath-toolkit is used to generate the digits based on the secret key. +* zbar is used to scan the QR barcode text from the image. + + +## Steps + +Save the QR code image from the authenticator app, website to an image file. +Scan the QR code text from the image: + + zbarimg image.png + +An example QR code: + +![QR code example](downloads/2fa/qr.png) + +The output is typically something like: + + QR-Code:otpauth://totp/Example:someuser@codemadness.org?secret=SECRETKEY&issuer=Codemadness + +You only need to scan this QR-code for the secret key once. +Make sure to store the secret key in a private safe place and don't show it to +anyone else. + +Using the secret key the following command outputs a 6-digit code by default. +In this example we also assume the key is base32-encoded. +There can be other parameters and options, this is documented in the Yubico URI +string format reference below. + +Command: + + oathtool --totp -b SOMEKEY + +* The --totp option uses the time-variant TOTP mode, by default it uses HMAC SHA1. +* The -b option uses base32 encoding of KEY instead of hex. + +Tip: you can create a script that automatically puts the digits in the +clipboard, for example: + + oathtool --totp -b SOMEKEY | xclip + + +## References + +* [zbarimg(1) man page](https://linux.die.net/man/1/zbarimg) +* [oathtool(1) man page](https://www.nongnu.org/oath-toolkit/man-oathtool.html) +* [RFC6238 - TOTP: Time-Based One-Time Password Algorithm](https://datatracker.ietf.org/doc/html/rfc6238) +* [Yubico.com - otpauth URI string format](https://docs.yubico.com/yesdk/users-manual/application-oath/uri-string-format.html)