scriptscat / scriptcat

脚本猫,一个可以执行用户脚本的浏览器扩展
https://docs.scriptcat.org
GNU General Public License v3.0
1.41k stars 129 forks source link

WebDAV 功能的使用体验 以及 一些调整建议 #213

Closed mrnini closed 8 months ago

mrnini commented 1 year ago

WebDAV 功能的使用体验 以及 一些调整建议

首先,感谢作者带来这么有趣的作品,此处省略1万字。 不可否认,WebDAV 结合caddy使用非常棒,是一个出色的 idea~!

caddy: v2.6.2 edge: 版本 114.0.1823.67 (正式版本) (64 位) scriptCat: v0.14.1 安装自 https://microsoftedge.microsoft.com/addons?hl=zh-CN

环境配置:webdav 目录为 d:\ ... \tools.a.com\ScriptCat ,一个通用的域名,通过目录划分不同的工作区域,各个工作区域独立控制访问权限 。 鉴权类型:均为password。

下列为配置遇到的情况: 备份:配置为 https://tools.a.com/ScriptCat,会自动创建 d:\ ... \tools.a.com\ScriptCat\ ScriptCat\xxx.zip。 同步:配置为 https://tools.a.com/ScriptCat,始终提示连接失败,调整 url 为 https://tools.a.com/ScriptCat/sync 后连接成功,但是目录变成了 d:\ ... \tools.a.com\ScriptCat\sync\ ScriptCat\sync\x.x。 fileStorage:配置为 https://tools.a.com\ScriptCat\fs,打开目录报错,参阅api文档,应该需要app目录,而ScriptCat是根据上述配置猜的...,手动新建目录 d:\ ... \tools.a.com\ScriptCat\fs\ ScriptCat\app 不报错了,其实即便这里自动创建的目录也不对,与备份的是有冲突,最后就是备份zip文件与app文件夹 有同一个父级的ScriptCat,目录结构混乱了些。这里要说明下,手动配置的目的只是想看看打开目录是否不报错。

这几个项目配置下来感觉作者是想提供一些便利,但这似乎起到了反作用,对拥有良好系统使用习惯的用户并不怎么友好,自动处理的选择权应该还给用户,否则会非常混乱。

建议完全接受用户配的url,用户配置的地址即为ScriptCat的工作区域,有时候人工智能会显得非常笨拙,借此上述功能的调整建议如下:

交互:调整为一个页面,集中配置,使用同一个url设定,对于可能产生的目录给予样例展示。 备份:d:\ ... \tools.a.com\ScriptCat\ ScriptCat\xxx.zip;调整为:d:\ ... \tools.a.com\ScriptCat\ backup\xxx.zip。 同步:d:\ ... \tools.a.com\ScriptCat\sync\ ScriptCat\sync\x.x,调整为 d:\ ... \tools.a.com\ScriptCat\ sync\x.x 。 fileStorage:直接创建 d:\ ... \tools.a.com\ScriptCat\ fileStorage\app

CodFrm commented 1 year ago

关于工作区指定这个可能不好修改了,会存在兼容性问题,要做的话可能提供一个选项,后续再看看

报错问题,我这边安装caddy试一试,我之前是使用坚果云测试的

mrnini commented 1 year ago

关于工作区指定这个可能不好修改了,会存在兼容性问题,要做的话可能提供一个选项,后续再看看

报错问题,我这边安装caddy试一试,我之前是使用坚果云测试的

我想我知道,可能这里已经产生了用户数据,这的确是一个问题,但是 来日方长,往后的路还很长,或许现在调整带来的成本还是相对较低的,或许可以参考,某些厂的做法,在工作区内通过版本划分建立文件夹,历史数据可以迁移或拷贝过来,平滑过渡的可能性还是可以有的,这样做不仅可以解决现有问题,对于以后的数据结构调整、功能扩展 该机制也可以提供良好的支持。

另附caddy的配置:

(hsts) {
    header {
        # enable HSTS
        Strict-Transport-Security max-age=31536000;
    }
}

(auth_cat) {
    basicauth {
        # caddy hash-password --plaintext cat
        cat $2a$14$2qFPQL7Kkh8ru2r/9dYtY.eUpI2kNsUQd5Mnr9iveUq8uIuJ27lau 
    }
}

tools.a.com {
    root * /srv/tools.a.com
    import hsts

    rewrite /ScriptCat /ScriptCat/
    route /ScriptCat/* {
        import auth_cat
        webdav 
    }
}
CodFrm commented 1 year ago

或许现在调整带来的成本还是相对较低的

主要是我认为目前的方式是没问题的,只是个人喜好,目前的方式两边可以设置一样的值,无需操心子目录的事情。如果进行改变又将会有一批人认为还要关心子目录这又会很麻烦(不关心的话,两边配置一样那么备份和同步数据将混杂在一起,这会产生更严重的问题)

对于这个需求,我可以考虑添加一个新的编辑框在URL的下方,用于指定子目录

image
CodFrm commented 1 year ago

我的caddy搭建失败,我不太熟悉这个

webdav需要额外安装扩展么?我使用的docker搭建的

caddyfile如下

image
mrnini commented 1 year ago

是的,webdav属于扩展插件,默认的caddy、及其docker镜像并不包含该内容。 有2种方案可以开启webdav: 方案1:

  1. 通过xcaddy编译
  2. 将编译的caddy封装到dockerfile中,并以此镜像构建容器。

方案2:

  1. 通过xcaddy编译
  2. 将编译的caddy直接放入到容器中,替换掉原有的caddy,路径 /usr/bin/caddy

https://github.com/caddyserver/xcaddy

提示:可以通过 caddy list-modules 查看 caddy 文件是否包含需要的模块。

顺便问下,vscode的scriptcat插件能否修改端口,因为在docker中,vscode的容器重新构建会影响配置非常麻烦,因此通常的做法是开启一个范围的端口对外映射,容器内的服务调整端口来适配外部的访问。

CodFrm commented 1 year ago

是哪个插件呢?

vscode这个后续可以搞个配置进行修改

mrnini commented 1 year ago

是哪个插件呢?

vscode这个后续可以搞个配置进行修改

webdav插件:http.handlers.webdav

image

我给你一个编译好的caddy:

容器版本:caddy v2.6.2 h1:wKoFIxpmOJLGl3QXoo6PNbYvGW4xLEgo32GPBEjWL8o=

caddy.zip

这是我正在使用的caddy容器,以及caddy执行文件。

CodFrm commented 1 year ago

我这是mac m1 跑不了,不过知道是那个插件了,我试试

YujiaCheng1996 commented 1 year ago

使用alist共享出来的Webdav连接失败,上面的脚本同步不报错也没同步,下面的Storage就弹登录框,用户名密码输入后无效,继续弹登录框,登录框关闭就失败了。账号信息验证失败: [object Object]。查出来是adguard拦截了。。。

CodFrm commented 1 year ago

adguard还拦截这个?

YujiaCheng1996 commented 1 year ago

adguard还拦截这个?

adguard拦截了授权头,域名放白名单里也没用,关了就好了: 1692756954570

云同步账号信息验证失败: {"error":{"status":401,"response":{"data":"","status":401,"statusText":"","headers":{"access-control-allow-origin":"*","cf-cache-status":"DYNAMIC","cf-ray":"xxxx","content-length":"0","date":"Wed, 23 Aug 2023 02:11:12 GMT","nel":"{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}","server":"cloudflare","strict-transport-security":"max-age=31536000; includeSubDomains; preload","www-authenticate":"Basic realm=\"alist\"","x-content-type-options":"nosniff"},"config":{"transitional":{"silentJSONParsing":true,"forcedJSONParsing":true,"clarifyTimeoutError":false},"transformRequest":[null],"transformResponse":[null],"timeout":0,"xsrfCookieName":"XSRF-TOKEN","xsrfHeaderName":"X-XSRF-TOKEN","maxContentLength":-1,"maxBodyLength":-1,"env":{"FormData":null},"headers":{"Accept":"text/plain","Authorization":"xxxx","Depth":"0"},"url":"xxxx","method":"propfind","responseType":"text"},"request":{}}}}

CodFrm commented 1 year ago

@YujiaCheng1996 看起来是必须得关闭,和Webdav的授权方式冲突了

CodFrm commented 1 year ago

同步:配置为 https://tools.a.com/ScriptCat,始终提示连接失败,调整 url 为 https://tools.a.com/ScriptCat/sync 后连接成功,但是目录变成了 d:\ ... \tools.a.com\ScriptCat\sync\ ScriptCat\sync\x.x。

这个问题看到了,是创建目录不允许导致的,看起来caddy不允许重复创建目录

image

当你重复备份的时候应该也会出现这个错误

CodFrm commented 1 year ago

bug已处理,可以使用这个包试试:https://github.com/scriptscat/scriptcat/actions/runs/5972527352/job/16203208348

需求后续再考虑如何实现,有一个目录了,还会再自动创建一个目录确实不够优雅

YujiaCheng1996 commented 9 months ago

还有个问题,我多台电脑(大于3台)连接同一个webdav同步,都勾选了同步删除,但是我在一台电脑删除某个脚本后另一台电脑上的脚本还在,于是会反复的自动安装被删除的脚本,没有办法彻底删除。

CodFrm commented 9 months ago

@YujiaCheng1996 这个应该是bug,开一个新的issue吧,我怕忘记了

CodFrm commented 8 months ago

有一个目录了,还会再自动创建一个目录确实不够优雅这个算需求了,哥哥觉得有必要的话,再新开一个issue后续讨论吧,先close了