From 69642a90418bc0a465a103900b2e987a7c5e6c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Ortega=20Froysa?= Date: Fri, 18 Aug 2023 11:01:04 +0200 Subject: [PATCH] Add d6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Nicolás Ortega Froysa --- d6 | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100755 d6 diff --git a/d6 b/d6 new file mode 100755 index 0000000..1280b72 --- /dev/null +++ b/d6 @@ -0,0 +1,118 @@ +#!/bin/bash +# This is free and unencumbered software released into the public domain. +# +# Anyone is free to copy, modify, publish, use, compile, sell, or +# distribute this software, either in source code form or as a compiled +# binary, for any purpose, commercial or non-commercial, and by any +# means. +# +# In jurisdictions that recognize copyright laws, the author or authors +# of this software dedicate any and all copyright interest in the +# software to the public domain. We make this dedication for the benefit +# of the public at large and to the detriment of our heirs and +# successors. We intend this dedication to be an overt act of +# relinquishment in perpetuity of all present and future rights to this +# software under copyright law. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +# For more information, please refer to + +VERSION="1.0" + +function print_usage() { + echo "USAGE: d6 [OPTIONS]" +} + +function print_help() { + print_usage + echo "OPTIONS: + -v print program version + -h print this help information + -n number of words in generated password (default 3) + -f custom dictionary file (default + ~/.local/share/wordlist.txt) + -d delimiter used between words (default \"\", i.e. NONE) + -c the case used for the generated words, can be: upper, + lower, capital (default \"capital\")" +} + +function test_case() { + if [ $1 != "lower" ] && [ $1 != "upper" ] && [ $1 != "capital" ] + then + return 1 + else + return 0 + fi +} + +NUM_WORDS=3 +WORDLIST="$HOME/.local/share/wordlist.txt" +DELIMITER="" +CASE="capital" + +while getopts "vhn:f:d:c:" arg +do + case $arg in + v) + echo "d6 v$VERSION" + exit 0;; + h) + print_help + exit 0;; + n) + NUM_WORDS=$OPTARG;; + f) + WORDLIST="$OPTARG";; + d) + DELIMITER="$OPTARG";; + c) + if test_case $OPTARG + then + CASE="$OPTARG" + else + echo "'$OPTARG' is an invalid case. Use 'capital', 'lower', or 'upper'." + exit 1 + fi;; + ?) + print_usage + exit 2 + esac +done + +WORDS="" + +for i in $(seq 1 $NUM_WORDS) +do + ROLLS="" + for j in {1..5} + do + ROLLS="$((1 + $RANDOM % 6))$ROLLS" + done + + if [ $CASE == "upper" ] + then + WORD="$(awk "/$ROLLS/{ print toupper(\$2) }" $WORDLIST)" + elif [ $CASE == "lower" ] + then + WORD="$(awk "/$ROLLS/{ print tolower(\$2) }" $WORDLIST)" + else + WORD="$(awk "/$ROLLS/{ print \$2 }" $WORDLIST)" + WORD="${WORD^}" + fi + + if [ $i -eq $NUM_WORDS ] + then + WORDS="${WORDS}${WORD}" + else + WORDS="${WORDS}${WORD}${DELIMITER}" + fi +done + +echo "$WORDS"