Portal SPMB tidak memakai kata sandi tetap. Setiap kali orang tua/wali calon siswa hendak masuk, sistem menerbitkan satu kode OTP (One-Time Password) sekali pakai dan mengirimkannya ke alamat email yang dimasukkan — tetapi hanya bila alamat email itu benar-benar tercatat di Odoo YPII sebagai kontak pemilik pendaftaran calon siswa yang masih aktif. Dari sisi layar, kedua kemungkinan itu tampak sama persis: sistem selalu menjawab bahwa kode sudah dikirim bila alamatnya terdaftar.
Begitu orang tua/wali mengirimkan alamat email pada halaman masuk Portal SPMB, sistem mencari kontak (res.partner) di Odoo YPII yang alamat emailnya cocok dan yang memiliki minimal satu pendaftaran calon siswa (crm.lead) yang masih aktif dan belum berstatus selesai. Bila ditemukan, sistem menerbitkan kode OTP, menyimpan bentuk teracaknya, dan mengirimkan kode itu sebagai email keluar melalui mail server Odoo YPII. Bila tidak ditemukan, sistem tidak menerbitkan kode apa pun dan tidak mengirim email apa pun — namun jawaban yang diterima halaman masuk tetap sama.
Setelah orang tua/wali memasukkan kode itu kembali ke Portal SPMB, sistem memverifikasinya terhadap bentuk teracak yang tersimpan, lalu menerbitkan sesi masuk berupa token akses dan token penyegar yang ditandatangani Portal SPMB sendiri.
Otomasi ini melibatkan tiga bagian. Aplikasi web Portal SPMB menampilkan halaman masuk dan meneruskan permintaan; layanan backend Portal SPMB menerbitkan, menyimpan, dan memverifikasi kode OTP serta menerbitkan sesi; Odoo YPII menyediakan data kontak dan pendaftaran calon siswa sekaligus menjadi satu-satunya jalur pengiriman email keluar.
Portal SPMB tidak memiliki server email sendiri. Seluruh email kode OTP dikirim sebagai pesan keluar Odoo YPII memakai konfigurasi mail server (ir.mail_server) yang berlaku di Odoo YPII.
Pemicunya adalah pengiriman alamat email pada halaman masuk Portal SPMB, baik saat pertama kali meminta kode maupun saat meminta kode dikirim ulang. Otomasi baru berlanjut sampai pengiriman email bila seluruh syarat berikut terpenuhi.
res.partner) di Odoo YPII yang alamat emailnya cocok dengan alamat yang dimasukkan, setelah alamat dinormalisasi menjadi huruf kecil dan dibuang spasi di ujungnya.crm.lead) yang masih aktif dan belum berada pada tahap yang ditandai sebagai tahap kemenangan (tahap yang menandakan calon siswa sudah resmi terdaftar).Bila salah satu syarat pada butir 2 atau 3 tidak terpenuhi, otomasi berhenti tanpa menerbitkan kode dan tanpa mengirim email — dan halaman masuk tetap menerima jawaban yang sama seperti bila email terkirim.
Jawaban "tidak ditemukan" untuk pendaftaran di luar cakupan sesi bukan kekeliruan sistem. Membedakan "ditolak" dari "tidak ditemukan" akan mengungkapkan bahwa sebuah pendaftaran memang ada, dan itu informasi yang tidak boleh bocor ke pemegang sesi lain.
Seluruh perilaku otomasi ini ditentukan variabel lingkungan pada deployment Portal SPMB, bukan oleh pengaturan di dalam Odoo YPII. Cara mengisinya dijelaskan pada Mengonfigurasi Deployment Portal SPMB.
| Yang diatur | Variabel | Nilai bawaan | Akibat bila salah |
|---|---|---|---|
| Jumlah digit kode OTP | OTP_LENGTH |
6 |
Kode lebih pendek menurunkan kesulitan tebakan |
| Masa berlaku satu kode | OTP_TTL_SECONDS |
300 (5 menit) |
Terlalu pendek membuat kode kedaluwarsa sebelum email tiba |
| Batas percobaan memasukkan kode | OTP_MAX_ATTEMPTS |
5 |
Terlalu longgar membuka peluang tebakan berulang |
| Jeda minimum kirim ulang | OTP_RESEND_COOLDOWN_SECONDS |
60 |
Terlalu pendek membuka peluang pengiriman email beruntun |
| Identitas pengirim email | OTP_EMAIL_FROM |
kosong | Email terkirim atas nama pengirim bawaan mail server Odoo YPII |
| Kunci penanda tangan sesi | JWT_SECRET |
kosong | Kosong berarti verifikasi kode selalu gagal dan tidak ada yang dapat masuk |
| Masa berlaku token akses | ACCESS_TOKEN_TTL_SECONDS |
900 (15 menit) |
— |
| Masa berlaku token penyegar | REFRESH_TOKEN_TTL_SECONDS |
2592000 (30 hari) |
— |
| Captcha pada permintaan kode | CAPTCHA_ENABLED, HCAPTCHA_SECRET, NEXT_PUBLIC_HCAPTCHA_SITE_KEY |
captcha nonaktif | Backend aktif tetapi site key aplikasi web kosong membuat tidak seorang pun dapat masuk |
Selain itu, mail server Odoo YPII (ir.mail_server) harus terkonfigurasi dan berfungsi. Otomasi ini tidak memiliki jalur pengiriman email cadangan.
Otomasi ini dirancang gagal-tertutup dan tidak informatif ke luar. Kegagalan pada tahap pencarian kontak maupun pada tahap pengiriman email sama-sama tidak diberitahukan kepada pengguna.
| Kegagalan | Yang dilihat pengguna | Yang sebenarnya terjadi |
|---|---|---|
| Alamat email tidak tercatat di Odoo YPII | Pesan keberhasilan umum; kode tidak pernah tiba | Tidak ada kode diterbitkan dan tidak ada email dikirim |
| Kontak ada tetapi seluruh pendaftarannya sudah tidak aktif atau sudah selesai | Pesan keberhasilan umum; kode tidak pernah tiba | Kontak tidak memenuhi syarat pembukaan sesi |
| Mail server Odoo YPII gagal mengirim | Pesan keberhasilan umum; kode tidak pernah tiba | Kegagalan hanya tercatat di sisi sistem |
| Layanan hCaptcha tidak terjangkau atau kehabisan waktu | Permintaan kode gagal | Verifikasi captcha bersifat gagal-tertutup, dianggap tidak lolos |
JWT_SECRET kosong pada deployment |
Kode OTP tiba, tetapi memasukkannya berakhir dengan kegagalan layanan | Sistem menolak menerbitkan sesi yang tidak aman |
| Kode dimasukkan setelah masa berlaku habis, atau melewati batas percobaan | Kode ditolak | Kode dianggap hangus; harus meminta kode baru |
Karena permintaan kode yang berhasil dan yang tidak menghasilkan tampilan yang sama, laporan "kode OTP tidak pernah sampai" tidak dapat dipakai untuk menyimpulkan bahwa email pengguna tidak terdaftar. Penyebabnya bisa alamat tidak terdaftar, pendaftaran sudah tidak aktif, atau mail server Odoo YPII yang sedang bermasalah — ketiganya terlihat identik dari layar. Pemeriksaannya dilakukan di Odoo YPII dan pada log layanan backend, bukan dari layar orang tua/wali.
Jejak otomasi ini terbatas dan perlu dicari di dua tempat.
make logs-backend sesuai Menjalankan, Memantau, dan Menaikkan Versi Stack Portal SPMB. Di sinilah kegagalan pemanggilan Odoo YPII dan kegagalan pengiriman email terlihat.Record pesan keluar kode OTP di Odoo YPII ditandai untuk dihapus sendiri setelah terkirim. Karena itu email kode OTP yang sudah berhasil terkirim tidak dapat ditelusuri kembali isinya di Odoo YPII, dan tidak ada arsip kode yang pernah diterbitkan. Ketiadaan jejak email di Odoo YPII bukan bukti bahwa email tidak pernah dikirim.