From ca2fafa21461b2f9def5ab76f7c902a19d2cef42 Mon Sep 17 00:00:00 2001 From: "kihwan.song" Date: Mon, 13 Jul 2026 11:45:26 +0900 Subject: [PATCH] =?UTF-8?q?vpn=20=EC=84=B8=ED=8C=85=20=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EB=A6=BD=ED=8A=B8=20=EC=88=98=EC=A0=95=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- connect-vpn/action.yml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) 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