diff --git a/app/services/captcha_service.py b/app/services/captcha_service.py index 37722fa..2f255a2 100644 --- a/app/services/captcha_service.py +++ b/app/services/captcha_service.py @@ -196,16 +196,17 @@ def verifyCaptchaAnswer( latency = datetime.now(settings.TIMEZONE) - session.createdAt - # Instantiate RuleCheckService + # 룰 체크 인스턴스 생성 rule_checker = RuleCheckService( self.db, self.captchaRepo, UsageStatsRepository(self.db)) - # Apply scratch rules check first + # 룰 체크 서비스 사용 scratch_rule_error = rule_checker.check_captcha_scratch_rules( request.scratchedPercentage, request.scratchedTime) if scratch_rule_error: logger.info(f"CAPTCHA 규칙 위반으로 봇으로 판단: {scratch_rule_error}") verdict = "bot" # Set verdict to bot if rule check fails + return CaptchaVerificationResponse(result="fail", message=scratch_rule_error, confidence=None, verdict=verdict) if latency > timedelta(minutes=settings.CAPTCHA_TIMEOUT_MINUTES): self.captchaRepo.createCaptchaLog( @@ -234,7 +235,7 @@ def verifyCaptchaAnswer( logger.info(f"[디버그] 행동 분석 결과: {behavior_result}") # 디버깅용 if behavior_result and behavior_result.get("ok"): confidence = behavior_result.get("bot_prob") - if verdict is None: # Only update verdict if not already set by rule checker + if verdict is None: # Only update verdict if not already set by rule checker verdict = behavior_result.get("verdict") # 디버깅용 logger.info( @@ -258,12 +259,6 @@ def verifyCaptchaAnswer( # 성공한 경우에만 행동 데이터를 업로드합니다. if settings.ENABLE_KS3: uploadBehaviorDataTask.delay(clientToken) - elif is_correct and verdict == "bot": - result = CaptchaResult.FAIL - message = "봇으로 감지되어 캡챠 검증에 실패했습니다." - elif not is_correct: - result = CaptchaResult.FAIL - message = "틀린 답변으로 캡챠 검증에 실패했습니다." else: result = CaptchaResult.FAIL message = "캡챠 검증에 실패했습니다." diff --git a/app/services/rule_check_service.py b/app/services/rule_check_service.py index e874574..9dfe558 100644 --- a/app/services/rule_check_service.py +++ b/app/services/rule_check_service.py @@ -27,11 +27,11 @@ def __init__(self, db: Session, captcha_repo: CaptchaRepository, usage_stats_rep def check_captcha_scratch_rules(self, scratch_percent: int, scratch_time: int): # scratch_time은 밀리초 단위로 가정 (0.5초 = 500ms) if scratch_time < 500: - logger.info(f"CAPTCHA 규칙 위반: 스크래치 시간 너무 짧음 ({scratch_time}ms)") + # logger.info(f"CAPTCHA 규칙 위반: 스크래치 시간 너무 짧음 ({scratch_time}ms)") return "스크래치 시간이 너무 짧습니다. 최소 0.5초(500ms) 이상이어야 합니다." # scratch_percent는 정수 퍼센트 단위로 가정 (1%) if scratch_percent < 2: - logger.info(f"CAPTCHA 규칙 위반: 스크래치 퍼센트 너무 낮음 ({scratch_percent}%)") + # logger.info(f"CAPTCHA 규칙 위반: 스크래치 퍼센트 너무 낮음 ({scratch_percent}%)") return "스크래치 퍼센트가 너무 낮습니다. 최소 1% 이상이어야 합니다." logger.info( f"CAPTCHA 스크래치 규칙 통과: 시간={scratch_time}ms, 퍼센트={scratch_percent}%)")