7.2.4 · Scorecard — meeting-backoffice
branch: UAT
Legend:
- 🔴 Critical = active security/data-loss/availability risk
- 🟡 High = correctness/maintainability hazard, real impact
- 🟢 Medium = friction/hygiene, ยังไม่เป็นอันตรายทันที
ตารางสรุป
| ID | Severity | คำอธิบาย | หลักฐาน | การแก้ที่เสนอ |
|---|---|---|---|---|
| SEC-MTBO-01 | 🟡 High | X-API-Key: "01010101" hardcode ใน frontend bundle | pages/[token].tsx:20 | ย้าย secret ออกจาก client; ใช้ BFF/API route |
| SEC-MTBO-02 | 🟡 High | .env (UAT API URLs + placeholders) commit ใน git | .env:1-16 | .gitignore + .env.example; อย่า commit ค่าจริง |
| SEC-MTBO-03 | 🟡 High | Token เก็บ localStorage; หน้า CRUD ไม่แนบ token — UI ไม่มี route guard | auth.tsx:5-11, _app.tsx:20-35 | ออกแบบ auth จริง (middleware + Authorization ทุก /secure) หรือยอมรับว่าพึ่ง backend อย่างเดียวแล้ว document ให้ชัด |
| CORR-MTBO-01 | 🟡 High | getStaticProps list ไม่มี revalidate — ข้อมูลค้างตาม build | pages/index.tsx:29-48, listapprover | ISR หรือ getServerSideProps / client fetch |
| CORR-MTBO-02 | 🟢 Medium | Dockerfile รัน yarn dev ไม่ใช่ production build+start | Dockerfile:17,20 | multi-stage yarn build + yarn start |
| QUAL-MTBO-01 | 🟢 Medium | package name reportmonitor ไม่ตรงแอป | package.json:2-3 | เปลี่ยนชื่อให้ตรง |
| QUAL-MTBO-02 | 🟢 Medium | ignoreBuildErrors: true | next.config.js:13-18 | ปิดแล้วไล่ type error |
| QUAL-MTBO-03 | 🟢 Medium | Sidebar ไม่มีลิงก์ editgroup / createapprover | Sidebar.tsx:52-59 | เพิ่มเมนูหรือ document ว่าเข้าจากปุ่มใน list |
| QUAL-MTBO-04 | 🟢 Medium | locales มี de ไม่มี th; UI ไทย hardcode ใน JSX | public/locales/de/, Sidebar.tsx:46 | ตัด locale ไม่ใช้ / ย้ายข้อความเข้า i18n |
| OBS-MTBO-01 | 🟡 High | Sentry.init comment ออกทั้ง client/server แต่ยังมี @sentry/nextjs + withSentryConfig + _error capture — สถานะ observability คลุมเครือ | sentry.client.config.js:5-17, next.config.js:38, _error.js | เปิด init + DSN จาก env หรือลบ dependency/plugin ให้สอดคล้อง |
| OBS-MTBO-02 | 🟢 Medium | ไม่มี runtime env switch — เปลี่ยน backend ต้อง rebuild | .env:13-14, ไม่มี checkLinkURL | document ชัดใน runbook; หรือ inject ตอน container start |
สรุปภาพรวม
- หน้าที่จริง = group + approver admin ของ
meeting-vtrc-api - Auth ฝั่ง UI อ่อน — มีแค่ bypass หน้า
[token]แล้วเก็บ token ที่แทบไม่ถูกใช้ต่อ - Sentry บน UAT ไม่ได้ init ใน config มาตรฐาน
- Docker บน UAT รัน dev server; compose เป็น local build
meetingbodev1ไม่ใช่ gcr image - อย่าสับสนกับ
meeting-backoffice-newซึ่งเป็นตัวที่ embed ใน legacy backoffice - Canonical branch ของเอกสารเล่มนี้คือ
UAT— อย่าอ่านจากmasterที่เบาบางกว่า
Checklist ก่อนแก้โค้ด
- ยืนยันว่าแก้ repo ถูกตัว (Next
/meetingbovs CRA/meeting-backoffice) - ถ้าแตะ list หน้าแรก — จำว่าเป็น SSG
- ถ้าแตะ auth — ตรวจทั้ง frontend key และ
meeting-vtrc-apiredirectbypass - หลังเปลี่ยน
.envต้อง rebuild - อย่าอ้าง Sentry ทำงานจนกว่าจะ uncomment init และตรวจ DSN
Debt ที่โยงข้าม repo
| Debt ฝั่งนี้ | โยงไป |
|---|---|
SEC-MTBO-01 (X-API-Key ใน bundle) | ต้องสอดคล้องกับ API_KEY ใน meeting-vtrc-api env |
| CORR-MTBO-01 (SSG stale list) | ผู้ใช้เห็นข้อมูลคนละชุดกับ meeting-backoffice-new ที่ fetch ตอน runtime |
sourceDB hardcode dbHRMI_RC_C_rep | ต้องตรง schema/HR DB ที่ meeting API คาดหวัง |
ถ้าแก้ key หรือ path /secure/* ฝั่ง API โดยไม่ sync UI ทั้งสองตัว (Next + CRA embed) จะได้พฤติกรรมแตกกันโดยเงียบ
เอกสาร twin: meeting-backoffice-new · backend: meeting-vtrc-api