@@ -698,33 +722,34 @@ export function openAdminPanel() {
`;
document.body.appendChild(adminModal);
- // Bind closing events that will use our enhanced close function.
+ // Bind closing
document.getElementById("closeAdminPanel").addEventListener("click", closeAdminPanel);
- adminModal.addEventListener("click", (e) => {
- if (e.target === adminModal) closeAdminPanel();
- });
+ adminModal.addEventListener("click", e => { if (e.target === adminModal) closeAdminPanel(); });
document.getElementById("cancelAdminSettings").addEventListener("click", closeAdminPanel);
- // Bind other buttons.
+ // Bind other buttons
document.getElementById("adminOpenAddUser").addEventListener("click", () => {
toggleVisibility("addUserModal", true);
document.getElementById("newUsername").focus();
});
document.getElementById("adminOpenRemoveUser").addEventListener("click", () => {
- if (typeof window.loadUserList === "function") {
- window.loadUserList();
- }
+ if (typeof window.loadUserList === "function") window.loadUserList();
toggleVisibility("removeUserModal", true);
});
document.getElementById("adminOpenUserPermissions").addEventListener("click", () => {
openUserPermissionsModal();
});
- document.getElementById("saveAdminSettings").addEventListener("click", () => {
+ // Save handler
+ document.getElementById("saveAdminSettings").addEventListener("click", () => {
const disableFormLoginCheckbox = document.getElementById("disableFormLogin");
const disableBasicAuthCheckbox = document.getElementById("disableBasicAuth");
const disableOIDCLoginCheckbox = document.getElementById("disableOIDCLogin");
- const totalDisabled = [disableFormLoginCheckbox, disableBasicAuthCheckbox, disableOIDCLoginCheckbox].filter(cb => cb.checked).length;
+ const enableWebDAVCheckbox = document.getElementById("enableWebDAV");
+ const sharedMaxUploadSizeInput = document.getElementById("sharedMaxUploadSize");
+
+ const totalDisabled = [disableFormLoginCheckbox, disableBasicAuthCheckbox, disableOIDCLoginCheckbox]
+ .filter(cb => cb.checked).length;
if (totalDisabled === 3) {
showToast(t("at_least_one_login_method"));
disableOIDCLoginCheckbox.checked = false;
@@ -738,8 +763,8 @@ export function openAdminPanel() {
}
return;
}
- const newHeaderTitle = document.getElementById("headerTitle").value.trim();
+ const newHeaderTitle = document.getElementById("headerTitle").value.trim();
const newOIDCConfig = {
providerUrl: document.getElementById("oidcProviderUrl").value.trim(),
clientId: document.getElementById("oidcClientId").value.trim(),
@@ -749,13 +774,18 @@ export function openAdminPanel() {
const disableFormLogin = disableFormLoginCheckbox.checked;
const disableBasicAuth = disableBasicAuthCheckbox.checked;
const disableOIDCLogin = disableOIDCLoginCheckbox.checked;
+ const enableWebDAV = enableWebDAVCheckbox.checked;
+ const sharedMaxUploadSize = parseInt(sharedMaxUploadSizeInput.value, 10) || 0;
const globalOtpauthUrl = document.getElementById("globalOtpauthUrl").value.trim();
+
sendRequest("/api/admin/updateConfig.php", "POST", {
header_title: newHeaderTitle,
oidc: newOIDCConfig,
disableFormLogin,
disableBasicAuth,
disableOIDCLogin,
+ enableWebDAV,
+ sharedMaxUploadSize,
globalOtpauthUrl
}, { "X-CSRF-Token": window.csrfToken })
.then(response => {
@@ -764,26 +794,32 @@ export function openAdminPanel() {
localStorage.setItem("disableFormLogin", disableFormLogin);
localStorage.setItem("disableBasicAuth", disableBasicAuth);
localStorage.setItem("disableOIDCLogin", disableOIDCLogin);
+ localStorage.setItem("enableWebDAV", enableWebDAV);
+ localStorage.setItem("sharedMaxUploadSize", sharedMaxUploadSize);
if (typeof window.updateLoginOptionsUI === "function") {
- window.updateLoginOptionsUI({ disableFormLogin, disableBasicAuth, disableOIDCLogin });
+ window.updateLoginOptionsUI({
+ disableFormLogin,
+ disableBasicAuth,
+ disableOIDCLogin
+ });
}
- // Update the captured initial state since the changes have now been saved.
captureInitialAdminConfig();
closeAdminPanel();
loadAdminConfigFunc();
-
} else {
showToast(t("error_updating_settings") + ": " + (response.error || t("unknown_error")));
}
})
.catch(() => { });
});
+
// Enforce login option constraints.
const disableFormLoginCheckbox = document.getElementById("disableFormLogin");
const disableBasicAuthCheckbox = document.getElementById("disableBasicAuth");
const disableOIDCLoginCheckbox = document.getElementById("disableOIDCLogin");
function enforceLoginOptionConstraint(changedCheckbox) {
- const totalDisabled = [disableFormLoginCheckbox, disableBasicAuthCheckbox, disableOIDCLoginCheckbox].filter(cb => cb.checked).length;
+ const totalDisabled = [disableFormLoginCheckbox, disableBasicAuthCheckbox, disableOIDCLoginCheckbox]
+ .filter(cb => cb.checked).length;
if (changedCheckbox.checked && totalDisabled === 3) {
showToast(t("at_least_one_login_method"));
changedCheckbox.checked = false;
@@ -793,13 +829,17 @@ export function openAdminPanel() {
disableBasicAuthCheckbox.addEventListener("change", function () { enforceLoginOptionConstraint(this); });
disableOIDCLoginCheckbox.addEventListener("change", function () { enforceLoginOptionConstraint(this); });
+ // Initial checkbox and input states
document.getElementById("disableFormLogin").checked = config.loginOptions.disableFormLogin === true;
document.getElementById("disableBasicAuth").checked = config.loginOptions.disableBasicAuth === true;
document.getElementById("disableOIDCLogin").checked = config.loginOptions.disableOIDCLogin === true;
+ document.getElementById("enableWebDAV").checked = config.enableWebDAV === true;
+ document.getElementById("sharedMaxUploadSize").value = config.sharedMaxUploadSize || "";
- // Capture initial state after the modal loads.
captureInitialAdminConfig();
+
} else {
+ // Update existing modal and show
adminModal.style.backgroundColor = overlayBackground;
const modalContent = adminModal.querySelector(".modal-content");
if (modalContent) {
@@ -815,6 +855,8 @@ export function openAdminPanel() {
document.getElementById("disableFormLogin").checked = config.loginOptions.disableFormLogin === true;
document.getElementById("disableBasicAuth").checked = config.loginOptions.disableBasicAuth === true;
document.getElementById("disableOIDCLogin").checked = config.loginOptions.disableOIDCLogin === true;
+ document.getElementById("enableWebDAV").checked = config.enableWebDAV === true;
+ document.getElementById("sharedMaxUploadSize").value = config.sharedMaxUploadSize || "";
adminModal.style.display = "flex";
captureInitialAdminConfig();
}
@@ -837,6 +879,8 @@ export function openAdminPanel() {
document.getElementById("disableFormLogin").checked = localStorage.getItem("disableFormLogin") === "true";
document.getElementById("disableBasicAuth").checked = localStorage.getItem("disableBasicAuth") === "true";
document.getElementById("disableOIDCLogin").checked = localStorage.getItem("disableOIDCLogin") === "true";
+ document.getElementById("enableWebDAV").checked = localStorage.getItem("enableWebDAV") === "true";
+ document.getElementById("sharedMaxUploadSize").value = localStorage.getItem("sharedMaxUploadSize") || "";
adminModal.style.display = "flex";
captureInitialAdminConfig();
} else {
diff --git a/public/webdav.php b/public/webdav.php
index 62d68a7..1433262 100644
--- a/public/webdav.php
+++ b/public/webdav.php
@@ -1,6 +1,7 @@
addPlugin($authPlugin);
-//$server->addPlugin(new BrowserPlugin()); // optional HTML browser UI
$server->addPlugin(
new LocksPlugin(
new LocksFileBackend(sys_get_temp_dir() . '/sabre-locksdb')
diff --git a/src/controllers/adminController.php b/src/controllers/adminController.php
index 6df3651..6f75d40 100644
--- a/src/controllers/adminController.php
+++ b/src/controllers/adminController.php
@@ -35,7 +35,9 @@ class AdminController
* @OA\Property(property="disableBasicAuth", type="boolean", example=false),
* @OA\Property(property="disableOIDCLogin", type="boolean", example=false)
* ),
- * @OA\Property(property="globalOtpauthUrl", type="string", example="")
+ * @OA\Property(property="globalOtpauthUrl", type="string", example=""),
+ * @OA\Property(property="enableWebDAV", type="boolean", example=false),
+ * @OA\Property(property="sharedMaxUploadSize", type="integer", example=52428800)
* )
* ),
* @OA\Response(
@@ -88,7 +90,9 @@ class AdminController
* @OA\Property(property="disableBasicAuth", type="boolean", example=false),
* @OA\Property(property="disableOIDCLogin", type="boolean", example=false)
* ),
- * @OA\Property(property="globalOtpauthUrl", type="string", example="")
+ * @OA\Property(property="globalOtpauthUrl", type="string", example=""),
+ * @OA\Property(property="enableWebDAV", type="boolean", example=false),
+ * @OA\Property(property="sharedMaxUploadSize", type="integer", example=52428800)
* )
* ),
* @OA\Response(
@@ -149,7 +153,7 @@ class AdminController
exit;
}
- // Prepare configuration array.
+ // Prepare existing settings
$headerTitle = isset($data['header_title']) ? trim($data['header_title']) : "";
$oidc = isset($data['oidc']) ? $data['oidc'] : [];
$oidcProviderUrl = isset($oidc['providerUrl']) ? filter_var($oidc['providerUrl'], FILTER_SANITIZE_URL) : '';
@@ -183,20 +187,38 @@ class AdminController
}
$globalOtpauthUrl = isset($data['globalOtpauthUrl']) ? trim($data['globalOtpauthUrl']) : "";
+ // ── NEW: enableWebDAV flag ──────────────────────────────────────
+ $enableWebDAV = false;
+ if (array_key_exists('enableWebDAV', $data)) {
+ $enableWebDAV = filter_var($data['enableWebDAV'], FILTER_VALIDATE_BOOLEAN);
+ } elseif (isset($data['features']['enableWebDAV'])) {
+ $enableWebDAV = filter_var($data['features']['enableWebDAV'], FILTER_VALIDATE_BOOLEAN);
+ }
+
+ // ── NEW: sharedMaxUploadSize ──────────────────────────────────────
+ $sharedMaxUploadSize = null;
+ if (array_key_exists('sharedMaxUploadSize', $data)) {
+ $sharedMaxUploadSize = filter_var($data['sharedMaxUploadSize'], FILTER_VALIDATE_INT);
+ } elseif (isset($data['features']['sharedMaxUploadSize'])) {
+ $sharedMaxUploadSize = filter_var($data['features']['sharedMaxUploadSize'], FILTER_VALIDATE_INT);
+ }
+
$configUpdate = [
- 'header_title' => $headerTitle,
- 'oidc' => [
- 'providerUrl' => $oidcProviderUrl,
- 'clientId' => $oidcClientId,
- 'clientSecret' => $oidcClientSecret,
- 'redirectUri' => $oidcRedirectUri,
+ 'header_title' => $headerTitle,
+ 'oidc' => [
+ 'providerUrl' => $oidcProviderUrl,
+ 'clientId' => $oidcClientId,
+ 'clientSecret' => $oidcClientSecret,
+ 'redirectUri' => $oidcRedirectUri,
],
- 'loginOptions' => [
+ 'loginOptions' => [
'disableFormLogin' => $disableFormLogin,
'disableBasicAuth' => $disableBasicAuth,
'disableOIDCLogin' => $disableOIDCLogin,
],
- 'globalOtpauthUrl' => $globalOtpauthUrl
+ 'globalOtpauthUrl' => $globalOtpauthUrl,
+ 'enableWebDAV' => $enableWebDAV,
+ 'sharedMaxUploadSize' => $sharedMaxUploadSize // ← NEW
];
// Delegate to the model.
@@ -207,4 +229,4 @@ class AdminController
echo json_encode($result);
exit;
}
-}
+}
\ No newline at end of file
diff --git a/src/controllers/folderController.php b/src/controllers/folderController.php
index aa87c8b..97401e1 100644
--- a/src/controllers/folderController.php
+++ b/src/controllers/folderController.php
@@ -401,6 +401,20 @@ class FolderController
*
* @return void Outputs HTML content.
*/
+
+ function formatBytes($bytes)
+ {
+ if ($bytes < 1024) {
+ return $bytes . " B";
+ } elseif ($bytes < 1024 * 1024) {
+ return round($bytes / 1024, 2) . " KB";
+ } elseif ($bytes < 1024 * 1024 * 1024) {
+ return round($bytes / (1024 * 1024), 2) . " MB";
+ } else {
+ return round($bytes / (1024 * 1024 * 1024), 2) . " GB";
+ }
+ }
+
public function shareFolder(): void
{
// Retrieve GET parameters.
@@ -495,12 +509,14 @@ class FolderController
exit;
}
- // Extract data for the HTML view.
- $folderName = $data['folder'];
- $files = $data['files'];
- $currentPage = $data['currentPage'];
- $totalPages = $data['totalPages'];
+ // Load admin config so we can pull the sharedMaxUploadSize
+ require_once PROJECT_ROOT . '/src/models/AdminModel.php';
+ $adminConfig = AdminModel::getConfig();
+ $sharedMaxUploadSize = isset($adminConfig['sharedMaxUploadSize']) && is_numeric($adminConfig['sharedMaxUploadSize'])
+ ? (int)$adminConfig['sharedMaxUploadSize']
+ : null;
+ // For human‐readable formatting
function formatBytes($bytes)
{
if ($bytes < 1024) {
@@ -514,6 +530,12 @@ class FolderController
}
}
+ // Extract data for the HTML view.
+ $folderName = $data['folder'];
+ $files = $data['files'];
+ $currentPage = $data['currentPage'];
+ $totalPages = $data['totalPages'];
+
// Build the HTML view.
header("Content-Type: text/html; charset=utf-8");
?>
@@ -717,7 +739,11 @@ class FolderController
-
Upload File (50mb max size)
+ Upload File
+
+ ( max size)
+
+