Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 4 additions & 9 deletions app/services/captcha_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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(
Expand All @@ -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 = "캡챠 검증에 실패했습니다."
Expand Down
4 changes: 2 additions & 2 deletions app/services/rule_check_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -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}%)")
Expand Down
Loading