From 6ddeed2173138f41bb51220d6a8f6758305b1d4c Mon Sep 17 00:00:00 2001 From: imnyang Date: Mon, 23 Jun 2025 19:59:51 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EC=98=A8=EB=8F=84=20=EC=84=A4=EC=A0=95?= =?UTF-8?q?=20=EB=B0=8F=20OAuth=20=EC=A0=9C=EA=B3=B5=EC=9E=90=20=EC=8B=9D?= =?UTF-8?q?=EB=B3=84=20=ED=94=84=EB=A1=AC=ED=94=84=ED=8A=B8=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/llm/__init__.py | 2 +- lib/llm/prompt/auth_list.py | 62 ++++++++++++++++--------------------- lib/llm/prompt/fallback.py | 4 +-- run.py | 4 +-- setup.py | 3 +- 5 files changed, 33 insertions(+), 42 deletions(-) diff --git a/lib/llm/__init__.py b/lib/llm/__init__.py index 2c41b3f..4463eff 100644 --- a/lib/llm/__init__.py +++ b/lib/llm/__init__.py @@ -21,5 +21,5 @@ def CreateChatGoogleGenerativeAI(model: str): }, callbacks=[QuotaExhaustedHandler()], # API 호출 간격 조정 - temperature=0.1, + temperature=0.0, ) diff --git a/lib/llm/prompt/auth_list.py b/lib/llm/prompt/auth_list.py index 193c472..ad32f40 100644 --- a/lib/llm/prompt/auth_list.py +++ b/lib/llm/prompt/auth_list.py @@ -1,58 +1,48 @@ # OAuth 리스트 추출용 프롬프트 (클릭하지 않고 단순 식별만) extract_oauth_list_prompt = f""" -🎯 목적: 로그인 페이지에서 **OAuth 제공자 리스트 추출** +🎯 목적: 주어진 초기 URL 내에서 **OAuth 로그인 URL**을 찾아 아래 형식의 JSON으로 정리합니다. -📌 주요 규칙: -- ❌ **OAuth 버튼을 클릭하지 마세요** -- ✅ **OAuth 제공자만 식별하고 리스트 작성** -- ❌ 일반 로그인은 무시 -- ❌ 검색 엔진 사용 금지 +📌 작업 목표: +- Google, GitHub, Discord, Facebook, Apple 등 **OAuth 인증을 사용하는 외부 로그인 링크**를 모두 수집합니다. +- 로그인 버튼, 링크 클릭 등을 통해 탐색을 진행할 수 있습니다. +- OAuth URL이 실제로 포함된 최종 리디렉션 URL 또는 팝업 주소를 캡처합니다. +- **같은 provider가 여러 번 나와도 가장 대표적인 URL 하나만 저장**합니다. ---- +🛑 제한 사항: +- ❌ 로그인 입력창이나 이메일/비밀번호 입력 방식은 제외합니다. +- ❌ 검색 엔진, 사이트 외부 탐색은 금지합니다. -## 🔍 Step 1: 로그인 페이지 접근 +🔍 탐색 방법: +1. 초기 URL에 접속하여 **클라이언트용 로그인 페이지**로 진입합니다. +2. 페이지가 정상적으로 로드되었다고 가정합니다. +3. 'Continue with X', 'Continue with Google'... 등의 버튼이나 링크를 클릭합니다. +4. 버튼 클릭 시 리디렉션되거나 팝업이 열린다면 해당 주소를 확인합니다. -* 초기 URL에 접속하여 **클라이언트용 로그인 페이지**로 진입합니다. -* 쿠키 동의, 팝업 등은 무시하거나 닫고 계속 진행하세요. ---- - -## 👀 Step 2: OAuth 제공자 식별 - -아래 **OAuth SSO 버튼들만** 식별합니다: - -**유효한 OAuth 제공자들**: -* ✅ Google, GitHub, Facebook, LinkedIn, Microsoft, Naver, Kakao, Apple, Twitter/X -* ✅ "Continue with..." 또는 "Sign in with..." 버튼들 -* ✅ OAuth 아이콘이 있는 버튼들 - -**제외할 항목들**: -* ❌ 일반 로그인 (이메일/비밀번호 입력) -* ❌ 패스키 (Passkey) -* ❌ 전화번호 인증 -* ❌ 인증서 기반 로그인 - ---- - -## 📝 Step 3: 결과 반환 - -발견된 OAuth 제공자들을 다음 형식으로 반환: +🧾 출력 형식 (예시): ```json {{ "oauth_providers": [ {{ "provider": "Google", - "oauth_uri": "" + "oauth_uri": "https://accounts.google.com/o/oauth2/v2/auth?client_id=..." }}, {{ - "provider": "GitHub", - "oauth_uri": "" + "provider": "GitHub", + "oauth_uri": "https://github.com/login/oauth/authorize?client_id=..." + }}, + {{ + "provider": "Discord", + "oauth_uri": "https://discord.com/oauth2/authorize?client_id=..." }} ] }} ``` -⚠️ **중요**: 버튼을 클릭하지 마세요. 단순히 식별만 하면 됩니다. +📌 주의: + 결과가 없는 provider는 JSON에 포함하지 않아도 됩니다. + 정확한 provider 이름과 oauth_uri를 매칭해 주세요 + """ diff --git a/lib/llm/prompt/fallback.py b/lib/llm/prompt/fallback.py index 91dd959..58b2889 100644 --- a/lib/llm/prompt/fallback.py +++ b/lib/llm/prompt/fallback.py @@ -127,8 +127,8 @@ chrome://settings/clearBrowserData에 들어가서 삭제해주세요. * ✅ **모든 SSO 로그인은 반드시 실행** (가능한 버튼은 모두 클릭) * 🔁 단계는 반드시 순서대로 진행 * 🔐 로그인은 쿠키/세션으로 유지된 상태에서 수행 -* 🚫 직접 ID/PW 입력하지 않음 -* ⛔ 추측 URL 클릭 금지 +* 👀 직접 OAuth Providor ID/PW를 입력하여도 됨 가지고 있다면 +* ⛔ 추측한 URL은 접속하지 않음 * ❗ 예외 발생 시 반드시 규정된 JSON 포맷만 반환 --- diff --git a/run.py b/run.py index 30e369e..3e45fa5 100644 --- a/run.py +++ b/run.py @@ -70,8 +70,8 @@ def main(): print("라인 번호는 0 이상이어야 합니다.") sys.exit(1) - if args.start_line >= args.end_line: - print("시작 라인은 종료 라인보다 작아야 합니다.") + if args.start_line > args.end_line: + print("시작 라인은 종료 라인보다 크거나 같아야 합니다.") sys.exit(1) # 도메인 파일 다운로드 diff --git a/setup.py b/setup.py index d5b9716..646fc28 100644 --- a/setup.py +++ b/setup.py @@ -44,7 +44,8 @@ def setup_storage(): print("======================================================") print("👀 원하는 OAuth Providor를 직접 모두 로그인 한 후에 브라우저를 닫으면 설정이 완료됩니다.") os.system('uv run playwright open https://google.com/ --save-storage=./data/storage_state.json') - os.startfile('./data/storage_state.json') + if os.path.exists('./data/storage_state.json'): + os.startfile('./data/storage_state.json') print("✅ 쿠키와 로컬 스토리지 설정 완료.") print("💾 ./data/storage_state.json 파일이 생성되었습니다.") else: