7.3.4 · Scorecard — meeting-backoffice-new
branch: UAT
Legend:
- 🔴 Critical = active security/data-loss/availability risk
- 🟡 High = correctness/maintainability hazard, real impact
- 🟢 Medium = friction/hygiene
ตารางสรุป
| ID | Severity | คำอธิบาย | หลักฐาน | การแก้ที่เสนอ |
|---|---|---|---|---|
| CORR-MTBONEW-01 | 🔴 Critical | Bundle ที่ commit ไม่มี hostname API; REACT_APP_MEETING_API / REACT_APP_2WAY_API ไม่อยู่ใน env object ที่ bake — ความเสี่ยงสูงที่ยิงไป undefined/secure/... | build/static/js/main.633a23c6.js (ตรวจ inline env); ไม่มี .env* ใน repo; pages/index.tsx:19 | rebuild ด้วย env จริง; เพิ่ม .env.example; ตรวจ network tab บน UAT |
| SEC-MTBONEW-01 | 🟡 High | Hardcode Authorization: Bearer testnaja ในซอร์สและ bundle | creategroup/index.tsx:366, createapprover/index.tsx:391, bundle string | ลบ; ใช้ token จริงหรือให้ backend อนุญาตแบบที่ออกแบบไว้ |
| SEC-MTBONEW-02 | 🟡 High | ไม่มี auth flow / ไม่แนบ token บน /secure/* ส่วนใหญ่ | App.tsx:17-24 ไม่มี token route; fetch หน้า home ไม่มี headers | document threat model + ปิด endpoint ฝั่ง API |
| QUAL-MTBONEW-01 | 🟡 High | build/ commit ใน git — artifact หลุด sync กับ src/ ได้ง่าย | build/static/js/main.633a23c6.js | CI build; .gitignore build/; หรือ mono-publish script |
| QUAL-MTBONEW-02 | 🟢 Medium | ต้อง copy ไป 3 โฟลเดอร์ backoffice ด้วยมือ — ไม่มี automation ใน repo | sha ตรงกัน 3 backoffice + repo นี้ | สคริปต์ sync หรือ package publish |
| QUAL-MTBONEW-03 | 🟢 Medium | Dockerfile npm start (dev) ไม่สะท้อน static embed | Dockerfile:8 | เปลี่ยนเป็น nginx serve build/ หรือลบ Dockerfile ที่ทำให้เข้าใจผิด |
| QUAL-MTBONEW-04 | 🟢 Medium | BASE_PATH ใน compose ไม่มีผลต่อ CRA PUBLIC_URL | docker-compose.yml:7-8 vs package.json:5 | ลบ env หรือ document ว่าใช้ homepage เท่านั้น |
| OBS-MTBONEW-01 | 🟢 Medium | ไม่มี Sentry / error tracking | package.json:6-27 | เพิ่มถ้ายังใช้ใน prod |
| OBS-MTBONEW-02 | 🟢 Medium | README เป็น CRA default — ไม่บอก embed workflow | README.md | เขียนขั้นตอน build → copy → commit backoffice |
| QUAL-MTBONEW-05 | 🟢 Medium | Sidebar ไม่ครบหน้า (เหมือน Next twin) | Sidebar.tsx:52-68 | เพิ่มลิงก์หรือพึ่งปุ่มใน list ให้ชัด |
สรุปภาพรวม
- Source of truth ของ UI ที่ฝังใน legacy backoffice = repo นี้ (
build/sha ตรง) - Next
meeting-backoffice= service คนละ path (/meetingbo) คนละ auth entry - ความเสี่ยงใหญ่สุดตอนนี้: env ไม่ถูก bake ใน artifact ที่ commit + Bearer testnaja
- ไม่มี Sentry
Checklist ก่อนแก้
- ยืนยันว่าผู้ใช้ที่เจอบั๊กอยู่บน
/meeting-backoffice(embed) หรือ/meetingbo(Next) - ตั้ง
REACT_APP_MEETING_APIและREACT_APP_2WAY_APIก่อนnpm run build - ตรวจ bundle ว่ามี hostname จริง ไม่ใช่
undefined/ - Sync
build/→vtrc-backoffice/meeting,vtrc-backoffice-new/meeting,vtrc-rc-backoffice/meetingตามที่ทีมใช้จริง - อย่าพึ่ง
docker-compose.ymlเป็นคำอธิบาย deploy เพียงอย่างเดียว
ตารางเทียบสั้นกับ meeting-backoffice (Next)
| new (CRA embed) | meeting-backoffice (Next) | |
|---|---|---|
| Path | /meeting-backoffice | /meetingbo |
| List load | client fetch | SSG |
| Token entry | ไม่มี | [token].tsx + X-API-Key |
| 2way Bearer | testnaja | ไม่แนบ |
| Sentry | ไม่มี | dep มี / init comment |
| Artifact | build/ committed + embedded | Docker yarn dev |
| Env in git | ไม่มี | .env UAT committed |
หมายเหตุเรื่องชื่อที่ทำให้สับสน
| ชื่อ | คืออะไร |
|---|---|
meeting-backoffice-new | CRA + embed /meeting-backoffice (เอกสารชุดนี้) |
meeting-backoffice | Next /meetingbo service แยก |
2way-meeting-backoffice | Next 2way HR/LIFF — ไม่เกี่ยวกับ meeting platform |
package name meeting-backoffice ใน repo นี้ | ตรงหน้าที่ แต่ชนชื่อโฟลเดอร์ Next twin |
เมื่อเปิด ticket หรือ PR ให้ระบุ path ที่ผู้ใช้เห็น (/meeting-backoffice vs /meetingbo) ไม่ใช่แค่ชื่อ repo
ขั้นตอน verify หลัง rebuild (สั้น)
npm run buildgrep -oE 'https?://[^\" ]*redcross[^\" ]*' build/static/js/main.*.js | head— ต้องเห็น host API จริงshasum -a 1 build/static/js/main.*.jsแล้วเทียบกับไฟล์ในvtrc-*-backoffice/meeting/หลัง sync- เปิดหน้า list ใน IDE browser tab ใต้ backoffice origin — ดู Network ว่าไม่ขึ้น
undefined/secure
Cross-links
- Twin Next service: meeting-backoffice (branch UAT, basePath
/meetingbo) - Backend: meeting-vtrc-api
- อย่าสับสนกับ 2way-meeting-backoffice (2way LIFF/backoffice — ไม่ใช่ meeting)
branch canonical ของ twin ทั้งคู่และ backend: UAT / prod-meeting-vtrc-api ตามตาราง workspace — ตรวจก่อน cite
Note
Canonical branches: meeting-backoffice / meeting-backoffice-new = UAT; embed consumers live under vtrc-backoffice*/meeting/ and vtrc-rc-backoffice/meeting/.