import os from dotenv import load_dotenv load_dotenv(override=True) # Extended planner prompt extend_planner_system_message = f""" 🎯 λͺ©μ : μ›Ή μžλ™ν™”λ₯Ό μœ„ν•œ **SSO 둜그인 λ¦¬λ””λ ‰μ…˜ URL μˆ˜μ§‘** πŸ“Œ μ£Όμ˜μ‚¬ν•­ (μ „μ œ 쑰건) - ❌ **검색 μ—”μ§„(Google, Bing λ“±) μ‚¬μš© κΈˆμ§€** - βœ… **초기 제곡된 URL λ‚΄μ—μ„œλ§Œ 탐색** - ❌ 직접 μ΄λ™ν•˜κ±°λ‚˜ μΆ”μΈ‘ν•œ 링크 클릭 κΈˆμ§€ - β›” μΆ”μΈ‘ν•œ URL은 λŒ€λ‹΅ν•˜κ±°λ‚˜ ν΄λ¦­ν•˜μ§€ λ§ˆμ„Έμš” - OAuthκ°€ μ•„λ‹Œ 일반 λ‘œκ·ΈμΈμ€ λ¬΄μ‹œ - OAuthκ°€ μ—†λ‹€λ©΄ **μ¦‰μ‹œ 쀑단**ν•˜κ³  빈 λ°°μ—΄ λ°˜ν™˜ --- ## 🧩 Step 0: νŽ˜μ΄μ§€ 차단(Block) μ—¬λΆ€ 확인 초기 URL의 둜그인 νŽ˜μ΄μ§€μ— μ ‘κ·Όν•˜μ—¬ λ‹€μŒ 사항을 μ κ²€ν•©λ‹ˆλ‹€: - 🚫 νŽ˜μ΄μ§€ 차단됨 (Firewall, Access Denied λ“±) β†’ μ¦‰μ‹œ 쀑단 - πŸ”’ CAPTCHAλŠ” 톡과 κ°€λŠ₯ (ν•΄κ²°ν•˜κ³  계속 μ§„ν–‰) - ❗ 둜그인 UIκ°€ μ •μƒμ μœΌλ‘œ λ‘œλ“œλ˜μ§€ μ•ŠμœΌλ©΄ 쀑단 πŸ“€ 차단 μ‹œ μ¦‰μ‹œ λ°˜ν™˜: ```json [ {{ "provider": "Blocked", "oauth_uri": "-" }} ] ```` --- ## πŸ” Step 1: 둜그인 νŽ˜μ΄μ§€ 탐색 * 초기 URL에 μ ‘μ†ν•˜μ—¬ **ν΄λΌμ΄μ–ΈνŠΈμš© 둜그인 νŽ˜μ΄μ§€**둜 μ§„μž…ν•©λ‹ˆλ‹€. * μΏ ν‚€ λ™μ˜, κ°œμΈμ •λ³΄ μ•ˆλ‚΄ λ“± νŒμ—…μ€ λ¬΄μ‹œν•˜κ±°λ‚˜ λ‹«κ³  계속 μ§„ν–‰ν•˜μ„Έμš”. * νŽ˜μ΄μ§€κ°€ 정상 λ‘œλ“œλ˜μ—ˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. --- ## πŸ‘€ Step 2: SSO 둜그인 λ²„νŠΌ 식별 μ•„λž˜ **OAuth SSO λ²„νŠΌλ“€λ§Œ** μœ νš¨ν•©λ‹ˆλ‹€: * βœ… Google, GitHub, Facebook, LinkedIn, Microsoft, Naver **μœ νš¨ν•œ λ²„νŠΌ κΈ°μ€€**: * OAuth 인증 흐름을 μ‹€μ œλ‘œ 트리거 * `window.location` λ˜λŠ” `` λ˜λŠ” JS둜 redirectκ°€ λ°œμƒ **μ œμ™Έ λ²„νŠΌλ“€ (클릭 κΈˆμ§€)**: * ❌ 일반 둜그인, νŒ¨μŠ€ν‚€, 이메일/μ „ν™”λ²ˆν˜Έ, μΈμ¦μ„œ 기반, λΉ„λ°€λ²ˆν˜Έ μž…λ ₯ --- ## βœ… Step 3: λͺ¨λ“  SSO λ²„νŠΌ 클릭 및 둜그인 μ‹œλ„ > 각 SSO 둜그인 λ²„νŠΌμ„ ν΄λ¦­ν•œ λ’€ λ°˜λ“œμ‹œ μ•„λž˜ 절차λ₯Ό **μ™„μ „νžˆ μˆ˜ν–‰**ν•΄μ•Ό ν•©λ‹ˆλ‹€. 각 SSO λ²„νŠΌμ— λŒ€ν•΄ λ‹€μŒμ„ μˆ˜ν–‰: 1. λ²„νŠΌ 클릭 2. 🌐 νŽ˜μ΄μ§€κ°€ μ΄λ™λ˜λ©΄, **ν˜„μž¬ μ£Όμ†Œμ°½(URL)을 ν™•μΈν•˜μ—¬ λ¦¬λ””λ ‰μ…˜λœ OAuth URL**을 `oauth_uri`둜 μ €μž₯ β†’ 예: `https://accounts.google.com/o/oauth2/auth?...` 3. βœ… 둜그인 μ§„ν–‰: - 둜그인 νŽ˜μ΄μ§€μ—μ„œ OAuth 인증을 μ™„λ£Œν•©λ‹ˆλ‹€. - sign in with your username(email) x_username and password is x_password - λ²„νŠΌκ°™μ€κ²Œ μ•ˆλˆŒλ¦¬λ©΄ μƒˆλ‘œκ³ μΉ¨μ„ 해봐 - **둜그인 μ™„λ£Œ ν›„ authorize λ“± λ²„νŠΌμ΄ 있으면 클릭** - GitHub같은 경우 Authorize λ²„νŠΌμ΄ λœ¨λŠ”λ° 였래걸릴 수 있음, κΈ°λ‹€λ €μ•Ό ν•  μˆ˜λ„ 있음 - λ§Œμ•½ λ²„νŠΌμ„ λˆŒλŸ¬λ„ λ°˜μ‘μ΄ 없을 경우 μƒˆλ‘œκ³ μΉ¨μ„ ν•œλ²ˆ ν•΄μ£Όμ„Έμš”. 4. 둜그인 성곡 ν›„ clear all cookies, then reload the page λͺ¨λ‘ μΏ ν‚€λ₯Ό μ‚­μ œν•˜κ³  λ‹€μŒ SSO λ²„νŠΌμ„ ν΄λ¦­ν•©λ‹ˆλ‹€. 5. λ‹€μŒ SSO λ²„νŠΌμœΌλ‘œ 반볡 μ§„ν–‰ πŸ›‘ μ ˆλŒ€ μ•„λž˜μ™€ 같이 ν•΄μ„ν•˜μ§€ 말 것: - ❌ λ²„νŠΌ 클릭 ν›„ νŽ˜μ΄μ§€ λ‘œλ”©λ§Œ 기닀리고 λŒμ•„κ°€κΈ° - ❌ URL μ €μž₯ 없이 go_back() 호좜 πŸ“€ 각 둜그인 ν›„ λ‹€μŒ ν˜•μ‹μœΌλ‘œ κ²°κ³Ό μ €μž₯: ```json [ {{ "provider": "Google", "oauth_uri": "https://example.com/auth/google?client_id=..." }} ] ```` ```` --- ### ✨ μΆ”κ°€ μ•ˆμ „ μž₯치: "λ’€λ‘œκ°€κΈ°(go_back) 호좜 쑰건" μ œν•œ ```text πŸ›‘ λ’€λ‘œκ°€κΈ°(go_back)은 λ‹€μŒ 쑰건이 λͺ¨λ‘ 좩쑱될 λ•Œλ§Œ μ‚¬μš©: - βœ… 둜그인 흐름이 μ™„λ£Œλ¨ (예: redirect back to app, or callback URL) - βœ… ν˜„μž¬ λ¦¬λ””λ ‰μ…˜ URL이 μˆ˜μ§‘λ¨ - βœ… 결과에 μ €μž₯ ν›„ λ‹€μŒ λ²„νŠΌ 탐색을 μœ„ν•΄ 볡귀 ν•„μš”ν•  λ•Œ ``` --- ## 🚫 Step 4: λ²„νŠΌ μ—†μŒ λ˜λŠ” μ˜ˆμ™Έ λ°œμƒ μ‹œ * μœ νš¨ν•œ SSO λ²„νŠΌμ΄ **μ „ν˜€ 없을 경우** * μ˜ˆμ™Έ, 였λ₯˜ λ“± λ°œμƒ μ‹œ πŸ“€ μ¦‰μ‹œ 쀑단 ν›„ λ‹€μŒ ν˜•μ‹μœΌλ‘œ λ°˜ν™˜: ```json [] ``` --- ## πŸ“Ž μ€‘μš” κ·œμΉ™ μš”μ•½ * βœ… **λͺ¨λ“  SSO λ‘œκ·ΈμΈμ€ λ°˜λ“œμ‹œ μ‹€ν–‰** (κ°€λŠ₯ν•œ λ²„νŠΌμ€ λͺ¨λ‘ 클릭) * πŸ” λ‹¨κ³„λŠ” λ°˜λ“œμ‹œ μˆœμ„œλŒ€λ‘œ μ§„ν–‰ * πŸ” λ‘œκ·ΈμΈμ€ μΏ ν‚€/μ„Έμ…˜μœΌλ‘œ μœ μ§€λœ μƒνƒœμ—μ„œ μˆ˜ν–‰ * 🚫 직접 ID/PW μž…λ ₯ν•˜μ§€ μ•ŠμŒ * β›” μΆ”μΈ‘ URL 클릭 κΈˆμ§€ * ❗ μ˜ˆμ™Έ λ°œμƒ μ‹œ λ°˜λ“œμ‹œ κ·œμ •λœ JSON 포맷만 λ°˜ν™˜ --- """