kwaadpepper/laravel-omen

又一个 Laravel 文件管理器

0.0.4 2020-07-30 10:46 UTC

README

Omen project icon

    Omen 文件管理器

项目网站
项目维基
联系 jeremydev.ovh

这是一个正在进行中的项目

Capture d’écran - 2020-06-09 à 08 51 18

A 编译

只需运行 yarn install 然后运行 yarn devyarn prod

B 在 Laravel 中安装测试

目前

  1. 将此添加到使用 composer 的 Laravel 项目中,您可以将此用作本地项目,在您的 composer.json 中

        "repositories": {
            "kwaadpepper/laravel-omen": {
                "type": "path",
                "url": "pathTo/laravel-omen-git-pull-from-github.git",
                "options": {
                    "symlink": true
                }
            }
        },
    
  2. 然后运行 composer require kwaadpepper/laravel-omen

  3. 导航到 vendor/kwaadpepper/laravel-omen 并运行 yarn prod,然后在您的 Laravel 项目中访问 URL /omenfilemanager

您可以使用 --tag=config, --tag=assets, --tag=views, --tag=lang 覆盖

php artisan vendor:publish --provider="Kwaadpepper\Omen\Providers\OmenServiceProvider" --tag=assets

如果您使用本地存储且不需要将文件设置为私有,则可以使用此方法

sudo php artisan omen:link

注意

  • 关于贡献

    请报告发现的任何漏洞或方便时创建 PR。欢迎每个人。如果您愿意,您可以在关于页面上可见的贡献者名单中。您的 GitHub 信息(姓名和电子邮件,或仅姓名)将用于提交(如果您在 PR 中明确声明)。您必须同意以 MIT 许可证发布,因为项目许可证已定义为当前状态。您的贡献将首先进行审查,然后再合并。请参阅 PR 部分。如果您想报告某些内容,只需打开问题票据。

  • 关于 CSRF

    https://cheatsheetseries.owasp.ac.cn/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html

    使用 Laravel 内置的 CSRF 系统令牌。此外,每个请求(即使只有写操作需要它)都使用 Ajax CSRF 令牌。

  • 关于 CSP 策略

    https://cheatsheetseries.owasp.ac.cn/cheatsheets/Content_Security_Policy_Cheat_Sheet.html

    此库使用 nonce 在所有其资产要求(CSS、JS)上使用 CSP 策略。这可以通过配置文件('omen.csp')进行配置

  • 关于 X-Frame-Options

    X-Frame-Options 发送给客户端以防止点击劫持(iframe 嵌入)https://www.keycdn.com/blog/x-frame-options false => X-Frame-Options: deny true => X-Frame-Options: sameorigin

  • 关于 X-Content-Type-Options

    用于对抗 MIME 嗅探以防止跨站脚本。因此,任何由服务器提供的文件都将按服务器声明的类型处理 https://www.keycdn.com/support/x-content-type-options 这始终设置为 no sniff,且不可配置

  • 关于 Referrer-Policy

    https://openweb.eu.org/articles/referrer-policy

    Omen 不需要跟踪,而且它也不想被跟踪。因此,Referrer-Policy 设置为 no-referrer。由于没有需要,因此不可配置

  • 关于 Feature-Policy

    https://mdn.org.cn/en-US/docs/Web/HTTP/Headers/Feature-Policy

    所有启用的功能都设置为 self,因为 Omen 提供了所有库。出于安全目的,不使用 CDN。此外,为了在离线网络上启用使用,唯一的使用是

    • 视频的自动播放

    • 多文件类型视图的全屏

    • 布局动画以显示 Omen 界面

    • 遗留图像格式

      此策略控制文档在旧版图像格式中渲染图像的能力。这些格式定义为除了JPEG、PNG、GIF、WEBP或SVG之外的所有格式。TODO 检查图像格式的显示可能性

    • midi

      TODO midi文件可以播放吗?

    • 导航覆盖

      w3c/webappsec-permissions-policy#175

    • 超大图像

    • 视频播放中的画中画

    • sync-xhr 用于Ajax查询

    加速度计 'none'; 环境光传感器 'none'; 自动播放 'self'; 电池 'none'; 摄像头 'none'; 显示捕获 'none'; 文档域名 'none'; 加密媒体 'none'; 非渲染时的执行 'none'; 视口外的执行 'none'; 全屏 'self'; 地理位置信息 'none'; 惯性传感器 'none'; 布局动画 'self'; 旧版图像格式 'self'; 磁力计 'none'; 麦克风 'none'; midi 'self'; 导航覆盖 'self'; 超大图像 'self'; 支付 'none'; 画中画 'self'; 公钥凭证获取 'none'; sync-xhr 'self'; USB 'none'; VR 'none'; 睡眠锁 'none'; xr-spatial-tracking 'none';

  • 关于最大上传大小

    由于上传是通过Ajax处理的,yt必须在php.ini.htaccess中更改,需要更改两个值:'upload_max_filesize'和'post_max_size'

    您可以将此放入public/.htaccess

    php_value post_max_size 2M
    php_value upload_max_filesize 2M
    

    由于上传是通过Ajax处理的,它发送2M大小的块。然后如果您想设置一个限制,只需将maxUploadSize更改为类似'3M'3145728的值即可

  • 关于文件名

    文件名在创建时总是小写的,这是为了与Windows兼容,因为Windows文件名不区分大小写,这意味着Windows会将'file.pdf'和'File.pdf'视为相同的文件,而在基于Unix的系统上则不会。

  • 关于单元测试

    使用Orchestra包含单元测试,只需在composer install后从项目文件夹中运行phpunit

  • 关于Tinymce

    为了与tinymce一起使用,您必须将useXFrameOptions设置为true,以便允许在iframe中显示omen

    这里有一个示例,您必须使用指令external_filemanager_path设置@omenPath(),并使用指令external_plugins注册omen插件{ "omen": "@tinymcePluginPath()" }

    tinymce.init({
        selector: "#tinymce"
        , plugins: [
            "advlist autolink link image lists charmap print preview hr anchor pagebreak"
            , "searchreplace wordcount visualblocks visualchars insertdatetime media nonbreaking"
            , "table directionality emoticons paste omen code"
        ]
        , toolbar1: "undo redo | bold italic underline | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | styleselect"
        , toolbar2: "| omen | link unlink anchor | image media | forecolor backcolor  | print preview code "
        , image_advtab: true
        , external_filemanager_path: "@omenPath()"
        , external_plugins: {
            "omen": "@tinymcePluginPath()"
        }
    });
    
  • 关于CKEditor

    与CKEditor一起使用时不需要iframe授权。但是,您必须将其设置为默认文件管理器。您必须使用此指令filebrowserImageBrowseUrl设置@omenPath(type=image&editor=ckeditor),并且可以最终使用此指令filebrowserBrowseUrl@omenPath(editor=ckeditor)

    CKEDITOR.editorConfig = function(config) {
        config.language = "en";
        config.uiColor = "#F7B42C";
        config.height = 300;
        config.toolbarCanCollapse = true;
        config.extraPlugins = "omen";
        config.filebrowserImageBrowseUrl = "@omenPath(type=image&editor=ckeditor)";
        config.filebrowserBrowseUrl = "@omenPath(editor=ckeditor)";
    };
    CKEDITOR.replace("ckeditor");
    

一些值得了解的事情是,可以使用url指令限制要使用的文件类型:例如,添加url GET参数type=image以仅使用图像或type=archives

  • 关于独立按钮

    如果您想调用文件管理器,可以使用独立按钮。

    首先在您的HTML文件中插入插件(需要jquery

    <html>
        ...
        <head>
            ...
            @omenButton()
        </head>
        ...
    </html>
    

    在您的页面上创建一个输入

    <div class="input-group">
        <span class="input-group-btn">
            <a id="omenButton" data-input="textInput" class="btn btn-primary">
            <i class="fa fa-picture-o"></i> Open file </a>
        </span>
        <input id="textInput" class="form-control" type="text" name="filepath">
    </div>
    

    在按钮上调用插件

    $(document).ready(function() {
        $('#omenButton').omenButton('image');
    });
    

    omenButton函数接受文件、图像、音频、视频、存档,如果您想限制文件类型

    如果您想通过js弹出窗口调用文件管理器,可以查看resources/js/plugins/omen.Button.jquery.plugin.min.js

Whishlit

  • tinymce和CKEditor的跨域支持?
  • 视频流,可选的ffmpeg => Mpeg-Dash或HLS? https://github.com/pascalbaljetmedia/laravel-ffmpeg
  • 按比例调整图像大小的功能
  • 全局搜索文件
  • 更改可见性
  • 更多全局操作,如批量删除
  • 使用图像缩略图
  • 允许删除非空目录,确认删除非空目录
  • 更多前端单元测试与Dusk
  • 使用chromium测试函数
  • 在移动设备上进行广泛的测试
  • 制作按钮重置过滤器

Jérémy Munsch
https://jereymdev.ovh/contact
gitub@jeremydev.ovh