Deskripsi
Buat halaman di OpenKab untuk mengecek domain apa yang terbaca oleh API Database Gabungan. Ini sangat membantu troubleshooting ketika dropdown Kabupaten/Kecamatan kosong atau error "Domain tidak diizinkan".
Background
Saat ini, jika API menolak request karena domain tidak diizinkan, user tidak tahu:
- Domain apa yang terbaca oleh API
- Dari header mana domain tersebut (Origin/Referer/Host)
- Apakah request server-side atau browser
- Apa yang perlu dilakukan untuk memperbaiki
Halaman yang Dibuat
URL: /pengaturan/domain-check
Menu: Pengaturan → Cek Domain API
Auth: Login required (hanya user yang sudah login bisa akses)
Tampilan
┌─────────────────────────────────────────────────┐
│ Cek Domain API Database Gabungan │
│ (Hanya untuk Admin) │
├─────────────────────────────────────────────────┤
│ │
│ [🔍 Cek Domain Sekarang] │
│ │
│ ┌─────────────────────────────────────────────┐│
│ │ Domain Terdeteksi: simatik.bimakota.go.id ││
│ │ Sumber: Origin header ││
│ │ Status: ✅ Diizinkan ││
│ │ ││
│ │ Detail Headers: ││
│ │ • Origin: https://simatik.bimakota.go.id ││
│ │ • Host: api-simatik.bimakota.go.id ││
│ │ • X-Forwarded-For: 103.152.36.67 ││
│ │ ││
│ │ User: OpenKab (ID: 2) ││
│ │ Allowed Domains: simatik.bimakota.go.id ││
│ │ ││
│ │ Rekomendasi: ││
│ │ Domain sudah diizinkan. Tidak ada ││
│ │ perubahan needed. ││
│ └─────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────┘
File yang Diubah/Dibuat
| File |
Perubahan |
resources/views/pengaturan/domain-check.blade.php |
BARU — View halaman |
app/Http/Controllers/DomainCheckController.php |
BARU — Controller |
routes/web.php |
Tambah route di dalam group auth |
resources/views/layouts/navigations/sidebar.blade.php |
Tambah menu sidebar (hanya untuk admin) |
Security
routes/web.php
Route::middleware(['auth'])->group(function () {
Route::prefix('pengaturan')->group(function () {
Route::get('domain-check', [DomainCheckController::class, 'index'])->name('domain-check.index');
Route::post('domain-check', [DomainCheckController::class, 'check'])->name('domain-check.check');
});
});
DomainCheckController.php
public function index()
{
if (!auth()->check()) {
abort(403, 'Unauthorized');
}
return view('pengaturan.domain-check');
}
public function check(Request )
{
if (!auth()->check()) {
return response()->json(['message' => 'Unauthorized'], 403);
}
= Setting::where('key', 'database_gabungan_api_key')->value('value');
= Http::withHeaders([
'Authorization' => 'Bearer ' . ,
'Accept' => 'application/json',
])->get(config('app.databaseGabunganUrl') . '/api/v1/debug/domain-check');
return response()->json(->json());
}
Logic Frontend
.click(function() {
$.ajax({
url: '{{ route("domain-check.check") }}',
method: 'POST',
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
},
success: function(response) {
.html(renderResult(response));
},
error: function(xhr) {
if (xhr.status === 403) {
alert('Anda tidak memiliki akses');
} else {
.html(renderError(xhr.responseJSON));
}
}
});
});
Testing
- Test tanpa login → harus redirect ke halaman login
- Test dengan login user biasa → bisa akses
- Test dengan login admin → bisa akses
- Klik tombol "Cek Domain Sekarang" → tampilkan hasil
- Verify domain terdeteksi dengan benar
- Verify status (diizinkan/tidak) sesuai
- Verify recommendation muncul
Dependensi
Deskripsi
Buat halaman di OpenKab untuk mengecek domain apa yang terbaca oleh API Database Gabungan. Ini sangat membantu troubleshooting ketika dropdown Kabupaten/Kecamatan kosong atau error "Domain tidak diizinkan".
Background
Saat ini, jika API menolak request karena domain tidak diizinkan, user tidak tahu:
Halaman yang Dibuat
URL:
/pengaturan/domain-checkMenu: Pengaturan → Cek Domain API
Auth: Login required (hanya user yang sudah login bisa akses)
Tampilan
File yang Diubah/Dibuat
resources/views/pengaturan/domain-check.blade.phpapp/Http/Controllers/DomainCheckController.phproutes/web.phpauthresources/views/layouts/navigations/sidebar.blade.phpSecurity
routes/web.php
DomainCheckController.php
Logic Frontend
Testing
Dependensi
GET /api/v1/debug/domain-check(issue: API-Database-Gabungan#415)