all repos — dotfiles @ fd9c7318a79da6471c5f6eb8b5f3c8215f0c957a

personal dotfiles

.local/bin/print_codes (view raw)

 1#!/bin/sh
 2
 3# Copyright (c) 2021, la-ninpre
 4#
 5# Permission to use, copy, modify, and/or distribute this software for any
 6# purpose with or without fee is hereby granted, provided that the above
 7# copyright notice and this permission notice appear in all copies.
 8# 
 9# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17
18# small script to create page with qr-coded recovery tokens for otp
19# uses: qrencode, imagemagick(convert, montage)
20#
21# file with codes should be in following format:
22# - recovery codes should be on separate lines
23# - every line beginning with # is ignored
24
25QRENCODE_ERR_CORR_LEVEL=H
26CODES_KEEP_PNG=0
27CODES_MAKE_PDF=0
28
29usage() {
30    echo "create qr-coded recovery tokens for easy printing"
31    echo
32    echo "USAGE:"
33    echo "  $0 [OPTIONS] <text-file>"
34    echo
35    echo "OPTIONS:"
36    echo "  -k  keep png files with qrcodes"
37    echo "  -l {L,M,Q,H}"
38    echo "      set qrencode error correction level"    
39    echo "  -p  produce pdf instead of image"
40    echo "  -h  print this help message"
41    echo
42}
43
44while getopts kl:ph arg
45do
46    case "$arg" in
47        k) CODES_KEEP_PNG=1
48            ;;
49        l) case $OPTARG in
50            [lL]) QRENCODE_ERR_CORR_LEVEL=L ;;
51            [mM]) QRENCODE_ERR_CORR_LEVEL=M ;;
52            [qQ]) QRENCODE_ERR_CORR_LEVEL=Q ;;
53            [hH]) QRENCODE_ERR_CORR_LEVEL=H ;;
54            *)  echo "error correction level should be one of L, M, Q or H"
55                exit 1 ;;
56            esac
57            ;;
58        p) CODES_MAKE_PDF=1
59            ;;
60        h|*) usage && exit 1
61            ;;
62    esac
63done
64
65shift $((OPTIND - 1))
66
67[ $# -ne 1 ] && usage && exit 1
68
69CODES_FILE="$1"
70CODES_BASENAME="${CODES_FILE%%.*}"
71CODES_EXT="${CODES_FILE##*.}"
72CODES_DIR="$PWD/${CODES_BASENAME}_${CODES_EXT}_dir"
73CODES_DATE="$(date +'%Y-%m-%d %H:%M')"
74CODES_OUTPUT="${CODES_BASENAME}_qrcodes"
75CODES_OUT_IMG="${CODES_OUTPUT}.png"
76CODES_OUT_PDF="${CODES_OUTPUT}.pdf"
77
78rm -f "$CODES_OUT_IMG" "$CODES_OUT_PDF"
79[ -d "$CODES_DIR" ] && rm -rf "$CODES_DIR"
80mkdir "$CODES_DIR"
81
82sed -e '/^#.*/ d' -e '/^\s*$/ d' < "$CODES_FILE" \
83    | xargs -I{} \
84    qrencode -l "$QRENCODE_ERR_CORR_LEVEL" -t png -d 150 \
85    -o "$CODES_DIR/{}-code.png" {}
86
87montage -title "\n$CODES_FILE\n$CODES_DATE" \
88    "$CODES_DIR/*-code.png" -page a4 -geometry 128x128\> "$CODES_OUT_IMG"
89
90[ "$CODES_MAKE_PDF" -ne 0 ] && {
91    convert \( -size 1240x1754 xc: \) "$CODES_OUT_IMG" \
92        -composite "$CODES_OUT_PDF"
93    [ "$CODES_KEEP_PNG" -eq 0 ] && rm -f "$CODES_OUT_IMG"
94    }
95
96[ "$CODES_KEEP_PNG" -eq 0 ] && rm -rf "$CODES_DIR" || exit 0
97