revert(cafe24): 디자인 scope 요청 철회 — 스킨 파일 API 가 존재하지 않음
운영몰에서 직접 확인한 결과(API 버전 2026-03-01):
GET /admin/themes/pages → No API found. (엔드포인트 없음)
GET /admin/themes → 디자인 권한이 있으면 조회 가능하나 테마 목록뿐,
스킨 파일 내용은 응답에 없음
스킨 HTML 파일(product/detail.html)을 읽거나 쓰는 엔드포인트는 아예 없다.
권한이 아니라 기능이 없는 문제이므로 디자인 scope 를 요청해도 쓸 데가 없다.
DEFAULT_SCOPES 를 상품 권한만으로 되돌린다 — 쓰지 않는 권한을 토큰에 담아두면
유출 시 피해 범위만 넓어진다. 아직 재인증하지 않은 상태라(insufficient_scope 로
확인됨) 되돌리는 데 추가 조치가 필요하지 않다.
같은 시도를 반복하지 않도록 확인 사실을 config.py 와 문서에 표로 남겼다.
스크립트 태그(/admin/scripttags)가 유일한 주입 수단이며 mall.write_store 권한과
외부 공개 HTTPS JS 엔드포인트가 필요하다는 점도 함께 적었다.
상단 공통 홍보 숨김은 상품 상세설명 CSS 방식(set_promo_hidden)을 그대로 쓴다.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -13,16 +13,28 @@ 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 만 받는다.
|
||||
# 디자인(테마) — **요청하지 않는다.** 아래 확인 결과 때문이다.
|
||||
#
|
||||
# 운영몰에서 직접 호출해 확인한 사실(2026-08-14):
|
||||
# GET /admin/themes → 조회는 가능(디자인 권한 필요)하지만 테마 "목록"뿐이며
|
||||
# 스킨 파일 내용은 응답에 없다.
|
||||
# GET /admin/themes/pages → No API found. (버전 2026-03-01 에 존재하지 않음)
|
||||
# 스킨 HTML 파일(product/detail.html 등)을 읽거나 쓰는 엔드포인트는 없다.
|
||||
#
|
||||
# 즉 스킨의 `const numbers = [...]`(상단 공통 홍보 제외 목록)을 API 로 고치는 방법은
|
||||
# 없다. 상단 공통 홍보 숨김은 상품 상세설명 안 CSS 로 처리한다
|
||||
# (app/modules/cafe24/store.py 의 set_promo_hidden).
|
||||
#
|
||||
# 페이지에 코드를 주입하는 유일한 수단은 스크립트 태그(/admin/scripttags)이며,
|
||||
# 디자인이 아니라 **mall.write_store(상점)** 권한이 필요하고 인라인 코드가 아닌
|
||||
# 외부 HTTPS URL 만 받는다. 쓰려면 우리 서버에 공개 JS 엔드포인트가 필요하다.
|
||||
DESIGN_SCOPES: tuple[str, ...] = ("mall.read_design", "mall.write_design")
|
||||
STORE_SCOPES: tuple[str, ...] = ("mall.read_store", "mall.write_store")
|
||||
|
||||
# 실제로 요청하는 scope 묶음. 개발자센터 앱에 등록된 권한과 어긋나면 인증이
|
||||
# 거부되므로, 여기에 추가할 때는 앱 권한도 함께 확인해야 한다.
|
||||
DEFAULT_SCOPES: tuple[str, ...] = PRODUCT_SCOPES + DESIGN_SCOPES
|
||||
# 쓰지 않는 권한은 요청하지 않는다 — 토큰이 유출돼도 피해 범위를 좁히기 위함.
|
||||
DEFAULT_SCOPES: tuple[str, ...] = PRODUCT_SCOPES
|
||||
|
||||
DEFAULT_API_VERSION = "2026-03-01"
|
||||
|
||||
|
||||
+22
-6
@@ -204,9 +204,23 @@ cafe24_oauth_tokens 저장
|
||||
const numbers = [12,31,32, ...]; // .edb-img-tag-w 를 remove()
|
||||
```
|
||||
|
||||
**카페24 Admin API 로는 이 파일을 고칠 수 없다.** 확인 결과 스킨/테마는 조회만
|
||||
가능하고(`GET /admin/themes`), 스킨 HTML 파일을 읽거나 쓰는 엔드포인트가 없다.
|
||||
쓸 수 있는 것은 테마 페이지와 스크립트 태그(`/admin/scripttags`)뿐이다.
|
||||
**카페24 Admin API 로는 이 파일을 고칠 수 없다.** 운영몰에서 직접 호출해 확인했다
|
||||
(2026-08-14, API 버전 2026-03-01).
|
||||
|
||||
| 호출 | 결과 |
|
||||
| --- | --- |
|
||||
| `GET /admin/themes` | 디자인 권한이 있으면 조회 가능하나 **테마 목록뿐** — 파일 내용 없음 |
|
||||
| `GET /admin/themes/pages` | **`No API found.`** — 이 버전에 존재하지 않는다 |
|
||||
| 스킨 파일(`product/detail.html`) 읽기/쓰기 | **엔드포인트 자체가 없다** |
|
||||
|
||||
권한 문제가 아니라 기능이 없는 것이므로, 디자인 권한을 추가해도 달라지지 않는다.
|
||||
그래서 `DEFAULT_SCOPES` 에 디자인 scope 를 **넣지 않는다**(쓰지 않는 권한은 요청하지
|
||||
않는다 — `app/integrations/cafe24/config.py` 주석 참고).
|
||||
|
||||
페이지에 코드를 주입하는 유일한 수단은 스크립트 태그(`/admin/scripttags`)인데,
|
||||
디자인이 아니라 **`mall.write_store`(상점)** 권한이며 **인라인 코드가 아닌 외부 HTTPS
|
||||
URL** 만 받는다. 쓰려면 우리 서버에 공개 JS 엔드포인트를 두고 쇼핑몰이 그것을 불러가게
|
||||
해야 한다.
|
||||
|
||||
그래서 같은 결과를 **상품 상세설명 안의 CSS** 로 낸다. 상세설명은 우리가 쓸 수 있고,
|
||||
상품별로 켜고 끌 수 있으며, 상태가 그 상품 소스에 그대로 보인다.
|
||||
@@ -226,9 +240,11 @@ const numbers = [12,31,32, ...]; // .edb-img-tag-w 를 remove()
|
||||
- 스킨의 `numbers` 목록과는 독립이다. 이미 목록에 있는 상품은 그대로 두면 된다
|
||||
(스킨은 요소를 제거하고, 이쪽은 CSS 로 숨긴다 — 결과는 같고 충돌하지 않는다).
|
||||
|
||||
> 스킨의 `numbers` 방식을 그대로 자동화하려면 `/admin/scripttags` 로 전역 스크립트를
|
||||
> 주입하는 방법이 있다. 다만 **디자인 쓰기 권한 추가 + 재인증**이 필요하고, 상품별
|
||||
> 상태가 한 곳에 몰려 관리가 어려워진다. 지금은 채택하지 않았다.
|
||||
> 스킨의 `numbers` 방식(요소 제거 + 목록 한 곳 관리)을 자동화하려면 `/admin/scripttags`
|
||||
> 로 전역 스크립트를 주입하는 방법뿐이다. 필요한 것: **`mall.write_store` 권한 추가 +
|
||||
> 재인증**, 그리고 **우리 서버의 공개 HTTPS JS 엔드포인트**(쇼핑몰 방문자 브라우저가
|
||||
> 직접 불러가므로 인증을 걸 수 없다). 쇼핑몰이 우리 서버 가용성에 의존하게 되는 것도
|
||||
> 감안해야 한다. 지금은 채택하지 않았다.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user