This Files Staticmimecontrol app for Nextcloud enables administrators to whitelist specific mime types per folder with matching from a static rule file. This App is based on the work of files_accesscontrol.
Groupfolders support is finnaly working (see example config)! To get the nessecary ID's use occ groupfolders:list.
It is available via the Nextcloud App Store
The configuration gets loaded from data/staticmimecontrol.json by default. You can set a custom path in your config.php with the config parameter staticmimecontrol_file.
The path and the mime type is preg_matched with % delimiters. This means, you have to use regexable strings in the config.
If you set denyrootbydefault to false, the root Folder will ALLOW ALL UPLOADS!
An example config looks like that:
{
"denyrootbydefault": true,
"rules": [
{
"path": ".*",
"mime": "image\\/jpeg"
},
{
"path": "Folder1",
"mime": "image.*"
},
{
"path": "Folder2",
"mime": "image\\/png"
},
{
"path": "Folder3.*",
"mime": "text.*"
},
{
"path": "^__groupfolders\\/1(\\/.*)?$",
"mime": "text.*"
},
{
"path": "^__groupfolders\\/(1|2)(\\/.*)?$",
"mime": "image\\/png"
},
{
"path": "^(?!__groupfolders\\/8(\\/|$)).*$",
"mime": "application\\/zip"
}
]
}
To setup a new development instance, we recommend to use juliushaertl/nextcloud-docker-dev. Prerequired are Docker and docker-compose and Make.
sudo echo "127.0.0.1 nextcloud.local" >> /etc/hosts
sudo echo "127.0.0.1 stable31.local" >> /etc/hosts
mkdir -p $HOME/temp_staticmimecontrol
git clone https://github.com/juliushaertl/nextcloud-docker-dev $HOME/temp_staticmimecontrol/nextcloud-docker-dev
cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev
./bootstrap.sh groupfolders
cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev/workspace/server/
git fetch --unshallow
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin
git worktree add ../stable31 stable31
cd ../stable31
git submodule update --init
git clone https://github.com/Nagold/files_staticmimecontrol $HOME/temp_staticmimecontrol/nextcloud-docker-dev/workspace/stable31/apps/files_staticmimecontrol
cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev/workspace/stable31/apps/files_staticmimecontrol
make composer-install
cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev
docker-compose up -d stable31 proxy database-mysql
docker-compose logs -f
now your test instance is running.
cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev && docker-compose down
cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev && docker-compose up -d stable31 proxy database-mysql && docker-compose logs -f
cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev && docker-compose logs -f
cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev && ./scripts/php-mod-config stable31 xdebug.mode debug
cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev && docker-compose exec stable31 /bin/bash -c "sudo -E -u www-data php occ app:enable files_staticmimecontrol"
cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev && docker-compose exec stable31 /bin/bash -c "sudo -E -u www-data php occ app:install groupfolders"
cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev && docker-compose exec stable31 /bin/bash -c "sudo -E -u www-data php occ group:add testgroup" && docker-compose exec stable31 /bin/bash -c "sudo -E -u www-data php occ group:adduser testgroup user1" && docker-compose exec stable31 /bin/bash -c "sudo -E -u www-data php occ groupfolders:create testgroupfolder" && docker-compose exec stable31 /bin/bash -c "sudo -E -u www-data php occ groupfolders:group 1 testgroup write share delete"
cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev/workspace/stable31 && code .
- Create the file $HOME/temp_staticmimecontrol/nextcloud-docker-dev/workspace/stable31/.vscode/launch.json with the following contents, to enable xdebug:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"hostname": "0.0.0.0",
"pathMappings": {
"/var/www/html/": "${workspaceFolder}"
},
"ignore": [
"**/lib/private/AppFramework/Utility/SimpleContainer.php",
"**/lib/private/ServerContainer.php",
"**/lib/private/AppFramework/DependencyInjection/DIContainer.php",
"**/lib/private/App/AppManager.php",
"**/lib/public/AppFramework/Db/QBMapper.php",
"**/lib/private/Share20/ProviderFactory.php",
"**/3rdparty/symfony/routing/Matcher/UrlMatcher.php",
"**/lib/private/Route/Router.php",
"**/lib/private/Files/Node/Root.php",
"**/lib/private/Files/AppData/AppData.php",
"**/apps/files/lib/Activity/Helper.php",
"**/lib/private/Files/Template/TemplateManager.php",
"**/lib/private/Share20/Manager.php"
]
}
]
}
- Install the Chrome Extension https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc/related
- Install vscode Extension https://marketplace.visualstudio.com/items?itemName=xdebug.php-debug
- pin xdebug helper to your Browser bar
- start dev env
- see enable
xdebug after startabove - go to http://stable31.local/index.php/login and enable debugging via the xdebug helper button
- Open $HOME/temp_staticmimecontrol/nextcloud-docker-dev/workspace/stable31 in vscode and press F5 to run xdebug debugging
- refresh http://stable31.local/index.php/login , login with admin:admin and enable files_staticmimecontrol via the admin menu
- happy debugging :D
cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev && docker-compose exec stable31 /bin/bash -c "nano data/staticmimecontrol.json"
- Tests
- finalize documentation