-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
コマンドの引数が間違えていた場合のメッセージ改善 #33
Comments
全体的に入力チェックを厳しくするという話なのかもしれませんが、とりあえず 調査現在の if ! curl -s "https://github.com/${USERNAME}.keys" | head -n 1 >"$PATHPUBKEY"; then
echo "NG:公開鍵を取得・保存できませんでした。"
exit 1
fi 上記処理の curl で 1つ目は、
対策としては
2つ目は、
対策はパイプをやめてファイル経由で処理するか、出力した公開キーが空でないことをチェックするかでしょうか。 curl --fail -s "https://github.com/${USERNAME}.keys" | head -n 1 >"$PATHPUBKEY"
if [ ! -s "$PATHPUBKEY" ]; then
echo "NG:公開鍵を取得・保存できませんでした。"
exit 1
fi 影響範囲
また、パイプでつないで終了コードを判定しているものは上記以外では、以下があります。
if ! (tar cz "$INPUTFILE" | openssl enc -e -aes-256-cbc -salt -k "$PASSWORD" -out "${TEMPDIR}${OUTPUTFILE}"); then
echo "NG:ファイルを圧縮・暗号化できませんでした。"
exit 1
fi |
確かに POSIX 対応を考えた場合 以下のように愚直に 1 ステップずつ確認していった方がいいかもしれませんね。(テストも作りやすくなるし) list_keys="$(curl --fail -s "https://github.com/${USERNAME}.keys")" || {
echo "NG:公開鍵を取得できませんでした。"
exit 1
}
# 公開鍵の保存
echo "$list_keys" | head -n 1 >"$PATHPUBKEY" || {
echo "NG:公開鍵を保存できませんでした。"
exit 1
} テストの例#shellcheck shell=sh
getContents() {
url_target="${1:?'URL missing'}"
list_keys="$(curl --fail -s "$url_target" 2>&1)" || {
echo >&2 "NG: ファイルの取得に失敗しました。(URL: ${url_target})"
echo >&2 "$list_keys"
return 1
}
echo "$list_keys"
}
getKeyPublic() {
name_user="${1:?'GitHub user name missing'}"
url_github_pubkey="https://github.com/${name_user}.keys"
key_user="$(getContents "$url_github_pubkey") 2>&1" || {
echo >&2 "NG: 公開鍵の取得に失敗しました。(URL: ${url_github_pubkey})"
echo >&2 "$list_keys"
return 1
}
echo "$key_user"
}
Describe "getKeyPublic"
It 'should print the list of pub keys in GitHub'
name_user='KEINOS'
When call getKeyPublic "$name_user"
The status should be success
The stdout should include 'ssh-rsa'
The stderr should be blank
End
It 'should print err with status 1 when GitHub user name is missing or empty'
When run getKeyPublic "$UNKNOWN"
The status should be failure # status is 1-255
The stdout should be blank
The stderr should include "GitHub user name missing"
End
End
Describe 'getContents'
It 'should print err with status 1 when URL is 404'
url_ng='https://github.com/KEINOS/unknown_repo/'
When call getContents "$url_ng"
The status should be failure # status is 1-255
The stdout should be blank
The stderr should include "ファイルの取得に失敗しました"
End
It 'should print err with status 1 when URL is invalid'
url_ng='https://gitogitohub.com/FOOBAR/unknown_repo/'
When call getContents "$url_ng"
The status should be failure # status is 1-255
The stdout should be blank
The stderr should include "ファイルの取得に失敗しました"
End
End |
下記は引数の順番を間違えているのに、公開鍵のアクセス権に問題があるように見えます。
(Issue #31 より)
引数の順番の検知、もしくはエラー内容に引数の順番に間違いがないかなど、もう少しユーザに優しくてもいいと思います。
The text was updated successfully, but these errors were encountered: