This commit is contained in:
+35
-1
@@ -23,7 +23,7 @@ $path = str_replace('/api/', '', $path);
|
||||
$segments = explode('/', trim($path, '/'));
|
||||
$resource = $segments[0] ?? '';
|
||||
|
||||
if ($resource !== 'session' && $resource !== 'login' && $resource !== 'logout') {
|
||||
if ($resource !== 'session' && $resource !== 'login' && $resource !== 'logout' && $resource !== 'registration') {
|
||||
$loggedin = isset($_SESSION['neptune_loggedin']) && $_SESSION['neptune_loggedin'] === true;
|
||||
if (!$loggedin) {
|
||||
http_response_code(401);
|
||||
@@ -70,6 +70,9 @@ try {
|
||||
case 'shapes':
|
||||
handleShapes($method, $id, $db);
|
||||
break;
|
||||
case 'registration':
|
||||
handleRegistration($method, $db);
|
||||
break;
|
||||
default:
|
||||
http_response_code(404);
|
||||
echo json_encode(['error' => 'Not found']);
|
||||
@@ -79,6 +82,28 @@ try {
|
||||
echo json_encode(['error' => $e->getMessage()]);
|
||||
}
|
||||
|
||||
function handleRegistration($method, $db) {
|
||||
if ($method === 'GET') {
|
||||
$stmt = $db->prepare("SELECT setting_value FROM neptune_settings WHERE setting_key = 'registration_enabled'");
|
||||
$stmt->execute();
|
||||
$row = $stmt->fetch();
|
||||
$enabled = $row ? $row['setting_value'] !== '0' : true;
|
||||
echo json_encode(['registration_enabled' => $enabled]);
|
||||
} elseif ($method === 'POST') {
|
||||
$role = $_SESSION['neptune_role'] ?? 'user';
|
||||
if ($role !== 'admin') {
|
||||
http_response_code(403);
|
||||
echo json_encode(['error' => 'Admins only']);
|
||||
return;
|
||||
}
|
||||
$data = json_decode(file_get_contents('php://input'), true);
|
||||
$enabled = isset($data['registration_enabled']) ? ($data['registration_enabled'] ? '1' : '0') : '1';
|
||||
$stmt = $db->prepare("INSERT INTO neptune_settings (setting_key, setting_value) VALUES ('registration_enabled', ?) ON DUPLICATE KEY UPDATE setting_value = ?");
|
||||
$stmt->execute([$enabled, $enabled]);
|
||||
echo json_encode(['status' => 'success', 'registration_enabled' => $enabled === '1']);
|
||||
}
|
||||
}
|
||||
|
||||
function handleSession($method, $db) {
|
||||
$loggedin = isset($_SESSION['neptune_loggedin']) && $_SESSION['neptune_loggedin'] === true;
|
||||
if (!$loggedin && $method === 'GET') {
|
||||
@@ -152,6 +177,15 @@ function handleLogin($method, $db) {
|
||||
$_SESSION['neptune_username'] = $user['username'];
|
||||
$_SESSION['neptune_role'] = $user['role'];
|
||||
} else {
|
||||
$stmt = $db->prepare("SELECT setting_value FROM neptune_settings WHERE setting_key = 'registration_enabled'");
|
||||
$stmt->execute();
|
||||
$regSetting = $stmt->fetch();
|
||||
$registrationEnabled = $regSetting ? $regSetting['setting_value'] !== '0' : true;
|
||||
if (!$registrationEnabled) {
|
||||
http_response_code(403);
|
||||
echo json_encode(['error' => 'Registration is disabled by admin']);
|
||||
return;
|
||||
}
|
||||
$count = $db->query("SELECT COUNT(*) as c FROM neptune_users")->fetch()['c'];
|
||||
$role = ($count == 0) ? 'admin' : 'user';
|
||||
$stmt = $db->prepare("INSERT INTO neptune_users (user_token, username, email, role) VALUES (?, ?, ?, ?)");
|
||||
|
||||
Reference in New Issue
Block a user