7.8 KiB
7.8 KiB
Elemes LMS: Sisa Pekerjaan (To-Do List)
Berdasarkan log penyelesaian integrasi Velxio dan dokumen sebelumnya, berikut adalah daftar sisa pekerjaan (TODO) proyek. Terakhir diperbarui: 2026-04-10.
✅ Sudah Selesai
-
Verifikasi Penamaan Pin (Pin Naming)
- Diverifikasi dari
velxio/frontend/src/data/examples.ts— konvensi pin sudah benar. - Tabel referensi pin terdokumentasi di
README.md(Arduino Uno, LED, Button, Resistor, RGB LED). componentIdArduino Uno =arduino-uno, pin GND dinormalisasi olehmatchWiring().
- Diverifikasi dari
-
Pembuatan Konten Tambahan — 3 lesson Arduino baru:
hello_serial_arduino.md— Serial Monitor (tanpa wiring, kode saja)button_input_arduino.md— Button + LED (INPUT_PULLUP, 4 expected wiring)traffic_light_arduino.md— Lampu Lalu Lintas 3 LED (6 expected wiring)
-
Update Contoh Materi & Dokumentasi Guru
examples/content/disinkronkan (8 file, byte-identical dengancontent/)README.mdditambahkan: blok Arduino/Velxio, referensi pin, evaluasi, 3 FAQ baru, tabel jenis materihome.mdsekarang mendaftarkan 7 lesson
-
Network Config di Docker/Podman
- Typo
drive: bridge→driver: bridgedipodman-compose.yml network_mode: service:elemes-tsdihapus karena tidak kompatibel dengannetworksblock
- Typo
-
Commit semua perubahan
- Elemes: 2 commit ahead of origin
- Velxio: 2 commit ahead of origin
-
Locust E2E Test Suite —
load-test/folder:content_parser.py— scancontent/*.md, deteksi tipe, ekstrak test data →test_data.jsonlocustfile.py— 7 weighted tasks (browse, view detail, compile C, compile Python, verify Arduino, complete flow, progress report)- Auto-inject token test (
LOCUST_TEST_*) ketokens_siswa.csv - URL backend dikonfigurasi user melalui Locust web UI
🔴 Prioritas Tinggi
- Testing End-to-End (E2E)
- Script Locust sudah disiapkan (di dalam
load-test/). - Bug pada proxy JSON parsing dari frontend ke backend sudah diperbaiki dengan
force=Truedansilent=Truediauth.py, sehingga Login via test suite berhasil.
- Script Locust sudah disiapkan (di dalam
- Push ke Remote
git pushuntuk repo elemes dan velxio (keduanya ahead of origin).
- Hapus file test lama di root
elemes/:rm elemes/content_parser.py elemes/locustfile.py elemes/requirements-test.txt(sudah dibersihkan sebelumnya, sekarang rapi diload-test).
🟡 Prioritas Sedang
- Tuning Crosshair/UX Mobile
- Melakukan fine-tuning pada opacity warna dan pola garis dashed pada crosshair UI di Velxio agar lebih responsif terhadap device layar sentuh saat dipakai live.
🟢 Prioritas Rendah (Enhancement Simulator Velxio)
- Mengunci Tata Letak (Component Locking)
- Menonaktifkan fitur drag atau delete komponen pada tampilan embed, sehingga siswa hanya difokuskan pada kegiatan menarik (wiring) kabel saja tanpa mengganggu tatanan dasar board.
- Solution Overlay
- Mengembangkan tampilan overlay solusi/jawaban wiring untuk review mode, agar siswa melihat panduan visual kabel mana yang kurang pas.
- Perintah
elemes:compile_and_runAPI Bridge- Mengkoneksikan trigger kompilasi sehingga UI utama Elemes juga bisa mem-bypass eksekusi ke dalam iFrame (saat ini placeholder
compile_and_runbridge belum sepenuhnya utuh ter-wire dengan UI submit).
- Mengkoneksikan trigger kompilasi sehingga UI utama Elemes juga bisa mem-bypass eksekusi ke dalam iFrame (saat ini placeholder
⚪ Opsional
Locust Load Testing Plan→ Sudah diimplementasi diload-test/- Locust Hasil Analisis — Evaluasi skenario 50 user (5 worker) selesai. Finding: Rata-rata respons LMS stabil di 200ms (50th percentile). Namun, kompilasi Arduino (
/velxio/api/compile/) terdeteksi sebagai CPU bottleneck yang menyebabkan waktu tunggu mencapai 30 detik (95th percentile) di bawah tekanan serbuan request berskala ekstrem. Server/LMS dinilai layak dan responsif secara keseluruhan.
🚨 Security Review & Vulnerability Fixes (Prioritas Kritis)
Berdasarkan hasil code review terbaru yang difokuskan pada keamanan sistem dan exposed routes API, ditemukan beberapa celah kerentanan kritis yang perlu segera diperbaiki. Berikut adalah detail temuan dan task perbaikannya:
1. Remote Code Execution (RCE) via Endpoint /compile
- Penjelasan: Endpoint
/compiledielemes/routes/compile.pymenerima dan mengeksekusi kode C dan Python yang di-submit oleh pengguna secara langsung (viasubprocess.run). Eksekusi ini berjalan di dalam kontainerelemestanpa adanya batasan hak akses atau sandbox tambahan. Pengguna anonim/jahat dapat mengeksekusi shell script atau perintah OS (sepertios.system("rm -rf /")) untuk menghapus, memodifikasi, atau membaca file sensitif. Terlebih lagi, volumecontent,tokens_siswa.csv, danassetsdi-mount dengan akses read-write pada konfigurasi podman/docker, sehingga token akses seluruh siswa rentan diretas atau data materi bisa terhapus. - Task Perbaikan:
- Gunakan Sandbox gVisor (Compiler Worker): Pisahkan fungsi kompilasi ke dalam kontainer terpisah (
compiler-worker) yang dijalankan menggunakan runtimerunsc(gVisor). Backend utama akan mengirimkan kode via HTTP internal. - Read-Only Mounts: Ubah konfigurasi bind mount di
podman-compose.ymlpada direktori sensitif (tokens_siswa.csv,content,assets) menjadi read-only dengan menambahkan parameter:ropada kontainer backend utama. - Otentikasi / Wajib Login: Lindungi route
/compiledengan menambahkan pengecekan token mahasiswa agar tidak bisa diakses oleh user anonim di luar sistem. - Resource Limiting: Terapkan limit komputasi RAM dan CPU pada kontainer worker guna menghindari celah Denial of Service (DoS).
- Gunakan Sandbox gVisor (Compiler Worker): Pisahkan fungsi kompilasi ke dalam kontainer terpisah (
2. Information Disclosure via Endpoint /progress-report.json
- Penjelasan: Rute
/progress-report.jsondan/progress-report/export-csvdielemes/routes/progress.pydapat diakses oleh siapa saja karena tidak menerapkan validasi token atau role checks. Data kemajuan belajar dan nama semua siswa di dalam file CSV akan terekspos tanpa otentikasi. - Task Perbaikan:
- Otentikasi Token: Tambahkan validasi token (via
validate_token) sebelum memberikan response dari kedua route tersebut.
- Otentikasi Token: Tambahkan validasi token (via
3. Miskonfigurasi CORS Longgar (Overly Permissive)
- Penjelasan: Deklarasi
CORS(app)dielemes/app.pymengizinkan seluruh asal domain (all origins) secara default (*). Mengingat sistem sudah menggunakan sesi berbasis Cookie (samesite='Lax'), ada potensi ancaman pengiriman requests lintas website dari penyerang. - Task Perbaikan:
- Batasi Konfigurasi CORS: Gunakan environment variable
ORIGINuntuk menentukan domain eksplisit yang diizinkan (misal:http://localhost:3000).
- Batasi Konfigurasi CORS: Gunakan environment variable
4. Penyimpanan Token Teks Terbuka (Plaintext Credentials)
- Penjelasan: Data di
tokens_siswa.csvmenyimpan token dalam format plaintext. Meskipun hanya file CSV lokal, bocornya satu file tersebut akan mengkompromikan semua token akses dalam sistem (terutama karena kerentanan RCE di poin 1). - Task Perbaikan:
- Proteksi Token CSV: Prioritas utama adalah menambal vulnerability utama (RCE via gVisor & Read-Only Mounts) agar peretas tidak bisa mengekstrak isinya.
- (Opsional) Hashed Tokens: Gunakan fungsi hashing saat membaca/memverifikasi token.
5. Tidak Ada Sanitasi Input pada Parameter Path (Defense in Depth)
- Penjelasan: Fungsi route
/lesson/<filename>.jsondielemes/routes/lessons.pymengandalkan<filename>yang langsung disambungkan viaos.path.join(). Meskipun Flask memblokir../(Directory Traversal konvensional), tetap berisiko jika pengguna memanipulasi request API secara lebih advanced. - Task Perbaikan:
- Terapkan
secure_filename: Gunakanwerkzeug.utils.secure_filename(filename)sebelum argumen<filename>disambung ke direktori content.
- Terapkan