#!/bin/sh # credentials # Written in 2019 by Lucas # CC0 1.0 Universal/Public domain - No rights reserved # # To the extent possible under law, the author(s) have dedicated all # copyright and related and neighboring rights to this software to the # public domain worldwide. This software is distributed without any # warranty. You should have received a copy of the CC0 Public Domain # Dedication along with this software. If not, see # . usage() { printf "Usage: %s [-2pu] service\n" "${0##*/}" >&2 exit 1 } err() { printf "%s: %s\n" "${0##*/}" "$*" >&2 exit 1 } clip() { xclip -q -r -l 1 -sel clip 2>/dev/null } get_user() { printf user sekrit get "services/$1/user" | clip && printf "\n" } get_pass() { printf pass sekrit get "services/$1/pass" | clip && printf "\n" } get_2fa() { printf 2fa otpcli_opts= case $1 in isnic) otpcli_opts="-H sha512 -d 8" ;; esac sekrit get "services/$1/2fa" | otpcli $otpcli_opts | clip && printf "\n" } get_from_flags() { service=$1 user=$2 pass=$3 sfa=$4 if [ $user = yes ]; then sekrit has services/"$service"/user || err "Service \"$service\" has no user." fi if [ $pass = yes ]; then sekrit has services/"$service"/pass || err "Service \"$service\" has no pass." fi if [ $sfa = yes ]; then sekrit has services/"$service"/2fa || err "Service \"$service\" has no 2fa." fi [ $user = yes ] && get_user "$service" [ $pass = yes ] && get_pass "$service" [ $sfa = yes ] && get_2fa "$service" } get_all() { service=$1 sekrit has "services/$service/pass" || err "Unknown service \"$service\"." sekrit has "services/$service/user" && get_user "$service" get_pass "$service" sekrit has "services/$service/2fa" && get_2fa "$service" } sfa=no pass=no user=no while getopts 2pu flag; do case $flag in 2) sfa=yes ;; p) pass=yes ;; u) user=yes ;; *) usage ;; esac done shift $(($OPTIND - 1)) [ $# -eq 1 ] && [ -n "$1" ] || usage service=$1 if [ $sfa = yes ] || [ $pass = yes ] || [ $user = yes ]; then get_from_flags "$service" $user $pass $sfa else get_all "$service" fi