style(unitproc/):Shorten names of template prefix (bktemp -> bkt)
[BK-2020-03.git] / unitproc / bkt-check_resembles_gpg_fingerprint
diff --git a/unitproc/bkt-check_resembles_gpg_fingerprint b/unitproc/bkt-check_resembles_gpg_fingerprint
new file mode 100644 (file)
index 0000000..ff5a39f
--- /dev/null
@@ -0,0 +1,89 @@
+#!/usr/bin/env bash
+
+yell() { echo "$0: $*" >&2; } # print script path and all args to stderr
+die() { yell "$*"; exit 111; } # same as yell() but non-zero exit status
+try() { "$@" || die "cannot $*"; } # runs args as command, reports args if command fails
+check_resembles_gpg_fingerprint() {
+    # Desc: Checks if input string looks like gpg fingerprint
+    # Usage: check_resembles_gpg_fingerprint arg1
+    # Input: arg1: string
+    # Output: exit code: 0 if arg1 is fingerprint, 1 otherwise
+    # Depends: yell(), die(), try()
+    # Version: 0.0.1
+    local pattern1 pattern2 input input_length
+
+    # Check args
+    if [[ $# -ne 1 ]]; then
+       die "ERROR:Invalid number of arguments:$#";
+    else
+       input="$1";
+    fi;
+
+    ## Trim leading `0x`
+    pattern1="(0x)(.*)";
+    if [[ $input =~ $pattern1 ]]; then
+       input="${input:2}";
+       #yell "DEBUG:input:$input";
+    fi;
+    
+    ## Check if char count multiple of 8
+    input_length="${#input}";
+    if [[ ! $(( input_length % 8 )) -eq 0 ]]; then
+       yell "DEBUG:Length not a multiple of 8:$input_length:$input";
+       return 1;
+    fi;
+
+    ## Check if hexadecimal
+    pattern2="[0-9A-Fa-f]{8,40}";
+    if [[ $1 =~ $pattern2 ]]; then
+       #yell "DEBUG:is a fingerprint:$arg";
+       return 0;
+    else
+       #yell "DEBUG:Not a fingerprint:$arg";
+       return 1;
+    fi;
+}; # Checks if input string looks like gpg fingerprint
+
+
+# test code
+myVar="0xdc3469c9";
+if check_resembles_gpg_fingerprint "$myVar"; then
+    yell "Looks like a gpg fingerprint:$myVar";
+else
+    yell "Doesn't look like a gpg fingerprint:$myVar";
+fi;
+
+myVar="69B4C4CDC628F8F9";
+if check_resembles_gpg_fingerprint "$myVar"; then
+    yell "Looks like a gpg fingerprint:$myVar";
+else
+    yell "Doesn't look like a gpg fingerprint:$myVar";
+fi;
+
+myVar="26646D99CBAEC9B81982EF6029D9EE6B1FC730C1";
+if check_resembles_gpg_fingerprint "$myVar"; then
+    yell "Looks like a gpg fingerprint:$myVar";
+else
+    yell "Doesn't look like a gpg fingerprint:$myVar";
+fi;
+
+myVar="deadbeef";
+if check_resembles_gpg_fingerprint "$myVar"; then
+    yell "Looks like a gpg fingerprint:$myVar";
+else
+    yell "Doesn't look like a gpg fingerprint:$myVar";
+fi;
+
+myVar="foobar";
+if check_resembles_gpg_fingerprint "$myVar"; then
+    yell "Looks like a gpg fingerprint:$myVar";
+else
+    yell "Doesn't look like a gpg fingerprint:$myVar";
+fi;
+
+myVar="zzzzzzzz";
+if check_resembles_gpg_fingerprint "$myVar"; then
+    yell "Looks like a gpg fingerprint:$myVar";
+else
+    yell "Doesn't look like a gpg fingerprint:$myVar";
+fi;