VNC WebSocket 인증 문제 해결 및 사용자 포털 계획 추가

- Proxmox VNC 티켓 생성 시 패스워드 생성 활성화
- VNC 세션에 생성된 패스워드 저장 및 전달
- noVNC 클라이언트에서 실제 패스워드 사용으로 인증 문제 해결
- ES6 모듈 방식으로 noVNC 라이브러리 로드
- HTML 엔티티 디코딩으로 WebSocket URL 문제 해결
- PharmQ 사용자 포털 서비스 계획서 추가 (KakaoTalk SSO, TossPayments)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-09-11 22:56:58 +09:00
parent 2cfe37fd53
commit 895b7a8ee7
4 changed files with 452 additions and 27 deletions

View File

@@ -106,7 +106,10 @@ class ProxmoxClient:
def get_vnc_ticket(self, node: str, vmid: int) -> Optional[Dict]:
"""VNC 접속 티켓 생성"""
try:
data = {'websocket': '1'}
data = {
'websocket': '1',
'generate-password': '1' # 패스워드 생성 활성화
}
response = self.session.post(
f"{self.base_url}/nodes/{node}/qemu/{vmid}/vncproxy",
data=data,
@@ -115,15 +118,21 @@ class ProxmoxClient:
if response.status_code == 200:
vnc_data = response.json()['data']
print(f"✅ VNC 티켓 생성 성공: {vnc_data}")
# WebSocket URL 생성
encoded_ticket = quote_plus(vnc_data['ticket'])
vnc_data['websocket_url'] = f"wss://{self.host}:443/api2/json/nodes/{node}/qemu/{vmid}/vncwebsocket?port={vnc_data['port']}&vncticket={encoded_ticket}"
# 디버깅 정보 추가
print(f"🔗 WebSocket URL: {vnc_data['websocket_url']}")
return vnc_data
else:
print(f"❌ VNC 티켓 생성 HTTP 오류: {response.status_code}")
print(f"Response: {response.text}")
except Exception as e:
print(f"VNC 티켓 생성 실패: {e}")
print(f"VNC 티켓 생성 실패: {e}")
return None