all repos — dotfiles @ fd9c7318a79da6471c5f6eb8b5f3c8215f0c957a

personal dotfiles

add print_codes script
la-ninpre leobrekalini@gmail.com
Tue, 25 May 2021 00:56:00 +0300
commit

fd9c7318a79da6471c5f6eb8b5f3c8215f0c957a

parent

261717a0a5dd5a9e5ec7e1151e2fc79457bc5f10

1 files changed, 97 insertions(+), 0 deletions(-)

jump to
A .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 +