o2o-negosium-original/negodata/backend/services
민헌 e7d2c87fbe feat(lps): API guard — LPS_API_KEY 설정 시에만 /v1 에 X-API-Key 검증
외부에서 API 를 함부로 호출(비용 발생 enqueue 등)하지 못하도록 정적 키
guard 를 추가한다. '키의 존재'가 토글 — 개발(local/dev)은 env 를 비워
개방 모드(기동 시 WARN), prod 만 키를 주입한다(협의 결정).

- router/v1/validator/auth.py: X-API-Key 의존성 — secrets.compare_digest
  상수시간 비교, 콤마 구분 복수 키(무중단 키 교체), 매 요청 env 조회
  (재기동 없이 테스트 가능). /v1 라우터 전체에 적용.
- /healthz·/readyz 는 라우터 밖이라 항상 개방(LB 프로브).
- negodata lps_sync_service: LPS_API_KEY env 있으면 헤더 자동 첨부(한 곳).
- compose(lps-api·negodata-backend) LPS_API_KEY 패스스루 + .env.example.
- prod 체크리스트(operations.md): 키 주입 + lps-api 포트 비공개 + 기동
  로그 'API guard ON' 확인. api.md 인증 섹션 추가.
- 라이브 스모크: 무헤더/오키 401 · 정키 2종 200 · healthz 200 확인.
- 테스트 6건 추가, 전체 141 passed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 16:45:31 +09:00
..
email_templates [feat] negodata: 견적 목표가 산정 개편 + 협상 초청메일 + 카드 사용구분 2026-06-29 13:33:08 +09:00
agent_notify.py [feat] 카드 카탈로그 DB 정본화 — config 결합 제거 + 학습 보존 자동반영 2026-07-08 14:56:28 +09:00
auth_service.py [fix] negodata: /me 응답 role 을 UserRole enum 으로 직렬화 (Pydantic 경고 제거) 2026-07-01 14:41:39 +09:00
azure_blob_client.py [feat] negodata/backend: 상품 이미지 업로드(Azure Blob) 엔드포인트 추가 2026-06-18 16:21:58 +09:00
card_service.py [feat] negodata: 협상카드 회사 스코프·공용 읽기전용 + 견적 목표가 산정내역 수정 2026-07-09 17:04:40 +09:00
company_user_service.py [feat] negodata: 회원관리 / 최고관리자(OWNER) 2026-06-29 13:31:32 +09:00
dashboard_service.py [chore] negodata: enum 주석 영문값 보강 + 견적상태 3종 정리 + 대시보드 정비 2026-06-30 17:25:38 +09:00
email.py [feat] negodata: 견적 목표가 산정 개편 + 협상 초청메일 + 카드 사용구분 2026-06-29 13:33:08 +09:00
item_service.py [feat] negodata: 소유권 게이팅 + 견적 낙찰 + 작성자명 표시 + 전화입력 + 카드 엑셀 2026-07-07 16:18:33 +09:00
lps_sync_service.py feat(lps): API guard — LPS_API_KEY 설정 시에만 /v1 에 X-API-Key 검증 2026-07-13 16:45:31 +09:00
notification.py [feat] negodata: 알림함 — 견적 마감 결과(낙찰/재생성/결렬) 자동 통지 2026-06-30 17:24:59 +09:00
quotation_service.py [feat] negodata: 협상카드 회사 스코프·공용 읽기전용 + 견적 목표가 산정내역 수정 2026-07-09 17:04:40 +09:00
quotation_setting_service.py [feat] negodata: 결렬 폐지→개찰 마감 개편 + 낙찰기준 견적 단위 이관 + 세팅 컬럼 정리 (백엔드+DB) 2026-07-06 16:36:00 +09:00
statistics_service.py [feat] negodata: 통계 페이지(성과 분석) 추가 — 파생 집계 API + recharts 차트 2026-07-07 16:18:33 +09:00
supplier_item_service.py [feat] negodata: 협력사↔상품 매핑(취급상품·공급유형) + 견적 픽리스트 서버검색 콤보박스 2026-07-07 09:59:13 +09:00
supplier_service.py [feat] negodata: 협력사 채팅 계정(supplier_users) 관리 — 발급·비번 재설정·활성상태 2026-07-10 10:14:00 +09:00