feat(cafe24): 디자인 스코프 추가 (mall.read_design/write_design)

상단 공통 홍보를 스킨 쪽에서 처리할 수 있는지 실물로 확인하려면 토큰에 디자인
권한이 있어야 한다. 개발자센터 앱에는 이미 추가됐고, 우리가 요청하는 scope 에도
넣는다. 재인증을 해야 실제 토큰에 반영된다.

확인해 둔 사실을 config.py 주석으로 남겼다. 카페24 Admin API 에는 스킨 HTML
파일(detail.html)을 직접 읽거나 쓰는 엔드포인트가 없다. 조회 가능한 것은 테마
목록과 테마 페이지뿐이며, 스크립트 태그 주입은 디자인이 아니라 mall.write_store
권한이고 인라인 코드가 아닌 외부 HTTPS URL 만 받는다.

요청 scope 를 DEFAULT_SCOPES 한 곳으로 모아, 앞으로 늘어날 때 authorize 와
클라이언트가 어긋나지 않게 했다.

검증: 유닛테스트 49개 통과. scope_param 출력 확인.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-14 13:54:15 +09:00
parent 08ebe7b53d
commit 87fca22ea0
2 changed files with 17 additions and 2 deletions
+12 -1
View File
@@ -13,6 +13,17 @@ from dataclasses import dataclass
PRODUCT_SCOPES: tuple[str, ...] = ("mall.read_product", "mall.write_product")
ORDER_SCOPES: tuple[str, ...] = ("mall.read_order", "mall.write_order")
# 디자인(테마) — 상단 공통 홍보 숨김을 스킨 쪽에서 처리할 수 있는지 확인/구현용.
# ⚠️ 카페24 Admin API 에는 스킨 HTML 파일(detail.html)을 직접 읽거나 쓰는
# 엔드포인트가 없다. 조회 가능한 것은 테마 목록과 테마 페이지뿐이다.
# 스크립트 태그 주입은 디자인이 아니라 mall.write_store(상점) 권한이며
# 인라인 코드가 아닌 외부 HTTPS URL 만 받는다.
DESIGN_SCOPES: tuple[str, ...] = ("mall.read_design", "mall.write_design")
# 실제로 요청하는 scope 묶음. 개발자센터 앱에 등록된 권한과 어긋나면 인증이
# 거부되므로, 여기에 추가할 때는 앱 권한도 함께 확인해야 한다.
DEFAULT_SCOPES: tuple[str, ...] = PRODUCT_SCOPES + DESIGN_SCOPES
DEFAULT_API_VERSION = "2026-03-01"
@@ -57,7 +68,7 @@ class Cafe24Config:
return ",".join(self.scopes)
def load_config(*, scopes: tuple[str, ...] = PRODUCT_SCOPES) -> Cafe24Config:
def load_config(*, scopes: tuple[str, ...] = DEFAULT_SCOPES) -> Cafe24Config:
"""환경변수에서 설정을 읽는다. 값이 없어도 예외를 던지지 않는다.
미설정 판단은 호출부가 `configured` / `missing` 으로 한다