Files
Wallos/endpoints/user/delete_avatar.php
Miguel Ribeiro 69c7d52cf8 fix: vulnerability on delete avatar
fix: some strings not using translations on the calendar page
fix: delete avatar would not work if wallos is on a subfolder
2025-05-03 15:37:10 +02:00

51 lines
1.7 KiB
PHP

<?php
require_once '../../includes/connect_endpoint.php';
if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) {
die(json_encode([
"success" => false,
"message" => translate('session_expired', $i18n)
]));
}
$input = json_decode(file_get_contents('php://input'), true);
if (isset($input['avatar'])) {
$baseDir = realpath("../../images/uploads/logos/avatars/");
$avatar = $input['avatar'];
$cleanAvatar = rawurldecode($avatar);
$cleanAvatar = preg_replace('/[^a-zA-Z0-9_\-\.]/', '', $cleanAvatar);
$filePath = realpath($baseDir . DIRECTORY_SEPARATOR . $cleanAvatar);
if ($filePath === false || strpos($filePath, $baseDir) !== 0) {
echo json_encode([
"success" => false,
"message" => "Invalid file path"
]);
exit;
}
$sql = "SELECT avatar FROM user WHERE id = :userId";
$stmt = $db->prepare($sql);
$stmt->bindValue(':userId', $userId, SQLITE3_INTEGER);
$result = $stmt->execute();
$userAvatar = $result->fetchArray(SQLITE3_ASSOC)['avatar'];
// Check if $avatar matches the avatar in the user table
if ($avatar === $userAvatar) {
echo json_encode(array("success" => false, "message" => "Avatar in use"));
} else {
if (file_exists($filePath)) {
unlink($filePath);
echo json_encode(array("success" => true, "message" => translate("success", $i18n)));
} else {
echo json_encode(array("success" => false, "message" => translate("error", $i18n)));
}
}
} else {
echo json_encode(array("success" => false, "message" => translate("error", $i18n)));
}
?>