OTP
Direktori: app/Services/Otp/
Layanan One-Time Password untuk generate dan verifikasi kode. Dipakai oleh wizard setup untuk verifikasi email, dan fitur lain yang butuh verifikasi kode berbasis email.
Ringkasan
Dua operasi:
- Generate — buat kode 6-digit, simpan di tabel
otpsdengan expiry 10 menit - Verify — cek kode yang dimasukkan, handle expired/invalid
Kenapa Ada
- Keamanan: Kode pakai
random_int()(cryptographically secure), bukanrand() - Self-cleaning: Kode lama dihapus sebelum generate baru; kode expired/terverifikasi dihapus saat dicek
- Traceable: Setiap OTP menyimpan metadata (email, IP, user agent)
- Time-limited: Kode expired 10 menit
Method
Generate::handle(string $email, array $meta = []): Otp
Algoritma:
- Hapus semua OTP existing untuk email ini
- Generate kode 6-digit:
str_pad(random_int(0, 999999), 6, '0', STR_PAD_LEFT) - Simpan di
otpsdenganexpired_at = now() + 10 minutes - Return instance
Otp
php
$otp = Generate::handle('user@example.com');
// Kirim $otp->code ke email userVerify::handle(string $email, string $code): array
Algoritma:
- Query
otpsWHEREcode= input ANDmeta->email= email - Tidak ditemukan →
{ success: false, message: '...' } - Expired → hapus, return
{ success: false, message: 'Expired.' } - Valid → hapus OTP (one-time use), return
{ success: true }
php
$result = Verify::handle('user@example.com', '123456');
if ($result['success']) { /* verified */ }Frontend Integration
otp-form.stores.ts → otp.services.ts → otp.api.ts → POST /api/setup/send-otp| Store | Tujuan |
|---|---|
super-user-otp-form.stores.ts | Input kode + state send/verify |
super-user-otp-modal.stores.ts | Modal OTP open/close |
super-user-otp-resend.stores.ts | Countdown resend (60s) |
File Penting
| File | Tujuan |
|---|---|
app/Services/Otp/Generate.php | Generate kode + simpan ke database |
app/Services/Otp/Verify.php | Verifikasi kode + cek expired |
app/Models/Platform/Otp/Otp.php | Model otps — code, expired_at, meta |
app/Http/Controllers/Api/OtpController.php | API controller (send + verify) |