#!/bin/sh # credentials # Written in 2019-2020 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() { cat - <<. >&2 Usage: ${0##*/} [-2pu] service . 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 cp "$1/user" && printf "\n" } get_pass() { printf pass sekrit cp "$1/pass" && printf "\n" } get_2fa() { printf 2fa otpcli_opts= case $1 in isnic) otpcli_opts="-H sha512 -d 8" ;; esac sekrit get "$1/2fa" | otpcli $otpcli_opts | clip && printf "\n" } get_service() { service=$1 user=$2 pass=$3 sfa=$4 if [ $user = no ] && [ $pass = no ] && [ $sfa = no ]; then sekrit has "$service/pass" || err "unknown service $service" pass=yes sekrit has "$service/user" && user=yes sekrit has "$service/2fa" && sfa=yes fi if [ $user = check ]; then sekrit has "$service/user" || err "service $service has no user" user=yes fi if [ $pass = check ]; then sekrit has "$service/pass" || err "service $service has no pass" pass=yes fi if [ $sfa = check ]; then sekrit has "$service/2fa" || err "service $service has no 2fa" sfa=yes fi [ $user = yes ] && get_user "$service" [ $pass = yes ] && get_pass "$service" [ $sfa = yes ] && get_2fa "$service" } sfa=no pass=no user=no while getopts 2pu flag; do case $flag in 2) sfa=check ;; p) pass=check ;; u) user=check ;; *) usage ;; esac done shift $((OPTIND - 1)) [ $# -eq 1 ] && [ -n "$1" ] || usage key=$1 : ${SEKRIT_DIR:=~/keep/sekrit/services} export SEKRIT_DIR get_account "$key" $user $pass $mfa