Compare commits

..

157 Commits

Author SHA1 Message Date
微凉 6fd05d7d72 :bug: fix connMap not init 2022-01-30 00:55:12 +08:00
微凉 f26ac57569 :bug: fix ftp conn not store 2022-01-30 00:04:31 +08:00
微凉 2434ac54d0 :bug: fix webdav 2022-01-29 18:36:22 +08:00
微凉 f25b557327 📝 update readme 2022-01-29 15:31:06 +08:00
微凉 81a0706d01 ✨ 189 chunk upload 2022-01-29 11:16:40 +08:00
微凉 5f6b576cbf 🔧 switch cdn to jsdelivr 2022-01-28 23:29:38 +08:00
微凉 549877f71e :fire: Delete Text 2022-01-28 23:21:11 +08:00
微凉 c6a5ba9b91 🚧 189 chunk upload 2022-01-28 19:51:54 +08:00
微凉 1a69d80489 🎨 Pull away Path 2022-01-28 11:04:56 +08:00
微凉 b797f4302c 🎇 use tempFile to cal md5 2022-01-27 23:48:29 +08:00
微凉 bf9aa5c3d3 🔒 not allowed use relative path of native 2022-01-27 15:10:33 +08:00
微凉 7390e19a7a 🔒 not allowed down with relative path 2022-01-27 15:05:17 +08:00
微凉 b31a12a0cc 🔒 not allowed access using relative path for native 2022-01-27 14:54:20 +08:00
微凉 26ce001782 🎇 add ocr for 189 2022-01-27 12:34:49 +08:00
微凉 a2c7ff3262 ✏️ Invalid Token 2022-01-26 16:27:38 +08:00
微凉 8fc7c716c0 ✨ copy api 2022-01-26 14:07:51 +08:00
微凉 c70fc3fc4b ✨ finish teambition chunk upload 2022-01-26 14:05:35 +08:00
微凉 df513b7dc0 ✨ teambition upload (<= 20 MB) 2022-01-23 14:03:04 +08:00
微凉 2a9598f4c6 :bug: fix #407 189cloud use local sort 2022-01-21 19:01:33 +08:00
微凉 224c20779c 🔧 add webp to image types 2022-01-20 23:01:59 +08:00
微凉 5d722298cb 📝 update readme 2022-01-20 22:38:53 +08:00
微凉 4bcc6359e3 💚 fix docker build 2022-01-20 20:52:14 +08:00
微凉 4144afcc92 :bug: fix #397 139yun file size overflow int32 2022-01-20 20:35:01 +08:00
微凉 2ad27046fb 🎨 split build and docker 2022-01-20 20:30:58 +08:00
微凉 9516ac6718 🎇 finish move api 2022-01-20 19:58:25 +08:00
微凉 de638c7c36 :bug: fix 123pan move 2022-01-20 19:58:10 +08:00
微凉 c6b34a033b 🔧 add swf to image types 2022-01-20 14:40:59 +08:00
微凉 31de3399d2 💚 fix musl prebuilt 2022-01-20 14:23:31 +08:00
微凉 0dc2ca019f 💚 fix musl prebuilt 2022-01-20 13:47:21 +08:00
微凉 04724f7f0f 👷 add prebuilt for musl-libc 2022-01-20 12:53:49 +08:00
微凉 75a983a965 :bug: fix webdav can't get file with password 2022-01-19 18:46:32 +08:00
微凉 e12d8bb8ca ⬆️ upgrade gorm 2022-01-19 09:15:00 +08:00
微凉 68f1ccfed4 ✨ add sslmode for postgres 2022-01-19 09:14:31 +08:00
微凉 54272db59c 🚧 add folder api 2022-01-18 19:08:44 +08:00
微凉 6d34e88360 🎇 hide files while webdav visitor 2022-01-18 18:48:08 +08:00
微凉 0a901a2eb0 :bug: fix can't find zhimg for dev 2022-01-18 18:19:58 +08:00
微凉 e1671a0511 🚧 add move api 2022-01-18 16:13:07 +08:00
微凉 dcb4ec695f ✨ rename and mkdir api 2022-01-18 14:31:52 +08:00
微凉 4a21b6fe1d :fire: close res.body for proxy 2022-01-18 11:29:32 +08:00
微凉 96a237902b :bug: close #379 fix google drive can't get text file 2022-01-17 09:54:19 +08:00
微凉 cfb51e9f80 ✨ Extract folder 2022-01-16 16:38:41 +08:00
微凉 e952f1c243 :fire: Optimize 189 cloud get client 2022-01-16 16:05:32 +08:00
微凉 07d6ca27db :bug: Forbid MediaTrack to create a new folder with the same name 2022-01-16 13:21:29 +08:00
微凉 8245da485a :bug: fix s3 for #362 2022-01-15 20:24:57 +08:00
微凉 5c759217cf :bug: fix some lanzou can't down #360 2022-01-15 20:10:42 +08:00
微凉 0648fdebc2 ♻️ solve circular dependency 2022-01-15 19:59:24 +08:00
微凉 ed670e528f :bug: fix 139Yun error phone close #365 2022-01-15 19:44:22 +08:00
微凉 2473309a51 🎇 execute save while delete account 2022-01-15 19:36:37 +08:00
微凉 21ca2f11b7 🔧 change default config 2022-01-14 21:20:45 +08:00
微凉 ccaa28a323 🔧 change default cdn 2022-01-14 20:56:20 +08:00
微凉 fea8b376f8 🔧 change config 2022-01-14 20:10:35 +08:00
微凉 55d244b726 :bug: fix mediatrack can't mkdir #351 2022-01-14 18:19:58 +08:00
微凉 1640a52789 ✨ cancel hide file for admin #343 2022-01-14 18:00:47 +08:00
微凉 424ec10692 :bug: fix ftp download error 2022-01-13 22:56:07 +08:00
微凉 b472c2ee18 🔒 not allowed delete root folder 2022-01-13 21:23:27 +08:00
微凉 65a01251e9 :bug: fix proxy not set status 2022-01-13 20:09:11 +08:00
微凉 96be6bbbd1 :bug: fix #334 proxy video can't use range 2022-01-13 19:49:02 +08:00
微凉 6f7465aab7 :bug: fix 139Yun no user error 2022-01-13 18:01:54 +08:00
微凉 c9bc8227bb 💚 switch back to techknowlogick/xgo 2022-01-12 11:50:26 +08:00
微凉 4ea9371c00 💚 fix release actions 2022-01-12 01:04:50 +08:00
微凉 326c74cdc6 📝 update readme 2022-01-12 01:00:18 +08:00
微凉 f11c2efa8c :bug: fix package download 2022-01-12 00:37:44 +08:00
微凉 6dd8102a82 :fire: Optimize delete cache 2022-01-11 23:45:12 +08:00
微凉 ddf6a4955f 🎇 139yun family support 2022-01-11 23:43:55 +08:00
微凉 602994e213 ✏️ fix typo 2022-01-10 21:14:26 +08:00
微凉 7c7306bf96 💚 Optimize github actions build 2022-01-10 19:48:11 +08:00
微凉 c24894b5de 💚 add go install version 2022-01-10 18:23:44 +08:00
微凉 e10412c530 💚 change xgo 2022-01-10 18:18:11 +08:00
微凉 5c2491b6c3 📝 change LICENSE 2022-01-10 18:11:14 +08:00
微凉 036373032c ✨ 139yun personal support 2022-01-09 22:44:43 +08:00
微凉 db58dabd31 ✨ local sort bring folders to the front 2022-01-09 19:28:48 +08:00
微凉 7ef98c05fa ✏️ fix typo 2022-01-09 17:22:55 +08:00
微凉 6351f43b9b :fire: Delete alist-proxy.js 2022-01-08 22:47:58 +08:00
微凉 6613c8a6c1 🎇 file delete 2022-01-08 22:09:27 +08:00
微凉 2b97882b42 🎇 Multiple file upload 2022-01-08 21:29:00 +08:00
微凉 925f386bed 🚧 remove customize head and body for manage 2022-01-08 21:10:34 +08:00
微凉 0fbbd54b0c 🔧 add required for teambition 2022-01-08 20:23:30 +08:00
微凉 12ba1fed00 🔧 add cookie required 2022-01-08 20:18:14 +08:00
微凉 2826bac53c 📝 update readme 2022-01-08 20:09:12 +08:00
微凉 3e7e9f354f 🎇 189cloud upload 2022-01-08 19:31:12 +08:00
微凉 86ff80885d :bug: fix 189 logged in but get error 2022-01-08 17:19:11 +08:00
微凉 be03e34406 :bug: fix proxy onlyLocal 2022-01-07 23:30:22 +08:00
微凉 83231becba 🎇 update config file while config struct changed 2022-01-07 20:29:20 +08:00
微凉 876ee49fb0 :bug: add range header for pdf.js 2022-01-07 20:28:58 +08:00
微凉 10bec31033 ✨ support flv preview 2022-01-06 19:26:19 +08:00
微凉 fc48f29575 🎇 finish MediaTrack upload 2022-01-06 19:23:55 +08:00
微凉 f0d9a452bb 🎇 finish MediaTrack upload 2022-01-06 19:21:13 +08:00
微凉 c03a4f83d1 🚧 give up 189 family cloud 2022-01-06 18:45:07 +08:00
微凉 10f06fde5c 🚧 MediaTrack support 2022-01-06 01:14:32 +08:00
微凉 36b533cb16 :bug: remove empty title folder 2022-01-05 23:25:21 +08:00
微凉 6ff2cdab98 🎇 teambition support 2022-01-05 22:03:28 +08:00
微凉 ef5cad1bf0 🎇 Pagination #257 2022-01-04 21:21:27 +08:00
微凉 b60c7ecd9e :bug: fix #281 set CHARSET=utf8mb4 2022-01-04 15:16:18 +08:00
微凉 68aaa8fee2 🚧 Pagination function 2022-01-03 23:30:57 +08:00
微凉 67bf14d428 🎨 Pull away link 2022-01-03 22:48:34 +08:00
微凉 c22ff77c89 🎨 use S3ForcePathStyle 2022-01-03 22:37:26 +08:00
微凉 84fc0ab1bd 🎇 123pan upload 2022-01-03 22:29:32 +08:00
微凉 beb06f2f7f :fire: replace encoding/json with jsoniter 2022-01-03 20:25:22 +08:00
微凉 7cf30836bf 🎨 Optimize code structure 2022-01-03 20:06:36 +08:00
微凉 e7ba289d06 :bug: fix upload delete cache 2022-01-02 18:17:04 +08:00
微凉 d255ff4fd0 :bug: fix home emoji type 2022-01-02 16:29:17 +08:00
微凉 bcf19f4f3e :bug: fix upload get wrong content-type 2022-01-02 14:51:27 +08:00
微凉 efeee0e276 :bug: fix alist path error 2022-01-02 14:44:14 +08:00
微凉 e789873eca 🚧 add home emoji setting 2022-01-02 14:38:24 +08:00
微凉 14b9b76e87 :bug: fix sidebar didn't auto unfold 2022-01-01 23:04:33 +08:00
微凉 38323fd24f 📝 update readme 2022-01-01 20:54:25 +08:00
微凉 366148a450 🎇 add root folder for s3 2022-01-01 20:54:11 +08:00
微凉 bc364cee0d 🚧 Change the location of the files and folders of the 189cloud 2022-01-01 19:48:59 +08:00
微凉 f433277227 :fire: delete markdown theme setting 2022-01-01 19:41:42 +08:00
微凉 35fc1c87d2 ✨ pikpak file upload 2022-01-01 00:08:58 +08:00
微凉 9da2af8c49 📝 Update readme features 2021-12-31 20:39:55 +08:00
微凉 103e049f22 ✨ web upload 2021-12-31 20:33:39 +08:00
微凉 cc217df924 🚧 change path api resp struct 2021-12-31 17:15:37 +08:00
微凉 939c9cd5ac 🚧 check upload file 2021-12-31 14:05:35 +08:00
微凉 6f0959a98e :bug: google drive upload api proxy 2021-12-31 00:28:50 +08:00
微凉 d71ed4d775 🎇 support webdav driver 2021-12-30 21:39:17 +08:00
微凉 0af3e95f1f 📝 update readme 2021-12-30 20:47:15 +08:00
微凉 582f7bbfee 🔧 Custom cache duration 2021-12-30 20:42:37 +08:00
微凉 cf2506901f 🎇 s3 support 2021-12-30 20:31:36 +08:00
微凉 db06b627cc 🎇 google drive thumbnail 2021-12-30 19:01:19 +08:00
微凉 5f2621eca9 :bug: fix pikpak and shandian account status 2021-12-30 17:59:35 +08:00
微凉 3331462229 ✨ local sort for no sort param driver 2021-12-30 16:15:57 +08:00
微凉 0f079827e5 ✨ support shandianpan #234 2021-12-29 22:07:26 +08:00
微凉 ba66e33913 🎇 add ico to image types 2021-12-29 22:06:07 +08:00
微凉 6a54ed87f3 🎨 change NeedSetLink to NoNeedSetLink 2021-12-29 19:47:47 +08:00
微凉 88a9edb90a 🎇 googledrive webdav write 2021-12-28 21:28:27 +08:00
微凉 606134f39c ✨ onedrive webdav write 2021-12-28 20:34:45 +08:00
Xhofe 3c03344ef1 📝 update readme 2021-12-28 17:15:30 +08:00
Xhofe 6f5914ae6f ✨ webdav visitor 2021-12-28 17:05:16 +08:00
Xhofe 4c00866249 ✨ grouping settings 2021-12-28 16:38:56 +08:00
微凉 04752f7473 💄 change default background color 2021-12-25 23:44:52 +08:00
Xhofe 26b4766da7 ✨ remove . and .. for FTP 2021-12-25 19:22:05 +08:00
Xhofe 12af9cb89f 🎇 support hide account 2021-12-25 17:53:46 +08:00
Xhofe 958d793725 🎇 add public folder router 2021-12-25 17:07:59 +08:00
Xhofe 36f07ee194 ✨ add no cors config 2021-12-25 16:44:32 +08:00
Xhofe 91c2c21522 🎇 support wav audio preview 2021-12-21 15:44:07 +08:00
Xhofe d6d2f52922 💄 change default color 2021-12-21 13:13:01 +08:00
Xhofe 9162e782a0 :bug: fix default customize head 2021-12-21 13:09:59 +08:00
微凉 dc41ceb99b :bug: fix initialization sequence 2021-12-21 00:32:09 +08:00
微凉 c5e274f52a 💚 fix mv web file 2021-12-21 00:15:43 +08:00
微凉 3781043c78 :bug: fix build web file 2021-12-20 23:59:55 +08:00
微凉 1485ab2677 🎇 add local config 2021-12-20 23:56:17 +08:00
微凉 337bf08cd3 :bug: fix pikpak refresh_token endless loop 2021-12-20 23:21:52 +08:00
微凉 22665aa19a 🎨 move default text types 2021-12-20 17:24:49 +08:00
微凉 1ab6b4e201 💄 change default customize head 2021-12-20 17:21:11 +08:00
微凉 d97afb691b ✨ support pikpak and google api proxy 2021-12-20 15:44:17 +08:00
微凉 b63e65880f 🚧 google drive api proxy 2021-12-20 01:00:53 +08:00
微凉 44cbe0522c ✨ support subtitle 2021-12-19 21:24:04 +08:00
微凉 fedab86c30 🚧 change some proxy 2021-12-19 20:55:29 +08:00
微凉 731dbf6c3a :bug: fix 123pan 403 2021-12-19 20:32:47 +08:00
微凉 d00f75c814 🎨 change link interface 2021-12-19 20:00:53 +08:00
微凉 f5b8815a84 🎨 abstract 123pan request 2021-12-19 17:54:28 +08:00
微凉 99d06c7449 ✨ support api proxy 2021-12-19 17:12:19 +08:00
微凉 8e7b2c5837 ✨ api proxy 2021-12-19 17:10:20 +08:00
微凉 3d3a97288a ✨ add webdav tips for browser 2021-12-18 15:23:32 +08:00
微凉 c2142cc03a 🎨 Optimize code structure 2021-12-18 15:22:56 +08:00
微凉 3ce94de823 :bug: fix FTP down 2021-12-17 12:14:27 +08:00
93 changed files with 7272 additions and 1635 deletions
+4 -12
View File
@@ -25,22 +25,12 @@ jobs:
with:
node-version: '16'
# - name: Setup docker
# uses: docker-practice/actions-setup-docker@master
- name: Checkout
uses: actions/checkout@v2
with:
ref: v2
path: alist
- name: Checkout web repo
uses: actions/checkout@v2
with:
repository: Xhofe/alist-web
ref: v2
path: alist-web
- name: Set up xgo
run: |
docker pull techknowlogick/xgo:latest
@@ -50,10 +40,12 @@ jobs:
- name: Build
run: |
mv alist/build.sh .
bash build.sh
bash build.sh web
mv dist/* alist/public
bash build.sh build
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: artifact
path: alist/build
path: alist/build
+46
View File
@@ -0,0 +1,46 @@
name: build_docker
on:
push:
branches: [ v2 ]
pull_request:
branches: [ v2 ]
jobs:
build_docker:
name: Docker
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Docker meta
id: meta
uses: docker/metadata-action@v3
with:
images: xhofe/alist
- name: Set up Node
uses: actions/setup-node@v2
with:
node-version: '16'
- name: Build web
run: |
bash build.sh web
mv dist/* public
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: xhofe
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/arm/v6,linux/s390x
+2 -25
View File
@@ -19,14 +19,6 @@ jobs:
with:
go-version: ${{ matrix.go-version }}
# - name: Setup docker
# uses: docker-practice/actions-setup-docker@master
- name: Setup Node
uses: actions/setup-node@v2
with:
node-version: '16'
- name: Checkout
uses: actions/checkout@v2
with:
@@ -35,15 +27,6 @@ jobs:
persist-credentials: false
fetch-depth: 0
- name: Checkout web repo
uses: actions/checkout@v2
with:
repository: Xhofe/alist-web
ref: v2
path: alist-web
persist-credentials: false
fetch-depth: 0
- name: Set up xgo
run: |
docker pull techknowlogick/xgo:latest
@@ -53,16 +36,10 @@ jobs:
- name: Build
run: |
mv alist/build.sh .
bash build.sh cdn
mv dist/* alist/public
bash build.sh release
- name: Upload asserts files
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.MY_TOKEN }}
branch: cdn
directory: alist-web
repository: Xhofe/alist-web
- name: Release
uses: softprops/action-gh-release@v1
with:
@@ -1,17 +1,12 @@
name: docker
name: release_docker
on:
push:
branches:
- 'v2'
tags:
- 'v*'
pull_request:
branches:
- 'v2'
- '*'
jobs:
docker:
docker_release:
name: Docker
runs-on: ubuntu-latest
steps:
@@ -27,7 +22,9 @@ jobs:
with:
node-version: '16'
- name: Build web
run: bash build.sh web
run: |
bash build.sh cdn
mv dist/* public
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
+2 -1
View File
@@ -23,6 +23,7 @@ dist/
bin/*
/alist
*.json
public/index.html
public/*.html
public/assets/
public/public/
data/
+1 -1
View File
@@ -3,7 +3,7 @@ LABEL stage=go-builder
WORKDIR /app/
COPY ./ ./
RUN apk add --no-cache bash git go gcc musl-dev; \
sh build.sh docker
bash build.sh docker
FROM alpine:edge
LABEL MAINTAINER="i@nn.ci"
+657 -17
View File
File diff suppressed because it is too large Load Diff
+16 -6
View File
@@ -18,17 +18,24 @@ English | [中文](./README_cn.md)
## Features
- [x] multiple storage
- [x] Multiple storage
- [x] Local storage
- [x] [aliyundrive](https://www.aliyundrive.com/)
- [x] OneDrive / Sharepoint ([global](https://www.office.com/), [cn](https://portal.partner.microsoftonline.cn),de,us)
- [x] [Aliyundrive](https://www.aliyundrive.com/)
- [x] OneDrive / Sharepoint ([global](https://www.office.com/), [cn](https://portal.partner.microsoftonline.cn),de,us)
- [x] [189cloud](https://cloud.189.cn)
- [x] [GoogleDrive](https://drive.google.com/)
- [x] [123pan](https://www.123pan.com/)
- [x] [lanzou](https://pc.woozooo.com/)
- [x] [Lanzou](https://pc.woozooo.com/)
- [x] [Alist](https://github.com/Xhofe/alist)
- [x] FTP
- [x] [PikPak](https://www.mypikpak.com/)
- [x] [ShandianPan](https://shandianpan.com/)
- [x] [S3](https://aws.amazon.com/s3/)
- [x] WebDav
- [x] Teambition([China](https://www.teambition.com/ ),[International](https://us.teambition.com/ ))
- [x] [Mediatrack](https://www.mediatrack.cn/)
- [x] [139yun](https://yun.139.com/) (Personal, Family)
- [x] Easy to deploy and out-of-the-box
- [x] File preview (PDF, markdown, code, plain text, ...)
- [x] Image preview in gallery mode
- [x] Video and audio preview (mp4, mp3, ...)
@@ -38,9 +45,12 @@ English | [中文](./README_cn.md)
- [x] Dark mode
- [x] I18n
- [x] Protected routes (password protection and authentication)
- [x] WebDav (readonly)
- [x] WebDav (see https://alist-doc.nn.ci/en/docs/webdav for details)
- [x] [Docker Deploy](https://hub.docker.com/r/xhofe/alist)
- [x] Cloudflare workers proxy
- [x] File/Folder package download
- [x] Support video list playback and subtitles(ass,srt,vtt)
- [x] Web upload(Can allow visitors to upload), delete, mkdir, rename, move and copy
## Discussion
@@ -58,7 +68,7 @@ Available at: <https://alist.nn.ci>.
## License
The `AList` is open-source software licensed under the MIT license.
The `AList` is open-source software licensed under the AGPL-3.0 license.
---
+12 -2
View File
@@ -28,6 +28,13 @@
- [x] [Alist](https://github.com/Xhofe/alist)
- [x] FTP
- [x] [PikPak](https://www.mypikpak.com/)
- [x] [闪电盘](https://shandianpan.com/)
- [x] [S3](https://aws.amazon.com/cn/s3/)
- [x] WebDav
- [x] Teambition([中国](https://www.teambition.com/ ),[国际](https://us.teambition.com/ ))
- [x] [分秒帧](https://www.mediatrack.cn/)
- [x] [和彩云](https://yun.139.com/) (个人云, 家庭云)
- [x] 部署方便,开箱即用
- [x] 文件预览(PDF、markdown、代码、纯文本……)
- [x] 画廊模式下的图像预览
- [x] 视频和音频预览(mp4、mp3 等)
@@ -37,9 +44,12 @@
- [x] 黑暗模式
- [x] 国际化
- [x] 受保护的路由(密码保护和身份验证)
- [x] WebDav(只读)
- [x] WebDav(具体见https://alist-doc.nn.ci/docs/webdav )
- [x] [Docker 部署](https://hub.docker.com/r/xhofe/alist)
- [x] Cloudflare workers 中转
- [x] 文件/文件夹打包下载
- [x] 支持视频列表播放和字幕(ass,srt,vtt)
- [x] 网页上传(可以允许访客上传),删除,新建文件夹,重命名,移动,复制
## 讨论
@@ -57,7 +67,7 @@
## 许可
`AList` 是在 MIT 许可下许可的开源软件。
`AList` 是在 AGPL-3.0 许可下许可的开源软件。
---
-125
View File
@@ -1,125 +0,0 @@
const HOST = "YOUR_HOST";
const TOKEN = "YOUR_TOKEN";
const corsHeaders = {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,HEAD,POST,OPTIONS",
"Access-Control-Max-Age": "86400",
};
!function(a){"use strict";function b(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}function c(a,b){return a<<b|a>>>32-b}function d(a,d,e,f,g,h){return b(c(b(b(d,a),b(f,h)),g),e)}function e(a,b,c,e,f,g,h){return d(b&c|~b&e,a,b,f,g,h)}function f(a,b,c,e,f,g,h){return d(b&e|c&~e,a,b,f,g,h)}function g(a,b,c,e,f,g,h){return d(b^c^e,a,b,f,g,h)}function h(a,b,c,e,f,g,h){return d(c^(b|~e),a,b,f,g,h)}function i(a,c){a[c>>5]|=128<<c%32,a[(c+64>>>9<<4)+14]=c;var d,i,j,k,l,m=1732584193,n=-271733879,o=-1732584194,p=271733878;for(d=0;d<a.length;d+=16)i=m,j=n,k=o,l=p,m=e(m,n,o,p,a[d],7,-680876936),p=e(p,m,n,o,a[d+1],12,-389564586),o=e(o,p,m,n,a[d+2],17,606105819),n=e(n,o,p,m,a[d+3],22,-1044525330),m=e(m,n,o,p,a[d+4],7,-176418897),p=e(p,m,n,o,a[d+5],12,1200080426),o=e(o,p,m,n,a[d+6],17,-1473231341),n=e(n,o,p,m,a[d+7],22,-45705983),m=e(m,n,o,p,a[d+8],7,1770035416),p=e(p,m,n,o,a[d+9],12,-1958414417),o=e(o,p,m,n,a[d+10],17,-42063),n=e(n,o,p,m,a[d+11],22,-1990404162),m=e(m,n,o,p,a[d+12],7,1804603682),p=e(p,m,n,o,a[d+13],12,-40341101),o=e(o,p,m,n,a[d+14],17,-1502002290),n=e(n,o,p,m,a[d+15],22,1236535329),m=f(m,n,o,p,a[d+1],5,-165796510),p=f(p,m,n,o,a[d+6],9,-1069501632),o=f(o,p,m,n,a[d+11],14,643717713),n=f(n,o,p,m,a[d],20,-373897302),m=f(m,n,o,p,a[d+5],5,-701558691),p=f(p,m,n,o,a[d+10],9,38016083),o=f(o,p,m,n,a[d+15],14,-660478335),n=f(n,o,p,m,a[d+4],20,-405537848),m=f(m,n,o,p,a[d+9],5,568446438),p=f(p,m,n,o,a[d+14],9,-1019803690),o=f(o,p,m,n,a[d+3],14,-187363961),n=f(n,o,p,m,a[d+8],20,1163531501),m=f(m,n,o,p,a[d+13],5,-1444681467),p=f(p,m,n,o,a[d+2],9,-51403784),o=f(o,p,m,n,a[d+7],14,1735328473),n=f(n,o,p,m,a[d+12],20,-1926607734),m=g(m,n,o,p,a[d+5],4,-378558),p=g(p,m,n,o,a[d+8],11,-2022574463),o=g(o,p,m,n,a[d+11],16,1839030562),n=g(n,o,p,m,a[d+14],23,-35309556),m=g(m,n,o,p,a[d+1],4,-1530992060),p=g(p,m,n,o,a[d+4],11,1272893353),o=g(o,p,m,n,a[d+7],16,-155497632),n=g(n,o,p,m,a[d+10],23,-1094730640),m=g(m,n,o,p,a[d+13],4,681279174),p=g(p,m,n,o,a[d],11,-358537222),o=g(o,p,m,n,a[d+3],16,-722521979),n=g(n,o,p,m,a[d+6],23,76029189),m=g(m,n,o,p,a[d+9],4,-640364487),p=g(p,m,n,o,a[d+12],11,-421815835),o=g(o,p,m,n,a[d+15],16,530742520),n=g(n,o,p,m,a[d+2],23,-995338651),m=h(m,n,o,p,a[d],6,-198630844),p=h(p,m,n,o,a[d+7],10,1126891415),o=h(o,p,m,n,a[d+14],15,-1416354905),n=h(n,o,p,m,a[d+5],21,-57434055),m=h(m,n,o,p,a[d+12],6,1700485571),p=h(p,m,n,o,a[d+3],10,-1894986606),o=h(o,p,m,n,a[d+10],15,-1051523),n=h(n,o,p,m,a[d+1],21,-2054922799),m=h(m,n,o,p,a[d+8],6,1873313359),p=h(p,m,n,o,a[d+15],10,-30611744),o=h(o,p,m,n,a[d+6],15,-1560198380),n=h(n,o,p,m,a[d+13],21,1309151649),m=h(m,n,o,p,a[d+4],6,-145523070),p=h(p,m,n,o,a[d+11],10,-1120210379),o=h(o,p,m,n,a[d+2],15,718787259),n=h(n,o,p,m,a[d+9],21,-343485551),m=b(m,i),n=b(n,j),o=b(o,k),p=b(p,l);return[m,n,o,p]}function j(a){var b,c="";for(b=0;b<32*a.length;b+=8)c+=String.fromCharCode(a[b>>5]>>>b%32&255);return c}function k(a){var b,c=[];for(c[(a.length>>2)-1]=void 0,b=0;b<c.length;b+=1)c[b]=0;for(b=0;b<8*a.length;b+=8)c[b>>5]|=(255&a.charCodeAt(b/8))<<b%32;return c}function l(a){return j(i(k(a),8*a.length))}function m(a,b){var c,d,e=k(a),f=[],g=[];for(f[15]=g[15]=void 0,e.length>16&&(e=i(e,8*a.length)),c=0;16>c;c+=1)f[c]=909522486^e[c],g[c]=1549556828^e[c];return d=i(f.concat(k(b)),512+8*b.length),j(i(g.concat(d),640))}function n(a){var b,c,d="0123456789abcdef",e="";for(c=0;c<a.length;c+=1)b=a.charCodeAt(c),e+=d.charAt(b>>>4&15)+d.charAt(15&b);return e}function o(a){return unescape(encodeURIComponent(a))}function p(a){return l(o(a))}function q(a){return n(p(a))}function r(a,b){return m(o(a),o(b))}function s(a,b){return n(r(a,b))}function t(a,b,c){return b?c?r(b,a):s(b,a):c?p(a):q(a)}"function"==typeof define&&define.amd?define(function(){return t}):a.md5=t}(this);
async function handleRequest(request) {
const origin = request.headers.get("origin");
const url = new URL(request.url);
const path = decodeURI(url.pathname);
const sign = url.searchParams.get("sign");
const name = path.split("/").pop();
const right = md5(`alist-${TOKEN}-${name}`).slice(8, 24);
if (sign !== right){
const resp = new Response(
JSON.stringify({
code: 401,
message: `sign mismatch`,
}),
{
headers: {
"content-type": "application/json;charset=UTF-8",
},
}
);
resp.headers.set("Access-Control-Allow-Origin", origin);
return resp;
}
let resp = await fetch(`${HOST}/api/admin/link`, {
method: "POST",
headers: {
"content-type": "application/json;charset=UTF-8",
Authorization: TOKEN,
},
body: JSON.stringify({
path: path,
}),
});
let res = await resp.json();
if (res.code !== 200) {
return new Response(JSON.stringify(res));
}
request = new Request(res.data.url, request);
if (res.data.headers) {
for(const header of res.data.headers){
request.headers.set(header.name, header.value);
}
}
let response = await fetch(request);
// Recreate the response so we can modify the headers
response = new Response(response.body, response);
// Set CORS headers
response.headers.set("Access-Control-Allow-Origin", origin);
// Append to/Add Vary header so browser will cache response correctly
response.headers.append("Vary", "Origin");
return response;
}
function handleOptions(request) {
// Make sure the necessary headers are present
// for this to be a valid pre-flight request
let headers = request.headers;
if (
headers.get("Origin") !== null &&
headers.get("Access-Control-Request-Method") !== null
// && headers.get("Access-Control-Request-Headers") !== null
) {
// Handle CORS pre-flight request.
// If you want to check or reject the requested method + headers
// you can do that here.
let respHeaders = {
...corsHeaders,
// Allow all future content Request headers to go back to browser
// such as Authorization (Bearer) or X-Client-Name-Version
"Access-Control-Allow-Headers": request.headers.get(
"Access-Control-Request-Headers"
),
};
return new Response(null, {
headers: respHeaders,
});
} else {
// Handle standard OPTIONS request.
// If you want to allow other HTTP Methods, you can do that here.
return new Response(null, {
headers: {
Allow: "GET, HEAD, POST, OPTIONS",
},
});
}
}
addEventListener("fetch", (event) => {
const request = event.request;
// const url = new URL(request.url)
if (request.method === "OPTIONS") {
// Handle CORS preflight requests
event.respondWith(handleOptions(request));
} else if (
request.method === "GET" ||
request.method === "HEAD" ||
request.method === "POST"
) {
// Handle requests to the API server
event.respondWith(handleRequest(request));
} else {
event.respondWith(
new Response(null, {
status: 405,
statusText: "Method Not Allowed",
})
);
}
});
+3 -2
View File
@@ -25,6 +25,7 @@ func Init() bool {
log.Infof("current password: %s", pass.Value)
return false
}
server.InitIndex()
bootstrap.InitSettings()
bootstrap.InitAccounts()
bootstrap.InitCache()
@@ -47,8 +48,8 @@ func main() {
base := fmt.Sprintf("%s:%d", conf.Conf.Address, conf.Conf.Port)
log.Infof("start server @ %s", base)
var err error
if conf.Conf.Https {
err = r.RunTLS(base, conf.Conf.CertFile, conf.Conf.KeyFile)
if conf.Conf.Scheme.Https {
err = r.RunTLS(base, conf.Conf.Scheme.CertFile, conf.Conf.Scheme.KeyFile)
} else {
err = r.Run(base)
}
+2 -1
View File
@@ -19,6 +19,7 @@ func InitAccounts() {
if !ok {
log.Errorf("no [%s] driver", account.Type)
} else {
log.Infof("start init account: [%s], type: [%s]", account.Name, account.Type)
err := driver.Save(&accounts[i], nil)
if err != nil {
log.Errorf("init account [%s] error:[%s]", account.Name, err.Error())
@@ -27,4 +28,4 @@ func InitAccounts() {
}
}
}
}
}
+5 -1
View File
@@ -12,7 +12,11 @@ import (
// InitCache init cache
func InitCache() {
log.Infof("init cache...")
goCacheClient := goCache.New(60*time.Minute, 120*time.Minute)
c := conf.Conf.Cache
if c.Expiration == 0 {
c.Expiration, c.CleanupInterval = 60, 120
}
goCacheClient := goCache.New(time.Duration(c.Expiration)*time.Minute, time.Duration(c.CleanupInterval)*time.Minute)
goCacheStore := store.NewGoCache(goCacheClient, nil)
conf.Cache = cache.New(goCacheStore)
}
+15 -2
View File
@@ -1,11 +1,11 @@
package bootstrap
import (
"encoding/json"
"github.com/Xhofe/alist/conf"
"github.com/Xhofe/alist/utils"
log "github.com/sirupsen/logrus"
"io/ioutil"
"os"
)
// InitConf init config
@@ -28,9 +28,22 @@ func InitConf() {
log.Fatalf("reading config file error:%s", err.Error())
}
conf.Conf = new(conf.Config)
err = json.Unmarshal(config, conf.Conf)
err = utils.Json.Unmarshal(config, conf.Conf)
if err != nil {
log.Fatalf("load config error: %s", err.Error())
}
log.Debugf("config:%+v", conf.Conf)
// update config.json struct
confBody, err := utils.Json.MarshalIndent(conf.Conf, "", " ")
if err != nil {
log.Fatalf("marshal config error:%s", err.Error())
}
err = ioutil.WriteFile(conf.ConfigFile, confBody, 0777)
if err != nil {
log.Fatalf("update config struct error: %s", err.Error())
}
err = os.MkdirAll("data/temp", 0700)
if err != nil {
log.Fatalf("create temp dir error: %s", err.Error())
}
}
+9 -5
View File
@@ -19,6 +19,7 @@ import (
func InitModel() {
log.Infof("init model...")
var err error
databaseConfig := conf.Conf.Database
newLogger := logger.New(
log2.New(os.Stdout, "\r\n", log2.LstdFlags),
@@ -59,22 +60,25 @@ func InitModel() {
}
case "postgres":
{
dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%d sslmode=disable TimeZone=Asia/Shanghai",
databaseConfig.Host, databaseConfig.User, databaseConfig.Password, databaseConfig.Name, databaseConfig.Port)
dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%d sslmode=%s TimeZone=Asia/Shanghai",
databaseConfig.Host, databaseConfig.User, databaseConfig.Password, databaseConfig.Name, databaseConfig.Port, databaseConfig.SslMode)
db, err := gorm.Open(postgres.Open(dsn), gormConfig)
if err != nil {
log.Errorf("failed to connect database:%s", err.Error())
}
conf.DB = db
}
default:
log.Fatalf("not supported database type: %s", databaseConfig.Type)
}
log.Infof("auto migrate model...")
err := conf.DB.AutoMigrate(&model.SettingItem{}, &model.Account{}, &model.Meta{})
if databaseConfig.Type == "mysql" {
err = conf.DB.Set("gorm:table_options", "ENGINE=InnoDB CHARSET=utf8mb4").
AutoMigrate(&model.SettingItem{}, &model.Account{}, &model.Meta{})
} else {
err = conf.DB.AutoMigrate(&model.SettingItem{}, &model.Account{}, &model.Meta{})
}
if err != nil {
log.Fatalf("failed to auto migrate")
}
}
+119 -66
View File
File diff suppressed because it is too large Load Diff
+116 -77
View File
File diff suppressed because it is too large Load Diff
+25 -6
View File
@@ -9,25 +9,44 @@ type Database struct {
Name string `json:"name"`
TablePrefix string `json:"table_prefix"`
DBFile string `json:"db_file"`
SslMode string `json:"ssl_mode"`
}
type Scheme struct {
Https bool `json:"https"`
CertFile string `json:"cert_file"`
KeyFile string `json:"key_file"`
}
type CacheConfig struct {
Expiration int64 `json:"expiration"`
CleanupInterval int64 `json:"cleanup_interval"`
}
type Config struct {
Address string `json:"address"`
Port int `json:"port"`
Database Database `json:"database"`
Https bool `json:"https"`
CertFile string `json:"cert_file"`
KeyFile string `json:"key_file"`
Address string `json:"address"`
Port int `json:"port"`
Assets string `json:"assets"`
Database Database `json:"database"`
Scheme Scheme `json:"scheme"`
Cache CacheConfig `json:"cache"`
}
func DefaultConfig() *Config {
return &Config{
Address: "0.0.0.0",
Port: 5244,
Assets: "jsdelivr",
Database: Database{
Type: "sqlite3",
Port: 0,
TablePrefix: "x_",
DBFile: "data/data.db",
SslMode: "disable",
},
Cache: CacheConfig{
Expiration: 60,
CleanupInterval: 120,
},
}
}
+58 -10
View File
@@ -5,6 +5,7 @@ import (
"github.com/eko/gocache/v2/cache"
"github.com/robfig/cron/v3"
"gorm.io/gorm"
"strconv"
)
var (
@@ -29,21 +30,68 @@ var (
)
var (
TextTypes = []string{"txt", "go", "md"}
TextTypes = []string{"txt", "htm", "html", "xml", "java", "properties", "sql",
"js", "md", "json", "conf", "ini", "vue", "php", "py", "bat", "gitignore", "yml",
"go", "sh", "c", "cpp", "h", "hpp", "tsx", "vtt", "srt", "ass"}
OfficeTypes = []string{"doc", "docx", "xls", "xlsx", "ppt", "pptx", "pdf"}
VideoTypes = []string{"mp4", "mkv", "avi", "mov", "rmvb", "webm"}
AudioTypes = []string{"mp3", "flac", "ogg", "m4a"}
ImageTypes = []string{"jpg", "tiff", "jpeg", "png", "gif", "bmp", "svg"}
VideoTypes = []string{"mp4", "mkv", "avi", "mov", "rmvb", "webm", "flv"}
AudioTypes = []string{"mp3", "flac", "ogg", "m4a", "wav"}
ImageTypes = []string{"jpg", "tiff", "jpeg", "png", "gif", "bmp", "svg", "ico", "swf", "webp"}
)
var settingsMap = make(map[string]string)
func Set(key string, value string) {
settingsMap[key] = value
}
func GetStr(key string) string {
value, ok := settingsMap[key]
if !ok {
return ""
}
return value
}
func GetBool(key string) bool {
value, ok := settingsMap[key]
if !ok {
return false
}
return value == "true"
}
func GetInt(key string, defaultV int) int {
value, ok := settingsMap[key]
if !ok {
return defaultV
}
v, err := strconv.Atoi(value)
if err != nil {
return defaultV
}
return v
}
var (
LoadSettings = []string{
"check parent folder", "check down link", "WebDAV username", "WebDAV password",
"Visitor WebDAV username", "Visitor WebDAV password",
"default page size", "load type",
"ocr api",
}
)
// settings
var (
RawIndexHtml string
ManageHtml string
IndexHtml string
CheckParent bool
CheckDown bool
Token string
Token string
DavUsername string
DavPassword string
//CheckParent bool
//CheckDown bool
//DavUsername string
//DavPassword string
//VisitorDavUsername string
//VisitorDavPassword string
)
+102 -62
View File
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More