diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 635b100a..6801bfd2 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -19,7 +19,7 @@ body:
description: Sharelist Version
options:
- v0.1
- - latest
+ - next
validations:
required: true
- type: textarea
diff --git a/packages/sharelist-web/src/views/manage/index.tsx b/packages/sharelist-web/src/views/manage/index.tsx
index f38b0129..b089c14b 100644
--- a/packages/sharelist-web/src/views/manage/index.tsx
+++ b/packages/sharelist-web/src/views/manage/index.tsx
@@ -25,7 +25,7 @@ export default defineComponent({
const confirmReload = useConfirm(reload, '确认', '确认重启?')
const tabsSlots = {
- tabBarExtraContent: () =>
导出配置
+ tabBarExtraContent: () => 导出配置
}
return () => (
diff --git a/packages/sharelist/app/controller/api.js b/packages/sharelist/app/controller/api.js
index 8bef6fc1..0cb440a4 100644
--- a/packages/sharelist/app/controller/api.js
+++ b/packages/sharelist/app/controller/api.js
@@ -2,8 +2,9 @@ const { createRuntime, selectSource, send, sendfile } = require('./shared')
const path = require('path')
const fs = require('fs')
-const getConfig = (app) => {
+const getConfig = (app, raw = false) => {
let { sharelist, controller } = app
+ if (raw) return sharelist.config
let config = { ...sharelist.config }
if (config.drives) {
config.drives = sharelist.getDisk()
@@ -52,14 +53,14 @@ module.exports = {
}
},
- async config(ctx, next) {
- let config = getConfig(this.app)
- ctx.body = { data: { title: config.title } }
- },
+
async setting(ctx, next) {
- ctx.body = { data: getConfig(this.app) }
+ ctx.body = { data: getConfig(this.app, !!ctx.query.raw) }
+ },
+ async reload(ctx, next) {
+ await this.app.sharelist.reload()
+ ctx.body = { status: 0 }
},
-
async updateSetting(ctx, next) {
let data = { ...ctx.request.body }
for (let i in data) {
@@ -69,7 +70,6 @@ module.exports = {
}
this.app.sharelist.config[i] = val
}
- // this.app.sharelist.configUpdated()
ctx.body = { data: getConfig(this.app) }
},
diff --git a/packages/sharelist/app/router.js b/packages/sharelist/app/router.js
index 861851a4..f9c24fd2 100644
--- a/packages/sharelist/app/router.js
+++ b/packages/sharelist/app/router.js
@@ -5,8 +5,8 @@ module.exports = app => {
router
.get('/api/setting', auth, controller.api.setting)
.post('/api/setting', auth, controller.api.updateSetting)
- .get('/api/config', auth, controller.api.config)
.put('/api/cache/clear', auth, controller.api.clearCache)
+ .put('/api/reload', auth, controller.api.reload)
.post('/api/drive/list', controller.api.list)
.post('/api/drive/get', controller.api.get)
diff --git a/packages/sharelist/package/sharelist/utils.js b/packages/sharelist/package/sharelist/utils.js
index 44783d9f..05409007 100644
--- a/packages/sharelist/package/sharelist/utils.js
+++ b/packages/sharelist/package/sharelist/utils.js
@@ -35,7 +35,7 @@ exports.getFiles = async (sharelist, runtime) => {
try {
data = await sharelist.list(runtime)
} catch (e) {
- console.trace(e)
+ //console.trace(e)
return { error: { code: e.code || 500, msg: e.message } }
}
if (data.files?.length > 0) {
diff --git a/packages/sharelist/package/webdav/index.js b/packages/sharelist/package/webdav/index.js
index 54032f6e..5afce7f0 100644
--- a/packages/sharelist/package/webdav/index.js
+++ b/packages/sharelist/package/webdav/index.js
@@ -67,8 +67,8 @@ const createDriver = (driver, { proxy, baseUrl } = {}) => {
async get(path, options) {
let data = await driver.get({ paths: parsePath(path) })
if (!options.reqHeaders) options.reqHeaders = {}
+ delete options.reqHeaders.connection
options.reqHeaders['user-agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
-
if (data && data.download_url && !data.extra.proxy && !proxy()) {
return {
status: 302,
@@ -206,14 +206,19 @@ const createDriver = (driver, { proxy, baseUrl } = {}) => {
return (cmd, ...options) => commands[cmd]?.(...options)
}
-const isWebDAVRequest = (ctx) => {
- return /(Microsoft\-WebDAV|FileExplorer|WinSCP|WebDAVLib|WebDAVFS|rclone|Kodi|davfs2|sharelist\-webdav|RaiDrive|nPlayer|LibVLC)/i.test(ctx.request.headers['user-agent']) || ('translate' in ctx.request.headers) || ('overwrite' in ctx.request.headers) || ('depth' in ctx.request.headers)
+const isWebDAVRequest = (ctx, webdavPath) => {
+ if (webdavPath == '/') {
+ return /(Microsoft\-WebDAV|FileExplorer|WinSCP|WebDAVLib|WebDAVFS|rclone|Kodi|davfs2|sharelist\-webdav|RaiDrive|nPlayer|LibVLC|PotPlayer)/i.test(ctx.request.headers['user-agent']) || ('translate' in ctx.request.headers) || ('overwrite' in ctx.request.headers) || ('depth' in ctx.request.headers)
+ } else {
+ return ctx.params.path.startsWith(webdavPath)
+ }
}
module.exports = (app) => {
app.addSingleton('webdav', async () => {
const { config } = app.sharelist
const webdavPath = config.webdav_path || '/'
+
const webdavServer = new WebDAVServer({
driver: createDriver(app.sharelist, {
request: app.curl,
@@ -226,15 +231,14 @@ module.exports = (app) => {
}
})
- app.router.all(webdavPath + ':path(.*)', async (ctx, next) => {
- if (webdavPath == '/' || webdavPath == '') {
- if (!isWebDAVRequest(ctx)) {
- await next()
- return
- }
+ app.router.all(':path(.*)', async (ctx, next) => {
+ let webdavPath = config.webdav_path || '/'
+ if (!isWebDAVRequest(ctx, webdavPath)) {
+ await next()
+ return
}
console.log('[WebDAV]', ctx.method, ctx.url, '<-->', ctx.ip)
- const resp = await webdavServer.request(ctx.req)
+ const resp = await webdavServer.request(ctx.req, { base: webdavPath })
const { headers, status, body } = resp
if (status == 302) {
ctx.redirect(body)
@@ -247,6 +251,7 @@ module.exports = (app) => {
if (status) {
ctx.status = parseInt(status)
}
+
if (body) {
// ctx.set('Content-Length', body.length)
ctx.body = body