Harden Project 01 public endpoints

This commit is contained in:
Andrie
2026-06-11 23:15:42 +07:00
parent a90748d9c1
commit 6f4488c1b8
39 changed files with 1183 additions and 612 deletions
+30 -46
View File
@@ -1,55 +1,39 @@
<?php
// api/parsil/simpan.php — Simpan data parsil tanah baru
header('Content-Type: application/json');
require_once '../../auth/helper.php';
require_once '../../includes/validation.php';
require_admin_post();
require_once '../../koneksi.php';
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
echo json_encode(['status' => 'error', 'message' => 'Method not allowed']);
exit;
}
$nama = clean_string($_POST['nama_parsil'] ?? '', 150);
$status = validate_enum($_POST['status_kepemilikan'] ?? '', ['SHM', 'HGB', 'HGU', 'HP']);
$geojsonRaw = trim($_POST['geojson'] ?? '');
$decoded = decode_geojson($geojsonRaw);
$luas = max(0, (float)($_POST['luas_m2'] ?? 0));
$nama = trim($_POST['nama_parsil'] ?? '');
$status = trim($_POST['status_kepemilikan'] ?? '');
$geojson = trim($_POST['geojson'] ?? '');
$luas = (float) ($_POST['luas_m2'] ?? 0);
$allowed_status = ['SHM', 'HGB', 'HGU', 'HP'];
if (!$nama) {
echo json_encode(['status' => 'error', 'message' => 'Nama parsil tidak boleh kosong']);
exit;
}
if (!in_array($status, $allowed_status)) {
echo json_encode(['status' => 'error', 'message' => 'Status kepemilikan tidak valid']);
exit;
}
json_decode($geojson);
if (json_last_error() !== JSON_ERROR_NONE) {
echo json_encode(['status' => 'error', 'message' => 'Data geometri tidak valid']);
exit;
if ($nama === '' || $status === null || $decoded === null || !validate_geojson_geometry($decoded, ['Polygon'])) {
json_error('Data parsil tidak valid.', 400);
}
$stmt = $conn->prepare("INSERT INTO data_parsil (nama_parsil, status_kepemilikan, geojson, luas_m2) VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $nama, $status, $geojson, $luas);
if ($stmt->execute()) {
$id = $conn->insert_id;
echo json_encode([
'status' => 'success',
'message' => 'Data parsil berhasil disimpan',
'data' => [
'id' => $id,
'nama_parsil' => $nama,
'status_kepemilikan' => $status,
'geojson' => $geojson,
'luas_m2' => $luas
]
]);
} else {
echo json_encode(['status' => 'error', 'message' => 'Gagal menyimpan: ' . $stmt->error]);
if (!$stmt) {
error_log('Project 01 parcel insert prepare failed: ' . $conn->error);
json_error('Gagal menyimpan data parsil.', 500);
}
$stmt->close();
$conn->close();
$stmt->bind_param('sssd', $nama, $status, $geojsonRaw, $luas);
if (!$stmt->execute()) {
error_log('Project 01 parcel insert failed: ' . $stmt->error);
json_error('Gagal menyimpan data parsil.', 500);
}
json_success([
'message' => 'Data parsil berhasil disimpan',
'data' => [
'id' => $conn->insert_id,
'nama_parsil' => $nama,
'status_kepemilikan' => $status,
'geojson' => $geojsonRaw,
'luas_m2' => $luas,
],
]);