2016-06-30 17:34:07 -07:00
|
|
|
#!/usr/bin/env bash
|
2019-01-07 01:04:17 -05:00
|
|
|
set -eo pipefail
|
|
|
|
|
[[ $DOKKU_TRACE ]] && set -x
|
2016-06-30 17:34:07 -07:00
|
|
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
2016-07-01 11:42:16 -07:00
|
|
|
source "$PLUGIN_AVAILABLE_PATH/ssh-keys/functions"
|
2016-06-30 17:34:07 -07:00
|
|
|
|
2020-02-09 22:41:39 -05:00
|
|
|
cmd-ssh-keys-add() {
|
2016-06-30 17:34:07 -07:00
|
|
|
declare desc="add a new key via sshcommand"
|
2020-02-10 01:40:30 -05:00
|
|
|
declare cmd="ssh-keys:add"
|
2019-04-22 16:34:06 -04:00
|
|
|
[[ "$1" == "$cmd" ]] && shift 1
|
|
|
|
|
declare NAME="$1" KEY_FILE="$2"
|
2019-04-22 16:49:50 -04:00
|
|
|
local TMP_KEY_FILE
|
2020-02-10 01:40:30 -05:00
|
|
|
|
2019-08-12 18:16:16 -04:00
|
|
|
TMP_KEY_FILE=$(mktemp "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX")
|
2019-05-20 17:56:50 -07:00
|
|
|
trap "rm -rf '$TMP_KEY_FILE' >/dev/null" RETURN INT TERM EXIT
|
2019-04-22 16:34:06 -04:00
|
|
|
|
|
|
|
|
if [[ -n "$KEY_FILE" ]]; then
|
2019-04-22 16:49:50 -04:00
|
|
|
true
|
2019-04-22 16:34:06 -04:00
|
|
|
elif [[ -p /dev/stdin ]]; then
|
2019-04-22 16:49:50 -04:00
|
|
|
local key_contents
|
2019-04-22 16:34:06 -04:00
|
|
|
read -r key_contents
|
2019-04-23 12:21:43 -04:00
|
|
|
echo "$key_contents" >"$TMP_KEY_FILE"
|
2019-04-22 16:49:50 -04:00
|
|
|
KEY_FILE="$TMP_KEY_FILE"
|
2019-04-22 16:34:06 -04:00
|
|
|
else
|
|
|
|
|
dokku_log_fail "No key specified via file or pipe"
|
|
|
|
|
fi
|
|
|
|
|
|
2019-04-23 14:21:40 -04:00
|
|
|
if [[ ! -s "$KEY_FILE" ]]; then
|
2019-04-23 12:21:43 -04:00
|
|
|
dokku_log_fail "Empty key was specified"
|
2016-06-30 17:34:07 -07:00
|
|
|
fi
|
2019-04-22 16:34:06 -04:00
|
|
|
|
2019-05-12 19:08:55 -04:00
|
|
|
local count="$(wc -l "$KEY_FILE" | awk '{ print $1; }')"
|
2019-06-12 22:16:02 +01:00
|
|
|
# Don't check for "-eq 1" as no newlines is also a valid SSH key
|
|
|
|
|
[[ "$count" -lt 2 ]] || dokku_log_fail "Too many keys provided, set one per invocation of dokku ssh-keys:add <NAME> <KEY_FILE>"
|
2019-04-22 16:49:50 -04:00
|
|
|
ssh-keygen -lf "$KEY_FILE" &>/dev/null || dokku_log_fail "Key specified in is not a valid ssh public key"
|
2016-11-21 19:08:33 -07:00
|
|
|
create_ssh_key_file
|
2016-06-30 17:34:07 -07:00
|
|
|
verify_ssh_key_exists
|
2019-04-22 16:49:50 -04:00
|
|
|
sshcommand acl-add dokku "$NAME" "$KEY_FILE" || dokku_log_fail "sshcommand returned an error: $?"
|
2016-10-15 23:55:43 +02:00
|
|
|
verify_ssh_key_file
|
2016-06-30 17:34:07 -07:00
|
|
|
}
|
|
|
|
|
|
2020-02-09 22:41:39 -05:00
|
|
|
cmd-ssh-keys-add "$@"
|