aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorla-ninpre <leobrekalini@gmail.com>2021-05-25 00:56:00 +0300
committerla-ninpre <leobrekalini@gmail.com>2021-05-25 00:56:00 +0300
commitfd9c7318a79da6471c5f6eb8b5f3c8215f0c957a (patch)
tree3d8d199b45c2284df8434da23993054ea10eecf0
parent261717a0a5dd5a9e5ec7e1151e2fc79457bc5f10 (diff)
downloaddotfiles-fd9c7318a79da6471c5f6eb8b5f3c8215f0c957a.tar.gz
dotfiles-fd9c7318a79da6471c5f6eb8b5f3c8215f0c957a.zip
add print_codes script
-rwxr-xr-x.local/bin/print_codes97
1 files changed, 97 insertions, 0 deletions
diff --git a/.local/bin/print_codes b/.local/bin/print_codes
new file mode 100755
index 0000000..bb8b708
--- /dev/null
+++ b/.local/bin/print_codes
@@ -0,0 +1,97 @@
+#!/bin/sh
+
+# Copyright (c) 2021, la-ninpre
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+
+# small script to create page with qr-coded recovery tokens for otp
+# uses: qrencode, imagemagick(convert, montage)
+#
+# file with codes should be in following format:
+# - recovery codes should be on separate lines
+# - every line beginning with # is ignored
+
+QRENCODE_ERR_CORR_LEVEL=H
+CODES_KEEP_PNG=0
+CODES_MAKE_PDF=0
+
+usage() {
+ echo "create qr-coded recovery tokens for easy printing"
+ echo
+ echo "USAGE:"
+ echo " $0 [OPTIONS] <text-file>"
+ echo
+ echo "OPTIONS:"
+ echo " -k keep png files with qrcodes"
+ echo " -l {L,M,Q,H}"
+ echo " set qrencode error correction level"
+ echo " -p produce pdf instead of image"
+ echo " -h print this help message"
+ echo
+}
+
+while getopts kl:ph arg
+do
+ case "$arg" in
+ k) CODES_KEEP_PNG=1
+ ;;
+ l) case $OPTARG in
+ [lL]) QRENCODE_ERR_CORR_LEVEL=L ;;
+ [mM]) QRENCODE_ERR_CORR_LEVEL=M ;;
+ [qQ]) QRENCODE_ERR_CORR_LEVEL=Q ;;
+ [hH]) QRENCODE_ERR_CORR_LEVEL=H ;;
+ *) echo "error correction level should be one of L, M, Q or H"
+ exit 1 ;;
+ esac
+ ;;
+ p) CODES_MAKE_PDF=1
+ ;;
+ h|*) usage && exit 1
+ ;;
+ esac
+done
+
+shift $((OPTIND - 1))
+
+[ $# -ne 1 ] && usage && exit 1
+
+CODES_FILE="$1"
+CODES_BASENAME="${CODES_FILE%%.*}"
+CODES_EXT="${CODES_FILE##*.}"
+CODES_DIR="$PWD/${CODES_BASENAME}_${CODES_EXT}_dir"
+CODES_DATE="$(date +'%Y-%m-%d %H:%M')"
+CODES_OUTPUT="${CODES_BASENAME}_qrcodes"
+CODES_OUT_IMG="${CODES_OUTPUT}.png"
+CODES_OUT_PDF="${CODES_OUTPUT}.pdf"
+
+rm -f "$CODES_OUT_IMG" "$CODES_OUT_PDF"
+[ -d "$CODES_DIR" ] && rm -rf "$CODES_DIR"
+mkdir "$CODES_DIR"
+
+sed -e '/^#.*/ d' -e '/^\s*$/ d' < "$CODES_FILE" \
+ | xargs -I{} \
+ qrencode -l "$QRENCODE_ERR_CORR_LEVEL" -t png -d 150 \
+ -o "$CODES_DIR/{}-code.png" {}
+
+montage -title "\n$CODES_FILE\n$CODES_DATE" \
+ "$CODES_DIR/*-code.png" -page a4 -geometry 128x128\> "$CODES_OUT_IMG"
+
+[ "$CODES_MAKE_PDF" -ne 0 ] && {
+ convert \( -size 1240x1754 xc: \) "$CODES_OUT_IMG" \
+ -composite "$CODES_OUT_PDF"
+ [ "$CODES_KEEP_PNG" -eq 0 ] && rm -f "$CODES_OUT_IMG"
+ }
+
+[ "$CODES_KEEP_PNG" -eq 0 ] && rm -rf "$CODES_DIR" || exit 0
+