Wip: Works well as I'm commiting with the good user

This commit is contained in:
mrjk 2020-04-25 00:27:17 +07:00
parent f722286fda
commit ca682c6477
10 changed files with 211 additions and 75 deletions

View File

@ -35,6 +35,8 @@ IDM_DIR_ID=${IDM_DIR_ID:-$IDM_CONFIG_DIR/id}
IDM_DIR_LIB=${IDM_DIR_LIB:-$IDM_DIR_ROOT/lib} IDM_DIR_LIB=${IDM_DIR_LIB:-$IDM_DIR_ROOT/lib}
IDM_DIR_CACHE=${IDM_DIR_CACHE:-${XDG_CACHE_HOME:-~/.cache}/idmgr} IDM_DIR_CACHE=${IDM_DIR_CACHE:-${XDG_CACHE_HOME:-~/.cache}/idmgr}
IDM_SRC_WORDS='enable disable kill shell quit e d k s q'
mkdir -p $IDM_CONFIG_DIR $IDM_DIR_ID $IDM_DIR_CACHE mkdir -p $IDM_CONFIG_DIR $IDM_DIR_ID $IDM_DIR_CACHE
# Mod vars ... # Mod vars ...
@ -72,8 +74,11 @@ idm_core__help ()
printf " %-20s: %s\n" "fun " "Show internal function (debug)" printf " %-20s: %s\n" "fun " "Show internal function (debug)"
printf " %-20s: %s\n" "hier " "Show cli function (debug)" printf " %-20s: %s\n" "hier " "Show cli function (debug)"
local mods=$(idm_lib_order_get status)
echo
echo "Loaded mods: $mods"
idm_core_exec_mod $id __help "\n%s" $(idm_lib_order_get status) idm_core_exec_mod $id __help "\n%s" $mods
echo echo
lib_log NOTICE "License:" lib_log NOTICE "License:"
@ -105,8 +110,11 @@ idm_core__enable ()
if [ "${SHELL_ID-}" == "$id" ]; then if [ "${SHELL_ID-}" == "$id" ]; then
#idm_exit 0 INFO "Your workspace is already activated" #idm_exit 0 INFO "Your workspace is already activated"
lib_log WARN "Your workspace is already activated" lib_log WARN "Your workspace is already activated"
elif [ -n "${SHELL_ID-}" ]; then elif [ -n "${SHELL_ID-}" ]; then
idm_exit 0 WARN "Your workspace is already activated with $SHELL_ID" #idm_exit 0 WARN "Your workspace is already activated with $SHELL_ID"
lib_log WARN "Changing $SHELL_ID workspace to $id"
idmgr disable "${SHELL_ID-}"
fi fi
# Retrieve environment config # Retrieve environment config
@ -132,7 +140,7 @@ idm_core__disable ()
idm_core_exec_mod $id __disable "Disabling %s ..." $(idm_lib_order_get disable) idm_core_exec_mod $id __disable "Disabling %s ..." $(idm_lib_order_get disable)
# Inform user # Inform user
lib_log NOTICE "Id $id is disabled" lib_log NOTICE "Identity '$id' is unloaded"
} }
idm_core__kill () idm_core__kill ()
@ -155,8 +163,10 @@ idm_core__kill ()
########################################## ##########################################
# Dump sub commands that need to be sourved to work # Dump sub commands that need to be sourved to work
idm_core__shell_words () idm_core__shell_words_deprected ()
{ {
# REPLACED BY IDM_SRC_WORDS, does not peovides ids anymore ...
exit 777
local id=${1-} local id=${1-}
local words= local words=
@ -170,7 +180,6 @@ idm_core__shell_words ()
idm_core__shell () idm_core__shell ()
{ {
IDM_SRC_WORDS=$( $IDM_DIR_ROOT/bin/idmgr shell_words )
echo "export IDM_BIN=${IDM_BIN:-$IDM_DIR_ROOT/bin/idmgr}" echo "export IDM_BIN=${IDM_BIN:-$IDM_DIR_ROOT/bin/idmgr}"
echo "export IDM_DIR_ROOT='$IDM_DIR_ROOT'" echo "export IDM_DIR_ROOT='$IDM_DIR_ROOT'"
@ -257,8 +266,8 @@ idm_lib_order_get ()
local f=${1} local f=${1}
# >&2 echo "fmt: ${IDM_LIB_TABLEFMT%%$f*}" # >&2 echo "fmt: ${IDM_LIB_TABLEFMT%%$f*}"
#>&2 echo -e "\n>order: $f\n>table: $IDM_LIB_TABLE" #>&2 echo -e "\n>order: $f\n>table: $IDM_LIB_TABLE"
local w="ignore ${IDM_LIB_TABLEFMT%%$f*}"
f=$( wc -w <<< "ignore ${IDM_LIB_TABLEFMT%%$f*}" ) f=$( wc -w <<< "$w" )
sort -t, -k${f} <<< "$IDM_LIB_TABLE" | cut -d, -f1 | xargs sort -t, -k${f} <<< "$IDM_LIB_TABLE" | cut -d, -f1 | xargs
} }
@ -287,25 +296,7 @@ idm_lib_load ()
var_name="IDM_${type^^}_LOADED" var_name="IDM_${type^^}_LOADED"
# Rebuild vars for all modules !
case $type in
lib)
;;
mod)
local d_val d_var
;;
*)
echo "unsupported type: $type"
return 1
;;
esac
# Source lib/mods # Source lib/mods
#set -x
for name in $names; do for name in $names; do
source "$IDM_DIR_LIB/idmgr_${type}_${name}.sh" source "$IDM_DIR_LIB/idmgr_${type}_${name}.sh"
if [ "$?" -eq 0 ] ; then if [ "$?" -eq 0 ] ; then
@ -359,6 +350,7 @@ idm_mod_files ()
idm_mod_order () idm_mod_order ()
{ {
>&2 echo "DEPRECATED: idm_mod_order"
local mods=$@ local mods=$@
export IDM_MOD_FILES="$( xargs <<< $mods)" export IDM_MOD_FILES="$( xargs <<< $mods)"
@ -420,10 +412,11 @@ idm_core_init ()
# Force native library orders # Force native library orders
idm_lib_order_set id 10 90 10 idm_lib_order_set id 10 90 10
idm_lib_order_set gpg 11 89 11 #idm_lib_order_set gpg 11 89 11
idm_lib_order_set ssh 12 88 12 idm_lib_order_set ssh 12 88 12
#idm_lib_order_set git 50 50 50
idm_lib_order_set ps1 60 40 60 idm_lib_order_set ps1 60 40 60
idm_lib_order_set tomb 50 50 50 #idm_lib_order_set tomb 50 50 50
# Load external lib # Load external lib
idm_lib_load lib idm_lib_load lib
@ -750,6 +743,9 @@ idm_core_cli ()
idm_core_cli $@ idm_core_cli $@
#declare -p | grep " IDM"
exit exit
idm_lib_src () idm_lib_src ()

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
IDM_MOD_CLOUD_DEPS="s3" #IDM_MOD_CLOUD_DEPS="s3"
## Prompt functions ## Prompt functions
########################################## ##########################################

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
IDM_MOD_GIT_DEPS="s1 id ssh" #IDM_MOD_GIT_DEPS="s1 id ssh"
IDM_DISABLE_AUTO+=" git__enable git__disable git__kill " #IDM_DISABLE_AUTO+=" git__enable git__disable git__kill "
#idm_hook_register enable idm_git__enable 5 #idm_hook_register enable idm_git__enable 5
@ -420,10 +420,11 @@ idm_git__ls ()
fi fi
# Display repo infos # Display repo infos
{
echo " Work tree : $git_id_work_tree" echo " Work tree : $git_id_work_tree"
echo " Local config : $git_id_config" echo " Local config : $git_id_config"
echo " Git dir : $git_id_dir" echo " Git dir : $git_id_dir"
} | sed "s:$HOME:~:g"
} }
idm_git__enable () idm_git__enable ()

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
IDM_MOD_GPG_DEPS="s0 id" #IDM_MOD_GPG_DEPS="s0 id"
idm_gpg__help () idm_gpg__help ()

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
IDM_MOD_ID_DEPS="s0" #IDM_MOD_ID_DEPS="s0"
## Identity functions ## Identity functions
########################################## ##########################################

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
IDM_MOD_PASS_DEPS="s2" #IDM_MOD_PASS_DEPS="s2"
## Pass functions ## Pass functions

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
IDM_MOD_PS1_DEPS="s4 id pass gpg ssh" #IDM_MOD_PS1_DEPS="s4 id pass gpg ssh"
IDM_DISABLE_AUTO+="ps1__ls" #IDM_DISABLE_AUTO+="ps1__ls"
## Prompt functions ## Prompt functions
########################################## ##########################################
@ -20,10 +20,8 @@ idm_ps1__ls ()
{ {
local id=${1} local id=${1}
#set -x # Bug here: PS1 and vars are like nk existing ... weird
#echo "PS1=${SHELL_PS1:-${PS1-}}" if grep -q "($id)" <<<"${IDM_SHELL_PS1:-${PS1-}}" ; then
if grep -q "($id)" <<<"${SHELL_PS1:-${PS1-}}" ; then
echo " enabled" echo " enabled"
else else
echo " disabled" echo " disabled"

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
IDM_MOD_SSH_DEPS="s0 id gpg" #IDM_MOD_SSH_DEPS="s0 id gpg"
# trap 'idm_ssh_kill' 0 # trap 'idm_ssh_kill' 0
@ -12,7 +12,8 @@ idm_ssh__help ()
echo "Secure Shell" echo "Secure Shell"
# printf " %-20s: %s\n" "info" "Info submenu" # printf " %-20s: %s\n" "info" "Info submenu"
printf " %-20s: %s\n" "ssh ls" "List unlocked keys" printf " %-20s: %s\n" "ssh ls" "List unlocked keys"
printf " %-20s: %s\n" "ssh new" "Create new ssh key (ssh-keygen)" printf " %-20s: %s\n" "ssh tree" "Show keypairs tree"
printf " %-20s: %s\n" "ssh new [dir]" "Create new ssh key dest dir"
printf " %-20s: %s\n" "ssh add" "Unlock known keypairs" printf " %-20s: %s\n" "ssh add" "Unlock known keypairs"
printf " %-20s: %s\n" "ssh rm" "Lock known keypairs" printf " %-20s: %s\n" "ssh rm" "Lock known keypairs"
printf " %-20s: %s\n" "ssh del" "Delete keypair" printf " %-20s: %s\n" "ssh del" "Delete keypair"
@ -130,6 +131,129 @@ idm_ssh__kill ()
} }
## Extra functions
##########################################
idm_ssh__tree ()
{
local id=$1
if lib_id_has_config $id &>/dev/null; then
tree -C "$HOME/.ssh/$id"
else
tree -C "$HOME/.ssh/"
fi
}
idm_ssh__new ()
{
local id=${1-}
local dest=${2-}
local default=
local key_vers=
local key_user=
local key_host=
local key_sizes=
local key_vers="$(date +'%Y%m%d')"
#set -x
# Guess defaults
default=$(id -un)
if lib_id_has_config $id &>/dev/null; then
default=$id
if [ -z "$dest" ]; then
dest="$HOME/.ssh/$default"
fi
else
dest=${dest:-.}
fi
mkdir -p "$dest"
echo "INFO: Key destination dir: $dest"
# Login
while ! grep -q '\w\+' <<< "$key_user"; do
read -rp "> Username [$default]: " ans
key_user="${ans:-$default}"
done
# Host name
default="$(hostname -f)"
while ! grep -q '[a-zA-Z0-9.-]\+' <<< "$key_host"; do
read -rp "> Hostname [$default]: " ans
#echo ""
key_host="${ans:-$default}"
done
# Keys sizes
default="ns"
echo "Please choose key types:"
echo "n) ed25519 strongest, fast"
echo "s) rsa4096 most compatible, slow"
echo "o) rsa2048 old compatility"
while ! grep -q '[nso]\+' <<< "$key_sizes"; do
echo -n "> Key types [$default]: "
read -n 3 -r ans
echo ""
key_sizes="${ans:-$default}"
done
# Ask password
echo "Define key passphrase for the key(s)."
echo "Leave it empty for no password (not recommemded)."
echo -n "> Key passphrase [none]: "
read -rs key_pass
echo
key_pass="${key_pass:-}"
ans=""
while [ "$ans" != "$key_pass" ]; do
echo -n "> Confirm passphrase: "
read -rs ans
echo
done
# Create keys
local size=$key_sizes
while [ -n "$size" ]; do
local k=${size:0:1}
echo -e "\n> Generating key ..."
set +e
case $k in
n)
ssh-keygen -f "$dest/${key_user}_ed25519_${key_vers}" \
-t ed25519 -a 100 \
-N "$key_pass" \
-C "${key_user}@${key_host}:ed25519_${key_vers}"
;;
s)
ssh-keygen -f "$dest/${key_user}_rsa4096_${key_vers}" \
-t rsa -b 4096 -o -a 500 \
-N "$key_pass" \
-C "${key_user}@${key_host}:rsa4096_${key_vers}"
;;
o)
ssh-keygen -f "$dest/${key_user}_rsa2048_${key_vers}" \
-t rsa -b 2048 -o -a 100 \
-N "$key_pass" \
-C "${key_user}@${key_host}:rsa2048_${key_vers}"
;;
esac
set -e
size=${size:1}
done
echo
echo "INFO: Key(s) has been created in $dest"
}
## Agent functions ## Agent functions
########################################## ##########################################
@ -216,7 +340,7 @@ idm_ssh__agent_clean ()
## Extended functions ## Extended functions
########################################## ##########################################
idm_ssh_add () idm_ssh__add ()
{ {
local id=$1 local id=$1
local key=${2-} local key=${2-}
@ -230,7 +354,7 @@ idm_ssh_add ()
pub_keys=$( pub_keys=$(
{ {
# Compat mode # Compat mode
find ~/.ssh/id -maxdepth $maxdepth -name "${id}_*" -name '*pub' -name "*$1*" | sort #find ~/.ssh/id -maxdepth $maxdepth -name "${id}_*" -name '*pub' -name "*$1*" | sort
# New mode (test) # New mode (test)
find ~/.ssh/$id -maxdepth $maxdepth -name "${id}_*" -name '*pub' -name "*$1*" | sort find ~/.ssh/$id -maxdepth $maxdepth -name "${id}_*" -name '*pub' -name "*$1*" | sort
@ -240,7 +364,7 @@ idm_ssh_add ()
pub_keys=$(find ~/.ssh/$id -maxdepth $maxdepth -name "${id}_*" -name '*pub' | sort) pub_keys=$(find ~/.ssh/$id -maxdepth $maxdepth -name "${id}_*" -name '*pub' | sort)
fi fi
echo "$pub_keys" #echo "$pub_keys"
# Get list of key # Get list of key
local key_list="" local key_list=""
@ -260,7 +384,7 @@ idm_ssh_add ()
idm_exit 0 WARN "No keys found" idm_exit 0 WARN "No keys found"
lib_log INFO "Adding keys:" lib_log INFO "Adding keys:"
xargs -n 1 <<<$key_list | lib_log DUMP - xargs -n 1 <<<$key_list | sed "s:$HOME:~:" | lib_log DUMP -
echo "" echo ""
ssh-add $key_list ssh-add $key_list

View File

@ -1,12 +1,12 @@
#!/bin/bash #!/bin/bash
IDM_MOD_TOMB_DEPS="s3 id gpg git" #IDM_MOD_TOMB_DEPS="s3 id gpg git"
IDM_MOD_TAGS="id tool" #IDM_MOD_TAGS="id tool"
IDM_MOD_PROG="safe yadm" #IDM_MOD_PROG="safe yadm"
IDM_MOD_PREF="core id" #IDM_MOD_PREF="core id"
#
IDM_DISABLE_AUTO+=" tomb__enable tomb__disable tomb__kill " #IDM_DISABLE_AUTO+=" tomb__enable tomb__disable tomb__kill "
#
## Environments ## Environments

View File

@ -1,45 +1,62 @@
#!/bin/bash #!/bin/bash
export IDM_SHELL_PS1=${IDM_SHELL_PS1:-${PS1-}} idmgr_shell_words ()
IDM_SRC_WORDS=${IDM_SRC_WORDS-}
IDM_BIN=${IDM_BIN:-idmgr}
i ()
{ {
# Generate command/ids list to be sourced
local IDM_SRC_CMDS='enable disable kill shell quit e d k s q'
local IDM_SRC_IDS=$(find "$XDG_CONFIG_HOME/idmgr/id/" \
-type f -name "*.env" \
-printf "%f " | sed 's/\.env//g')
if grep -q ":${1:-NONE}:" <<<"${IDM_SRC_WORDS}"; then echo "$IDM_SRC_CMDS $IDM_SRC_IDS"
}
result="$( $IDM_BIN $@)"
idmgr_shell ()
{
IDM_SRC_WORDS="${IDM_SRC_WORDS:-$(idmgr_shell_words)}"
# Check if must be sourced or not
if [[ "${IDM_SRC_WORDS// /:}" =~ :$1: ]]; then
# Get output source
>&2 echo "INFO : Running sourced command ..."
shell_exec="$( command idmgr $@)"
# Debug module # Debug module
if [ "${ID_DEBUG-}" == "true" ]; then if [ "${ID_DEBUG-}" == "true" ]; then
if [ "${result:-NONE}" == "NONE" ]; then if [ "${shell_exec:-NONE}" == "NONE" ]; then
echo "======= ${result:-NONE}" echo "======= ${shell_exec:-NONE}"
else else
echo ======= Shell has sourced ======= echo ======= Shell has sourced =======
echo "${result:-NONE}" echo "${shell_exec:-NONE}"
echo ======= echo =======
fi fi
fi fi
# Parse output # Exec output
eval "$result" eval "$shell_exec"
else else
$IDM_BIN $@ # Execute as regular command
command idmgr $@
fi fi
} }
# Set aliases
alias idmgr='idmgr_shell'
alias i='idmgr'
# Save current state
export PS1="$PS1"
export IDM_SHELL_PS1=${IDM_SHELL_PS1:-${PS1-}}
# Disable when pressing C-b in shell :) # Disable when pressing C-b in shell :)
bind -x '"\C-b": i disable' bind -x '"\C-b": i disable'
# Show current identities # Show current identities
echo "INFO: idmgr has been loaded, use 'idmgr' or 'i' to call it" echo "INFO: idmgr has been loaded, use 'idmgr' or 'i' to call it"
#$IDM_BIN id ls idmgr id ls