support CIFS-mounted uploads and automatic scan on container start (closes #34)

This commit is contained in:
Ryan
2025-05-27 19:53:00 -04:00
committed by GitHub
parent aee78c9750
commit 40cecc10ad
3 changed files with 78 additions and 1 deletions

View File

@@ -1,5 +1,14 @@
# Changelog
## Changes 5/27/2025
- Support for mounting CIFS (SMB) network shares via Docker volumes
- New `scripts/scan_uploads.php` script to generate metadata for imported files and folders
- `SCAN_ON_START` environment variable to trigger automatic scanning on container startup
- Documentation for configuring CIFS share mounting and scanning
---
## Changes 5/26/2025
- Updated `REGEX_FOLDER_NAME` in `config.php` to forbids < > : " | ? * characters in folder names.

63
scripts/scan_uploads.php Normal file
View File

@@ -0,0 +1,63 @@
<?php
/**
* scan_uploads.php
* Scans the uploads directory and creates metadata entries for new files/folders using config settings.
*/
require_once __DIR__ . '/../config/config.php';
if (!isset($config['upload_dir']) || !isset($config['metadata_dir'])) {
die("Missing configuration for upload_dir or metadata_dir\n");
}
$uploadDir = $config['upload_dir'];
$metadataDir = $config['metadata_dir'];
date_default_timezone_set('UTC');
function scanDirectory($dir) {
$items = array_diff(scandir($dir), ['.', '..']);
$results = [];
foreach ($items as $item) {
$path = $dir . DIRECTORY_SEPARATOR . $item;
$results[] = $path;
if (is_dir($path)) {
$results = array_merge($results, scanDirectory($path));
}
}
return $results;
}
function metadataPath($filePath, $uploadDir, $metadataDir) {
$relativePath = ltrim(str_replace($uploadDir, '', $filePath), '/');
return $metadataDir . '/' . $relativePath . '.json';
}
$allItems = scanDirectory($uploadDir);
foreach ($allItems as $item) {
$metaPath = metadataPath($item, $uploadDir, $metadataDir);
if (!file_exists($metaPath)) {
$type = is_dir($item) ? 'folder' : 'file';
$size = is_file($item) ? filesize($item) : 0;
$metadata = [
'path' => str_replace($uploadDir, '', $item),
'type' => $type,
'size' => $size,
'user' => 'Imported',
'uploadDate' => date('c')
];
if (!is_dir(dirname($metaPath))) {
mkdir(dirname($metaPath), 0775, true);
}
file_put_contents($metaPath, json_encode($metadata, JSON_PRETTY_PRINT));
echo "Created metadata for: {$item}\n";
}
}
?>

View File

@@ -109,4 +109,9 @@ if [ ! -f /var/www/metadata/createdTags.json ]; then
fi
echo "🔥 Starting Apache..."
exec apachectl -D FOREGROUND
exec apachectl -D FOREGROUND
if [ "$SCAN_ON_START" = "true" ]; then
echo "Scanning uploads directory to generate metadata..."
php /var/www/scripts/scan_uploads.php
fi