diff --git a/connect-vpn/action.yml b/connect-vpn/action.yml index c61936e..bddf7fa 100644 --- a/connect-vpn/action.yml +++ b/connect-vpn/action.yml @@ -26,10 +26,10 @@ inputs: description: TOTP 시드 키 (이 값으로 매 실행 OTP 코드를 로컬 생성) otp-seed-format: required: false - default: "base32" + default: "base64" description: > - OTP 시드 포맷. base32=구글OTP류 문자열(대문자/공백은 자동 정규화), - hex=16진수 문자열. base32에서 'Base32 invalid' 나면 hex로 시도. + OTP 시드 포맷. base32=구글OTP류 문자열(대문자/공백 자동 정규화), + hex=16진수 문자열, base64=base64로 인코딩된 키(예 R1F5...== → 디코딩 후 사용). otp-mode: required: false default: "append" @@ -141,8 +141,16 @@ runs: hex) OTP=$(oathtool --totp "$SEED") ;; + base64) + # base64 키를 디코딩 → raw 바이트를 hex로 변환 → oathtool에 hex로 전달 + SEED_HEX=$(printf '%s' "$SEED" | base64 -d 2>/dev/null | od -An -v -tx1 | tr -d ' \n') + if [ -z "$SEED_HEX" ]; then + echo "base64 디코딩 실패: 시드가 올바른 base64인지 확인"; exit 1 + fi + OTP=$(oathtool --totp "$SEED_HEX") + ;; *) - echo "잘못된 otp-seed-format: $OTP_SEED_FORMAT (base32|hex)"; exit 1 + echo "잘못된 otp-seed-format: $OTP_SEED_FORMAT (base32|hex|base64)"; exit 1 ;; esac