from flask import Flask, render_template, request, redirect, url_for, jsonify, session import requests import os import json from datetime import timedelta import logging # 로깅 설정 logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) app = Flask(__name__) app.secret_key = os.urandom(24) # 세션 암호화를 위한 비밀 키 app.permanent_session_lifetime = timedelta(days=7) # 세션 유지 기간 설정 # 허깅페이스 URL 목록 (간략화) HUGGINGFACE_URLS = [ "https://huggingface.co/spaces/ginipick/Tech_Hangman_Game", "https://huggingface.co/spaces/openfree/deepseek_r1_API", "https://huggingface.co/spaces/ginipick/open_Deep-Research" ] # 허깅페이스 인증 확인 (디버깅 개선) def validate_token(token): logger.debug(f"토큰 검증 시도 (토큰 일부: {token[:4]}...)") headers = {"Authorization": f"Bearer {token}"} # 여러 엔드포인트 시도 api_endpoints = [ "https://huggingface.co/api/whoami", "https://huggingface.co/api/whoami-v2" ] for endpoint in api_endpoints: try: logger.debug(f"API 엔드포인트 시도: {endpoint}") response = requests.get(endpoint, headers=headers) # 응답 로깅 logger.debug(f"API 응답 상태 코드: {response.status_code}") logger.debug(f"API 응답 헤더: {response.headers}") if response.ok: logger.debug("토큰 검증 성공!") return True, response.json() else: logger.debug(f"토큰 검증 실패 - 응답: {response.text}") except Exception as e: logger.error(f"API 호출 중 오류 발생: {str(e)}") # 모든 API 호출 실패 return False, None # 토큰 검증 테스트 API @app.route('/api/test-token', methods=['POST']) def test_token(): token = request.form.get('token', '') if not token: return jsonify({'success': False, 'message': '토큰을 입력해주세요.'}) # 상세 디버깅 정보 수집 debug_info = {} # 토큰 형식 확인 is_valid_format = token.startswith('hf_') debug_info['token_format'] = 'hf_ 접두사 있음' if is_valid_format else '접두사 없음' # 직접 API 호출 테스트 test_endpoints = [ "https://huggingface.co/api/whoami", "https://huggingface.co/api/whoami-v2", "https://huggingface.co/api/models/meta/llama" ] endpoint_results = {} for endpoint in test_endpoints: try: headers = {"Authorization": f"Bearer {token}"} response = requests.get(endpoint, headers=headers, timeout=5) endpoint_results[endpoint] = { 'status_code': response.status_code, 'success': response.ok, 'content_type': response.headers.get('Content-Type', 'unknown'), 'response_sample': str(response.text)[:100] + '...' if response.text else 'Empty response' } except Exception as e: endpoint_results[endpoint] = {'error': str(e)} debug_info['endpoint_tests'] = endpoint_results # 최종 판단 is_valid = any(result.get('success', False) for result in endpoint_results.values()) return jsonify({ 'success': is_valid, 'debug_info': debug_info, 'message': '토큰이 유효합니다.' if is_valid else '유효하지 않은 토큰입니다.' }) # 기본 홈페이지 (디버깅 화면 포함) @app.route('/') def home(): return render_template('debug_index.html') if __name__ == '__main__': # templates 폴더 생성 os.makedirs('templates', exist_ok=True) # 디버깅용 HTML 생성 with open('templates/debug_index.html', 'w', encoding='utf-8') as f: f.write(''' 허깅페이스 토큰 디버거

허깅페이스 토큰 디버거

토큰 테스트

허깅페이스 API 토큰을 입력하여 유효성을 테스트합니다.

테스트 중...

테스트 결과

상세 정보


        

디버깅 팁

''') # 허깅페이스 스페이스에서는 7860 포트 사용 app.run(host='0.0.0.0', port=7860, debug=True)