Skip to content

Nagold/files_staticmimecontrol

Repository files navigation

Files Staticmimecontrol

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

Sample Config

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"
        }
    ]
}


Development

initial setup

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.

Stop dev env

cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev && docker-compose down

run dev env afterwards

cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev && docker-compose up -d stable31 proxy database-mysql && docker-compose logs -f

follow container logs

cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev && docker-compose logs -f

enable xdebug after start

cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev && ./scripts/php-mod-config stable31 xdebug.mode debug

enable staticmimecontrol

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"

install groupfolders

cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev && docker-compose exec stable31 /bin/bash -c "sudo -E -u www-data php occ app:install groupfolders"

add testgroup(folder)

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"

open vscode

cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev/workspace/stable31 && code .

Configure VSCode and Chrome/Brave

  • 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"
            ]
        }
    ]
}


how to edit staticmimecontrol.json in the container

cd $HOME/temp_staticmimecontrol/nextcloud-docker-dev && docker-compose exec stable31 /bin/bash -c "nano data/staticmimecontrol.json"

Todo

  • Tests
  • finalize documentation

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •