mirror of https://github.com/cloudreve/Cloudreve
Merge branch 'master' of https://github.com/cloudreve/Cloudreve
commit
6451e4c903
|
@ -0,0 +1,61 @@
|
||||||
|
# Configuration for probot-stale - https://github.com/probot/stale
|
||||||
|
|
||||||
|
# Number of days of inactivity before an Issue or Pull Request becomes stale
|
||||||
|
daysUntilStale: 360
|
||||||
|
|
||||||
|
# Number of days of inactivity before an Issue or Pull Request with the stale label is closed.
|
||||||
|
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
|
||||||
|
daysUntilClose: 30
|
||||||
|
|
||||||
|
# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled)
|
||||||
|
onlyLabels: []
|
||||||
|
|
||||||
|
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
|
||||||
|
exemptLabels:
|
||||||
|
- pinned
|
||||||
|
- security
|
||||||
|
- "[Status] Maybe Later"
|
||||||
|
|
||||||
|
# Set to true to ignore issues in a project (defaults to false)
|
||||||
|
exemptProjects: true
|
||||||
|
|
||||||
|
# Set to true to ignore issues in a milestone (defaults to false)
|
||||||
|
exemptMilestones: true
|
||||||
|
|
||||||
|
# Set to true to ignore issues with an assignee (defaults to false)
|
||||||
|
exemptAssignees: true
|
||||||
|
|
||||||
|
# Label to use when marking as stale
|
||||||
|
staleLabel: wontfix
|
||||||
|
|
||||||
|
# Comment to post when marking as stale. Set to `false` to disable
|
||||||
|
markComment: >
|
||||||
|
This issue has been automatically marked as stale because it has not had
|
||||||
|
recent activity. It will be closed if no further activity occurs. Thank you
|
||||||
|
for your contributions.
|
||||||
|
|
||||||
|
# Comment to post when removing the stale label.
|
||||||
|
# unmarkComment: >
|
||||||
|
# Your comment here.
|
||||||
|
|
||||||
|
# Comment to post when closing a stale Issue or Pull Request.
|
||||||
|
# closeComment: >
|
||||||
|
# Your comment here.
|
||||||
|
|
||||||
|
# Limit the number of actions per hour, from 1-30. Default is 30
|
||||||
|
limitPerRun: 30
|
||||||
|
|
||||||
|
# Limit to only `issues` or `pulls`
|
||||||
|
# only: issues
|
||||||
|
|
||||||
|
# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls':
|
||||||
|
# pulls:
|
||||||
|
# daysUntilStale: 30
|
||||||
|
# markComment: >
|
||||||
|
# This pull request has been automatically marked as stale because it has not had
|
||||||
|
# recent activity. It will be closed if no further activity occurs. Thank you
|
||||||
|
# for your contributions.
|
||||||
|
|
||||||
|
# issues:
|
||||||
|
# exemptLabels:
|
||||||
|
# - confirmed
|
|
@ -9,53 +9,49 @@ jobs:
|
||||||
name: Build
|
name: Build
|
||||||
runs-on: ubuntu-18.04
|
runs-on: ubuntu-18.04
|
||||||
steps:
|
steps:
|
||||||
|
- name: Set up Go 1.17
|
||||||
|
uses: actions/setup-go@v2
|
||||||
|
with:
|
||||||
|
go-version: "1.17"
|
||||||
|
id: go
|
||||||
|
|
||||||
- name: Set up Golang
|
- name: Check out code into the Go module directory
|
||||||
uses: actions/setup-go@v1
|
uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
go-version: 1.17
|
clean: false
|
||||||
id: go
|
submodules: "recursive"
|
||||||
|
- run: |
|
||||||
|
git fetch --prune --unshallow --tags
|
||||||
|
|
||||||
- name: Check out code into the Go module directory
|
- name: Get dependencies and build
|
||||||
uses: actions/checkout@v2
|
run: |
|
||||||
with:
|
sudo apt-get update
|
||||||
clean: false
|
sudo apt-get -y install gcc-mingw-w64-x86-64
|
||||||
submodules: 'recursive'
|
sudo apt-get -y install gcc-arm-linux-gnueabihf libc6-dev-armhf-cross
|
||||||
- run: |
|
sudo apt-get -y install gcc-aarch64-linux-gnu libc6-dev-arm64-cross
|
||||||
git fetch --prune --unshallow --tags
|
chmod +x ./build.sh
|
||||||
|
./build.sh -r b
|
||||||
|
|
||||||
- name: Get dependencies and build
|
- name: Upload binary files (windows_amd64)
|
||||||
run: |
|
uses: actions/upload-artifact@v2
|
||||||
go install github.com/rakyll/statik
|
with:
|
||||||
export PATH=$PATH:~/go/bin/
|
name: cloudreve_windows_amd64
|
||||||
statik -src=models -f
|
path: release/cloudreve*windows_amd64.*
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get -y install gcc-mingw-w64-x86-64
|
|
||||||
sudo apt-get -y install gcc-arm-linux-gnueabihf libc6-dev-armhf-cross
|
|
||||||
sudo apt-get -y install gcc-aarch64-linux-gnu libc6-dev-arm64-cross
|
|
||||||
chmod +x ./build.sh
|
|
||||||
./build.sh -r b
|
|
||||||
|
|
||||||
- name: Upload binary files (windows_amd64)
|
- name: Upload binary files (linux_amd64)
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: cloudreve_windows_amd64
|
name: cloudreve_linux_amd64
|
||||||
path: release/cloudreve*windows_amd64.*
|
path: release/cloudreve*linux_amd64.*
|
||||||
|
|
||||||
- name: Upload binary files (linux_amd64)
|
- name: Upload binary files (linux_arm)
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: cloudreve_linux_amd64
|
name: cloudreve_linux_arm
|
||||||
path: release/cloudreve*linux_amd64.*
|
path: release/cloudreve*linux_arm.*
|
||||||
|
|
||||||
- name: Upload binary files (linux_arm)
|
- name: Upload binary files (linux_arm64)
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: cloudreve_linux_arm
|
name: cloudreve_linux_arm64
|
||||||
path: release/cloudreve*linux_arm.*
|
path: release/cloudreve*linux_arm64.*
|
||||||
|
|
||||||
- name: Upload binary files (linux_arm64)
|
|
||||||
uses: actions/upload-artifact@v2
|
|
||||||
with:
|
|
||||||
name: cloudreve_linux_arm64
|
|
||||||
path: release/cloudreve*linux_arm64.*
|
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
name: Build and push docker image
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 3.* # triggered on every push with tag 3.*
|
||||||
|
workflow_dispatch: # or just on button clicked
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
docker-build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- run: git fetch --prune --unshallow
|
||||||
|
- name: Setup Environments
|
||||||
|
id: envs
|
||||||
|
run: |
|
||||||
|
CLOUDREVE_LATEST_TAG=$(git describe --tags --abbrev=0)
|
||||||
|
DOCKER_IMAGE="cloudreve/cloudreve"
|
||||||
|
|
||||||
|
echo "RELEASE_VERSION=${GITHUB_REF#refs}"
|
||||||
|
TAGS="${DOCKER_IMAGE}:latest,${DOCKER_IMAGE}:${CLOUDREVE_LATEST_TAG}"
|
||||||
|
|
||||||
|
echo "CLOUDREVE_LATEST_TAG:${CLOUDREVE_LATEST_TAG}"
|
||||||
|
echo ::set-output name=tags::${TAGS}
|
||||||
|
- name: Setup QEMU Emulator
|
||||||
|
uses: docker/setup-qemu-action@master
|
||||||
|
with:
|
||||||
|
platforms: all
|
||||||
|
- name: Setup Docker Buildx Command
|
||||||
|
id: buildx
|
||||||
|
uses: docker/setup-buildx-action@master
|
||||||
|
- name: Login to Dockerhub
|
||||||
|
uses: docker/login-action@v1
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_PASSWORD }}
|
||||||
|
- name: Build Docker Image and Push
|
||||||
|
id: docker_build
|
||||||
|
uses: docker/build-push-action@v2
|
||||||
|
with:
|
||||||
|
push: true
|
||||||
|
builder: ${{ steps.buildx.outputs.name }}
|
||||||
|
context: .
|
||||||
|
file: ./Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||||
|
tags: ${{ steps.envs.outputs.tags }}
|
||||||
|
- name: Image Digest
|
||||||
|
run: echo ${{ steps.docker_build.outputs.digest }}
|
|
@ -2,46 +2,43 @@ name: Test
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
push:
|
push:
|
||||||
branches: [ master ]
|
branches: [master]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
test:
|
test:
|
||||||
name: Test
|
name: Test
|
||||||
runs-on: ubuntu-18.04
|
runs-on: ubuntu-18.04
|
||||||
steps:
|
steps:
|
||||||
|
- name: Set up Go 1.17
|
||||||
|
uses: actions/setup-go@v2
|
||||||
|
with:
|
||||||
|
go-version: "1.17"
|
||||||
|
id: go
|
||||||
|
|
||||||
- name: Set up Golang
|
- name: Check out code into the Go module directory
|
||||||
uses: actions/setup-go@v1
|
uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
go-version: 1.17
|
submodules: "recursive"
|
||||||
id: go
|
|
||||||
|
|
||||||
- name: Check out code into the Go module directory
|
- name: Build static files
|
||||||
uses: actions/checkout@v2
|
run: |
|
||||||
with:
|
mkdir assets/build
|
||||||
submodules: 'recursive'
|
touch assets/build/test.html
|
||||||
|
|
||||||
- name: Get dependencies
|
- name: Test
|
||||||
run: |
|
run: go test -coverprofile=coverage.txt -covermode=atomic ./...
|
||||||
go get github.com/rakyll/statik
|
|
||||||
export PATH=$PATH:~/go/bin/
|
|
||||||
statik -src=models -f
|
|
||||||
|
|
||||||
- name: Test
|
- name: Upload binary files (linux_arm)
|
||||||
run: go test -coverprofile=coverage.txt -covermode=atomic ./...
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: cloudreve_linux_arm
|
||||||
|
path: release/cloudreve*linux_arm.*
|
||||||
|
|
||||||
- name: Upload binary files (linux_arm)
|
- name: Upload binary files (linux_arm64)
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: cloudreve_linux_arm
|
name: cloudreve_linux_arm64
|
||||||
path: release/cloudreve*linux_arm.*
|
path: release/cloudreve*linux_arm64.*
|
||||||
|
|
||||||
- name: Upload binary files (linux_arm64)
|
|
||||||
uses: actions/upload-artifact@v2
|
|
||||||
with:
|
|
||||||
name: cloudreve_linux_arm64
|
|
||||||
path: release/cloudreve*linux_arm64.*
|
|
||||||
|
|
|
@ -4,10 +4,9 @@ go:
|
||||||
node_js: "12.16.3"
|
node_js: "12.16.3"
|
||||||
git:
|
git:
|
||||||
depth: 1
|
depth: 1
|
||||||
install:
|
|
||||||
- go get github.com/rakyll/statik
|
|
||||||
before_script:
|
before_script:
|
||||||
- statik -src=models -f
|
- mkdir assets/build
|
||||||
|
- touch assets/build/test.html
|
||||||
script:
|
script:
|
||||||
- go test -coverprofile=coverage.txt -covermode=atomic ./...
|
- go test -coverprofile=coverage.txt -covermode=atomic ./...
|
||||||
after_success:
|
after_success:
|
||||||
|
|
89
Dockerfile
89
Dockerfile
|
@ -1,72 +1,43 @@
|
||||||
|
FROM golang:1.17.7-alpine as cloudreve_builder
|
||||||
|
|
||||||
|
|
||||||
|
# install dependencies and build tools
|
||||||
|
RUN apk update && apk add --no-cache wget curl git yarn build-base gcc abuild binutils binutils-doc gcc-doc
|
||||||
|
|
||||||
|
WORKDIR /cloudreve_builder
|
||||||
|
RUN git clone --recurse-submodules https://github.com/cloudreve/Cloudreve.git
|
||||||
|
|
||||||
# build frontend
|
# build frontend
|
||||||
FROM node:lts-buster AS fe-builder
|
WORKDIR /cloudreve_builder/Cloudreve/assets
|
||||||
|
RUN yarn install --network-timeout 1000000
|
||||||
COPY ./assets /assets
|
RUN yarn run build
|
||||||
|
|
||||||
WORKDIR /assets
|
|
||||||
|
|
||||||
# If encountered problems like JavaScript heap out of memory, please uncomment the following options
|
|
||||||
ENV NODE_OPTIONS --max_old_space_size=4096
|
|
||||||
|
|
||||||
# yarn repo connection is unstable, adjust the network timeout to 10 min.
|
|
||||||
RUN set -ex \
|
|
||||||
&& yarn install --network-timeout 600000 \
|
|
||||||
&& yarn run build
|
|
||||||
|
|
||||||
# build backend
|
# build backend
|
||||||
FROM golang:1.17.7-alpine3.12 AS be-builder
|
WORKDIR /cloudreve_builder/Cloudreve
|
||||||
|
RUN go get github.com/rakyll/statik \
|
||||||
ENV GO111MODULE on
|
|
||||||
|
|
||||||
COPY . /go/src/github.com/cloudreve/Cloudreve/v3
|
|
||||||
COPY --from=fe-builder /assets/build/ /go/src/github.com/cloudreve/Cloudreve/v3/assets/build/
|
|
||||||
|
|
||||||
WORKDIR /go/src/github.com/cloudreve/Cloudreve/v3
|
|
||||||
|
|
||||||
RUN set -ex \
|
|
||||||
&& apk upgrade \
|
|
||||||
&& apk add gcc libc-dev git \
|
|
||||||
&& export COMMIT_SHA=$(git rev-parse --short HEAD) \
|
|
||||||
&& export VERSION=$(git describe --tags) \
|
|
||||||
&& (cd && go get github.com/rakyll/statik) \
|
|
||||||
&& statik -src=assets/build/ -include=*.html,*.js,*.json,*.css,*.png,*.svg,*.ico -f \
|
&& statik -src=assets/build/ -include=*.html,*.js,*.json,*.css,*.png,*.svg,*.ico -f \
|
||||||
&& go install -ldflags "-X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.BackendVersion=${VERSION}' \
|
&& tag_name=$(git describe --tags) \
|
||||||
-X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.LastCommit=${COMMIT_SHA}'\
|
&& export COMMIT_SHA=$(git rev-parse --short HEAD) \
|
||||||
-w -s"
|
&& go build -a -o cloudreve -ldflags " -X 'github.com/HFO4/cloudreve/pkg/conf.BackendVersion=$tag_name' -X 'github.com/HFO4/cloudreve/pkg/conf.LastCommit=$COMMIT_SHA'"
|
||||||
|
|
||||||
|
|
||||||
# build final image
|
# build final image
|
||||||
FROM alpine:3.12 AS dist
|
FROM alpine:latest
|
||||||
|
|
||||||
LABEL maintainer="mritd <mritd@linux.com>"
|
WORKDIR /cloudreve
|
||||||
|
|
||||||
# we use the Asia/Shanghai timezone by default, you can be modified
|
RUN apk update && apk add --no-cache tzdata
|
||||||
# by `docker build --build-arg=TZ=Other_Timezone ...`
|
|
||||||
ARG TZ="Asia/Shanghai"
|
|
||||||
|
|
||||||
ENV TZ ${TZ}
|
# we using the `Asia/Shanghai` timezone by default, you can do modification at your will
|
||||||
|
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
|
||||||
|
&& echo "Asia/Shanghai" > /etc/timezone
|
||||||
|
|
||||||
COPY --from=be-builder /go/bin/Cloudreve /cloudreve/cloudreve
|
COPY --from=cloudreve_builder /cloudreve_builder/Cloudreve/cloudreve ./
|
||||||
COPY docker-bootstrap.sh /cloudreve/bootstrap.sh
|
|
||||||
|
|
||||||
RUN apk upgrade \
|
# prepare permissions and aria2 dir
|
||||||
&& apk add bash tzdata aria2 \
|
RUN chmod +x ./cloudreve && mkdir -p /data/aria2 && chmod -R 766 /data/aria2
|
||||||
&& ln -s /cloudreve/cloudreve /usr/bin/cloudreve \
|
|
||||||
&& ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime \
|
|
||||||
&& echo ${TZ} > /etc/timezone \
|
|
||||||
&& rm -rf /var/cache/apk/* \
|
|
||||||
&& mkdir /etc/cloudreve \
|
|
||||||
&& ln -s /etc/cloudreve/cloureve.db /cloudreve/cloudreve.db \
|
|
||||||
&& ln -s /etc/cloudreve/conf.ini /cloudreve/conf.ini
|
|
||||||
|
|
||||||
# cloudreve use tcp 5212 port by default
|
EXPOSE 5212
|
||||||
EXPOSE 5212/tcp
|
VOLUME ["/cloudreve/uploads", "/cloudreve/avatar", "/data"]
|
||||||
|
|
||||||
# cloudreve stores all files(including executable file) in the `/cloudreve`
|
ENTRYPOINT ["./cloudreve"]
|
||||||
# directory by default; users should mount the configfile to the `/etc/cloudreve`
|
|
||||||
# directory by themselves for persistence considerations, and the data storage
|
|
||||||
# directory recommends using `/data` directory.
|
|
||||||
VOLUME /etc/cloudreve
|
|
||||||
|
|
||||||
VOLUME /data
|
|
||||||
|
|
||||||
ENTRYPOINT ["sh", "/cloudreve/bootstrap.sh"]
|
|
16
README.md
16
README.md
|
@ -68,7 +68,7 @@ chmod +x ./cloudreve
|
||||||
|
|
||||||
## :gear: 构建
|
## :gear: 构建
|
||||||
|
|
||||||
自行构建前需要拥有 `Go >= 1.13`、`yarn`等必要依赖。
|
自行构建前需要拥有 `Go >= 1.17`、`yarn`等必要依赖。
|
||||||
|
|
||||||
#### 克隆代码
|
#### 克隆代码
|
||||||
|
|
||||||
|
@ -85,19 +85,7 @@ cd assets
|
||||||
yarn install
|
yarn install
|
||||||
# 开始构建
|
# 开始构建
|
||||||
yarn run build
|
yarn run build
|
||||||
```
|
|
||||||
|
|
||||||
#### 嵌入静态资源
|
|
||||||
|
|
||||||
```shell
|
|
||||||
# 回到项目主目录
|
|
||||||
cd ../
|
|
||||||
|
|
||||||
# 安装 statik, 用于嵌入静态资源
|
|
||||||
go get github.com/rakyll/statik
|
|
||||||
|
|
||||||
# 开始嵌入
|
|
||||||
statik -src=assets/build/ -include=*.html,*.js,*.json,*.css,*.png,*.svg,*.ico -f
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 编译项目
|
#### 编译项目
|
||||||
|
@ -108,7 +96,7 @@ export COMMIT_SHA=$(git rev-parse --short HEAD)
|
||||||
export VERSION=$(git describe --tags)
|
export VERSION=$(git describe --tags)
|
||||||
|
|
||||||
# 开始编译
|
# 开始编译
|
||||||
go build -a -o cloudreve -ldflags " -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.BackendVersion=$VERSION' -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.LastCommit=$COMMIT_SHA'"
|
go build -a -o cloudreve -ldflags "-s -w -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.BackendVersion=$VERSION' -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.LastCommit=$COMMIT_SHA'"
|
||||||
```
|
```
|
||||||
|
|
||||||
你也可以使用项目根目录下的`build.sh`快速开始构建:
|
你也可以使用项目根目录下的`build.sh`快速开始构建:
|
||||||
|
|
|
@ -1,21 +1,26 @@
|
||||||
package bootstrap
|
package bootstrap
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
|
"embed"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/fs"
|
||||||
"net/http"
|
"net/http"
|
||||||
"path"
|
"path/filepath"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
"github.com/cloudreve/Cloudreve/v3/pkg/conf"
|
"github.com/cloudreve/Cloudreve/v3/pkg/conf"
|
||||||
"github.com/cloudreve/Cloudreve/v3/pkg/util"
|
"github.com/cloudreve/Cloudreve/v3/pkg/util"
|
||||||
_ "github.com/cloudreve/Cloudreve/v3/statik"
|
|
||||||
"github.com/gin-contrib/static"
|
"github.com/gin-contrib/static"
|
||||||
"github.com/rakyll/statik/fs"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const StaticFolder = "statics"
|
const StaticFolder = "statics"
|
||||||
|
|
||||||
|
var StaticEmbed embed.FS
|
||||||
|
|
||||||
type GinFS struct {
|
type GinFS struct {
|
||||||
FS http.FileSystem
|
FS http.FileSystem
|
||||||
}
|
}
|
||||||
|
@ -35,124 +40,100 @@ func (b *GinFS) Open(name string) (http.File, error) {
|
||||||
|
|
||||||
// Exists 文件是否存在
|
// Exists 文件是否存在
|
||||||
func (b *GinFS) Exists(prefix string, filepath string) bool {
|
func (b *GinFS) Exists(prefix string, filepath string) bool {
|
||||||
|
|
||||||
if _, err := b.FS.Open(filepath); err != nil {
|
if _, err := b.FS.Open(filepath); err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// InitStatic 初始化静态资源文件
|
// InitStatic 初始化静态资源文件
|
||||||
func InitStatic() {
|
func InitStatic() {
|
||||||
var err error
|
|
||||||
|
|
||||||
if util.Exists(util.RelativePath(StaticFolder)) {
|
if util.Exists(util.RelativePath(StaticFolder)) {
|
||||||
util.Log().Info("检测到 statics 目录存在,将使用此目录下的静态资源文件")
|
util.Log().Info("检测到 statics 目录存在,将使用此目录下的静态资源文件")
|
||||||
StaticFS = static.LocalFile(util.RelativePath("statics"), false)
|
StaticFS = static.LocalFile(util.RelativePath("statics"), false)
|
||||||
|
|
||||||
// 检查静态资源的版本
|
|
||||||
f, err := StaticFS.Open("version.json")
|
|
||||||
if err != nil {
|
|
||||||
util.Log().Warning("静态资源版本标识文件不存在,请重新构建或删除 statics 目录")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
b, err := ioutil.ReadAll(f)
|
|
||||||
if err != nil {
|
|
||||||
util.Log().Warning("无法读取静态资源文件版本,请重新构建或删除 statics 目录")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var v staticVersion
|
|
||||||
if err := json.Unmarshal(b, &v); err != nil {
|
|
||||||
util.Log().Warning("无法解析静态资源文件版本, %s", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
staticName := "cloudreve-frontend"
|
|
||||||
if conf.IsPro == "true" {
|
|
||||||
staticName += "-pro"
|
|
||||||
}
|
|
||||||
|
|
||||||
if v.Name != staticName {
|
|
||||||
util.Log().Warning("静态资源版本不匹配,请重新构建或删除 statics 目录")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if v.Version != conf.RequiredStaticVersion {
|
|
||||||
util.Log().Warning("静态资源版本不匹配 [当前 %s, 需要: %s],请重新构建或删除 statics 目录", v.Version, conf.RequiredStaticVersion)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
StaticFS = &GinFS{}
|
// 初始化静态资源
|
||||||
StaticFS.(*GinFS).FS, err = fs.New()
|
embedFS, err := fs.Sub(StaticEmbed, "assets/build")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.Log().Panic("无法初始化静态资源, %s", err)
|
util.Log().Panic("无法初始化静态资源, %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StaticFS = &GinFS{
|
||||||
|
FS: http.FS(embedFS),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 检查静态资源的版本
|
||||||
|
f, err := StaticFS.Open("version.json")
|
||||||
|
if err != nil {
|
||||||
|
util.Log().Warning("静态资源版本标识文件不存在,请重新构建或删除 statics 目录")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
b, err := io.ReadAll(f)
|
||||||
|
if err != nil {
|
||||||
|
util.Log().Warning("无法读取静态资源文件版本,请重新构建或删除 statics 目录")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var v staticVersion
|
||||||
|
if err := json.Unmarshal(b, &v); err != nil {
|
||||||
|
util.Log().Warning("无法解析静态资源文件版本, %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
staticName := "cloudreve-frontend"
|
||||||
|
if conf.IsPro == "true" {
|
||||||
|
staticName += "-pro"
|
||||||
|
}
|
||||||
|
|
||||||
|
if v.Name != staticName {
|
||||||
|
util.Log().Warning("静态资源版本不匹配,请重新构建或删除 statics 目录")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if v.Version != conf.RequiredStaticVersion {
|
||||||
|
util.Log().Warning("静态资源版本不匹配 [当前 %s, 需要: %s],请重新构建或删除 statics 目录", v.Version, conf.RequiredStaticVersion)
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Eject 抽离内置静态资源
|
// Eject 抽离内置静态资源
|
||||||
func Eject() {
|
func Eject() {
|
||||||
staticFS, err := fs.New()
|
// 初始化静态资源
|
||||||
|
embedFS, err := fs.Sub(StaticEmbed, "assets/build")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.Log().Panic("无法初始化静态资源, %s", err)
|
util.Log().Panic("无法初始化静态资源, %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
root, err := staticFS.Open("/")
|
var walk func(relPath string, d fs.DirEntry, err error) error
|
||||||
if err != nil {
|
walk = func(relPath string, d fs.DirEntry, err error) error {
|
||||||
util.Log().Panic("根目录不存在, %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var walk func(relPath string, object http.File)
|
|
||||||
walk = func(relPath string, object http.File) {
|
|
||||||
stat, err := object.Stat()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.Log().Error("无法获取[%s]的信息, %s, 跳过...", relPath, err)
|
return errors.Errorf("无法获取[%s]的信息, %s, 跳过...", relPath, err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if !stat.IsDir() {
|
if !d.IsDir() {
|
||||||
// 写入文件
|
// 写入文件
|
||||||
out, err := util.CreatNestedFile(util.RelativePath(StaticFolder + relPath))
|
out, err := util.CreatNestedFile(filepath.Join(util.RelativePath(""), StaticFolder, relPath))
|
||||||
defer out.Close()
|
defer out.Close()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
util.Log().Error("无法创建文件[%s], %s, 跳过...", relPath, err)
|
return errors.Errorf("无法创建文件[%s], %s, 跳过...", relPath, err)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
util.Log().Info("导出 [%s]...", relPath)
|
util.Log().Info("导出 [%s]...", relPath)
|
||||||
if _, err := io.Copy(out, object); err != nil {
|
obj, _ := embedFS.Open(relPath)
|
||||||
util.Log().Error("无法写入文件[%s], %s, 跳过...", relPath, err)
|
if _, err := io.Copy(out, bufio.NewReader(obj)); err != nil {
|
||||||
return
|
return errors.Errorf("无法写入文件[%s], %s, 跳过...", relPath, err)
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// 列出目录
|
|
||||||
objects, err := object.Readdir(0)
|
|
||||||
if err != nil {
|
|
||||||
util.Log().Error("无法步入子目录[%s], %s, 跳过...", relPath, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 递归遍历子目录
|
|
||||||
for _, newObject := range objects {
|
|
||||||
newPath := path.Join(relPath, newObject.Name())
|
|
||||||
newRoot, err := staticFS.Open(newPath)
|
|
||||||
if err != nil {
|
|
||||||
util.Log().Error("无法打开对象[%s], %s, 跳过...", newPath, err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
walk(newPath, newRoot)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
util.Log().Info("开始导出内置静态资源...")
|
// util.Log().Info("开始导出内置静态资源...")
|
||||||
walk("/", root)
|
err = fs.WalkDir(embedFS, ".", walk)
|
||||||
|
if err != nil {
|
||||||
|
util.Log().Error("导出内置静态资源遇到错误:%s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
util.Log().Info("内置静态资源导出完成")
|
util.Log().Info("内置静态资源导出完成")
|
||||||
}
|
}
|
||||||
|
|
122
build.sh
122
build.sh
|
@ -1,13 +1,16 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
REPO=$(cd $(dirname $0); pwd)
|
REPO=$(
|
||||||
|
cd $(dirname $0)
|
||||||
|
pwd
|
||||||
|
)
|
||||||
COMMIT_SHA=$(git rev-parse --short HEAD)
|
COMMIT_SHA=$(git rev-parse --short HEAD)
|
||||||
VERSION=$(git describe --tags)
|
VERSION=$(git describe --tags)
|
||||||
ASSETS="false"
|
ASSETS="false"
|
||||||
BINARY="false"
|
BINARY="false"
|
||||||
RELEASE="false"
|
RELEASE="false"
|
||||||
|
|
||||||
debugInfo () {
|
debugInfo() {
|
||||||
echo "Repo: $REPO"
|
echo "Repo: $REPO"
|
||||||
echo "Build assets: $ASSETS"
|
echo "Build assets: $ASSETS"
|
||||||
echo "Build binary: $BINARY"
|
echo "Build binary: $BINARY"
|
||||||
|
@ -16,10 +19,9 @@ debugInfo () {
|
||||||
echo "Commit: $COMMIT_SHA"
|
echo "Commit: $COMMIT_SHA"
|
||||||
}
|
}
|
||||||
|
|
||||||
buildAssets () {
|
buildAssets() {
|
||||||
cd $REPO
|
cd $REPO
|
||||||
rm -rf assets/build
|
rm -rf assets/build
|
||||||
rm -f statik/statik.go
|
|
||||||
|
|
||||||
export CI=false
|
export CI=false
|
||||||
|
|
||||||
|
@ -27,94 +29,88 @@ buildAssets () {
|
||||||
|
|
||||||
yarn install
|
yarn install
|
||||||
yarn run build
|
yarn run build
|
||||||
|
cd build
|
||||||
if ! [ -x "$(command -v statik)" ]; then
|
rm -rf *.map
|
||||||
export CGO_ENABLED=0
|
|
||||||
go get github.com/rakyll/statik
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd $REPO
|
|
||||||
statik -src=assets/build/ -include=*.html,*.js,*.json,*.css,*.png,*.svg,*.ico,*.ttf -f
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buildBinary () {
|
buildBinary() {
|
||||||
cd $REPO
|
cd $REPO
|
||||||
go build -a -o cloudreve -ldflags " -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.BackendVersion=$VERSION' -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.LastCommit=$COMMIT_SHA'"
|
go build -a -o cloudreve -ldflags " -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.BackendVersion=$VERSION' -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.LastCommit=$COMMIT_SHA'"
|
||||||
}
|
}
|
||||||
|
|
||||||
_build() {
|
_build() {
|
||||||
local osarch=$1
|
local osarch=$1
|
||||||
IFS=/ read -r -a arr <<<"$osarch"
|
IFS=/ read -r -a arr <<<"$osarch"
|
||||||
os="${arr[0]}"
|
os="${arr[0]}"
|
||||||
arch="${arr[1]}"
|
arch="${arr[1]}"
|
||||||
gcc="${arr[2]}"
|
gcc="${arr[2]}"
|
||||||
|
|
||||||
# Go build to build the binary.
|
# Go build to build the binary.
|
||||||
export GOOS=$os
|
export GOOS=$os
|
||||||
export GOARCH=$arch
|
export GOARCH=$arch
|
||||||
export CC=$gcc
|
export CC=$gcc
|
||||||
export CGO_ENABLED=1
|
export CGO_ENABLED=1
|
||||||
|
|
||||||
if [ -n "$VERSION" ]; then
|
if [ -n "$VERSION" ]; then
|
||||||
out="release/cloudreve_${VERSION}_${os}_${arch}"
|
out="release/cloudreve_${VERSION}_${os}_${arch}"
|
||||||
else
|
else
|
||||||
out="release/cloudreve_${COMMIT_SHA}_${os}_${arch}"
|
out="release/cloudreve_${COMMIT_SHA}_${os}_${arch}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
go build -a -o "${out}" -ldflags " -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.BackendVersion=$VERSION' -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.LastCommit=$COMMIT_SHA'"
|
go build -a -o "${out}" -ldflags " -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.BackendVersion=$VERSION' -X 'github.com/cloudreve/Cloudreve/v3/pkg/conf.LastCommit=$COMMIT_SHA'"
|
||||||
|
|
||||||
if [ "$os" = "windows" ]; then
|
if [ "$os" = "windows" ]; then
|
||||||
mv $out release/cloudreve.exe
|
mv $out release/cloudreve.exe
|
||||||
zip -j -q "${out}.zip" release/cloudreve.exe
|
zip -j -q "${out}.zip" release/cloudreve.exe
|
||||||
rm -f "release/cloudreve.exe"
|
rm -f "release/cloudreve.exe"
|
||||||
else
|
else
|
||||||
mv $out release/cloudreve
|
mv $out release/cloudreve
|
||||||
tar -zcvf "${out}.tar.gz" -C release cloudreve
|
tar -zcvf "${out}.tar.gz" -C release cloudreve
|
||||||
rm -f "release/cloudreve"
|
rm -f "release/cloudreve"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
release(){
|
release() {
|
||||||
cd $REPO
|
cd $REPO
|
||||||
## List of architectures and OS to test coss compilation.
|
## List of architectures and OS to test coss compilation.
|
||||||
SUPPORTED_OSARCH="linux/amd64/gcc linux/arm/arm-linux-gnueabihf-gcc windows/amd64/x86_64-w64-mingw32-gcc linux/arm64/aarch64-linux-gnu-gcc"
|
SUPPORTED_OSARCH="linux/amd64/gcc linux/arm/arm-linux-gnueabihf-gcc windows/amd64/x86_64-w64-mingw32-gcc linux/arm64/aarch64-linux-gnu-gcc"
|
||||||
|
|
||||||
echo "Release builds for OS/Arch/CC: ${SUPPORTED_OSARCH}"
|
echo "Release builds for OS/Arch/CC: ${SUPPORTED_OSARCH}"
|
||||||
for each_osarch in ${SUPPORTED_OSARCH}; do
|
for each_osarch in ${SUPPORTED_OSARCH}; do
|
||||||
_build "${each_osarch}"
|
_build "${each_osarch}"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "Usage: $0 [-a] [-c] [-b] [-r]" 1>&2;
|
echo "Usage: $0 [-a] [-c] [-b] [-r]" 1>&2
|
||||||
exit 1;
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
while getopts "bacr:d" o; do
|
while getopts "bacr:d" o; do
|
||||||
case "${o}" in
|
case "${o}" in
|
||||||
b)
|
b)
|
||||||
ASSETS="true"
|
ASSETS="true"
|
||||||
BINARY="true"
|
BINARY="true"
|
||||||
;;
|
;;
|
||||||
a)
|
a)
|
||||||
ASSETS="true"
|
ASSETS="true"
|
||||||
;;
|
;;
|
||||||
c)
|
c)
|
||||||
BINARY="true"
|
BINARY="true"
|
||||||
;;
|
;;
|
||||||
r)
|
r)
|
||||||
ASSETS="true"
|
ASSETS="true"
|
||||||
RELEASE="true"
|
RELEASE="true"
|
||||||
;;
|
;;
|
||||||
d)
|
d)
|
||||||
DEBUG="true"
|
DEBUG="true"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
usage
|
usage
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
shift $((OPTIND-1))
|
shift $((OPTIND - 1))
|
||||||
|
|
||||||
if [ "$DEBUG" = "true" ]; then
|
if [ "$DEBUG" = "true" ]; then
|
||||||
debugInfo
|
debugInfo
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
version: "3.8"
|
||||||
|
services:
|
||||||
|
cloudreve:
|
||||||
|
container_name: cloudreve
|
||||||
|
image: cloudreve/cloudreve:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "5212:5212"
|
||||||
|
volumes:
|
||||||
|
- temp_data:/data
|
||||||
|
- ./cloudreve/uploads:/cloudreve/uploads
|
||||||
|
- ./cloudreve/conf.ini:/cloudreve/conf.ini
|
||||||
|
- ./cloudreve/cloudreve.db:/cloudreve/cloudreve.db
|
||||||
|
- ./cloudreve/avatar:/cloudreve/avatar
|
||||||
|
depends_on:
|
||||||
|
- aria2
|
||||||
|
aria2:
|
||||||
|
container_name: aria2
|
||||||
|
image: p3terx/aria2-pro # third party image, please keep notice what you are doing
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- RPC_SECRET=your_aria_rpc_token # aria rpc token, customize your own
|
||||||
|
- RPC_PORT=6800
|
||||||
|
volumes:
|
||||||
|
- ./aria2/config:/config
|
||||||
|
- temp_data:/data
|
||||||
|
volumes:
|
||||||
|
temp_data:
|
||||||
|
driver: local
|
||||||
|
driver_opts:
|
||||||
|
type: none
|
||||||
|
device: $PWD/data
|
||||||
|
o: bind
|
58
go.mod
58
go.mod
|
@ -1,19 +1,18 @@
|
||||||
module github.com/cloudreve/Cloudreve/v3
|
module github.com/cloudreve/Cloudreve/v3
|
||||||
|
|
||||||
go 1.13
|
go 1.17
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/DATA-DOG/go-sqlmock v1.3.3
|
github.com/DATA-DOG/go-sqlmock v1.3.3
|
||||||
github.com/HFO4/aliyun-oss-go-sdk v2.2.3+incompatible
|
github.com/HFO4/aliyun-oss-go-sdk v2.2.3+incompatible
|
||||||
github.com/aws/aws-sdk-go v1.31.5
|
github.com/aws/aws-sdk-go v1.31.5
|
||||||
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect
|
|
||||||
github.com/duo-labs/webauthn v0.0.0-20191119193225-4bf9a0f776d4
|
github.com/duo-labs/webauthn v0.0.0-20191119193225-4bf9a0f776d4
|
||||||
github.com/fatih/color v1.7.0
|
github.com/fatih/color v1.7.0
|
||||||
github.com/gin-contrib/cors v1.3.0
|
github.com/gin-contrib/cors v1.3.0
|
||||||
github.com/gin-contrib/gzip v0.0.2-0.20200226035851-25bef2ef21e8
|
github.com/gin-contrib/gzip v0.0.2-0.20200226035851-25bef2ef21e8
|
||||||
github.com/gin-contrib/sessions v0.0.1
|
github.com/gin-contrib/sessions v0.0.1
|
||||||
github.com/gin-contrib/static v0.0.0-20191128031702-f81c604d8ac2
|
github.com/gin-contrib/static v0.0.0-20191128031702-f81c604d8ac2
|
||||||
github.com/gin-gonic/gin v1.5.0
|
github.com/gin-gonic/gin v1.7.0
|
||||||
github.com/go-ini/ini v1.50.0
|
github.com/go-ini/ini v1.50.0
|
||||||
github.com/go-mail/mail v2.3.1+incompatible
|
github.com/go-mail/mail v2.3.1+incompatible
|
||||||
github.com/gofrs/uuid v4.0.0+incompatible
|
github.com/gofrs/uuid v4.0.0+incompatible
|
||||||
|
@ -23,15 +22,12 @@ require (
|
||||||
github.com/hashicorp/go-version v1.3.0
|
github.com/hashicorp/go-version v1.3.0
|
||||||
github.com/jinzhu/gorm v1.9.11
|
github.com/jinzhu/gorm v1.9.11
|
||||||
github.com/juju/ratelimit v1.0.1
|
github.com/juju/ratelimit v1.0.1
|
||||||
github.com/mattn/go-colorable v0.1.4 // indirect
|
|
||||||
github.com/mojocn/base64Captcha v0.0.0-20190801020520-752b1cd608b2
|
github.com/mojocn/base64Captcha v0.0.0-20190801020520-752b1cd608b2
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/pquerna/otp v1.2.0
|
github.com/pquerna/otp v1.2.0
|
||||||
github.com/qiniu/go-sdk/v7 v7.11.1
|
github.com/qiniu/go-sdk/v7 v7.11.1
|
||||||
github.com/rafaeljusto/redigomock v0.0.0-20191117212112-00b2509252a1
|
github.com/rafaeljusto/redigomock v0.0.0-20191117212112-00b2509252a1
|
||||||
github.com/rakyll/statik v0.1.7
|
|
||||||
github.com/robfig/cron/v3 v3.0.1
|
github.com/robfig/cron/v3 v3.0.1
|
||||||
github.com/smartystreets/goconvey v1.6.4 // indirect
|
|
||||||
github.com/speps/go-hashids v2.0.0+incompatible
|
github.com/speps/go-hashids v2.0.0+incompatible
|
||||||
github.com/stretchr/testify v1.6.1
|
github.com/stretchr/testify v1.6.1
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go v3.0.125+incompatible
|
github.com/tencentcloud/tencentcloud-sdk-go v3.0.125+incompatible
|
||||||
|
@ -39,8 +35,56 @@ require (
|
||||||
github.com/upyun/go-sdk v2.1.0+incompatible
|
github.com/upyun/go-sdk v2.1.0+incompatible
|
||||||
golang.org/x/image v0.0.0-20211028202545-6944b10bf410
|
golang.org/x/image v0.0.0-20211028202545-6944b10bf410
|
||||||
golang.org/x/text v0.3.7
|
golang.org/x/text v0.3.7
|
||||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
|
||||||
gopkg.in/go-playground/validator.v9 v9.29.1
|
gopkg.in/go-playground/validator.v9 v9.29.1
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
cloud.google.com/go v0.37.4 // indirect
|
||||||
|
github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 // indirect
|
||||||
|
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect
|
||||||
|
github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff // indirect
|
||||||
|
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect
|
||||||
|
github.com/cloudflare/cfssl v0.0.0-20190726000631-633726f6bcb7 // indirect
|
||||||
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
|
github.com/denisenkom/go-mssqldb v0.0.0-20190515213511-eb9f6a1743f3 // indirect
|
||||||
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect
|
||||||
|
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||||
|
github.com/go-playground/locales v0.14.0 // indirect
|
||||||
|
github.com/go-playground/universal-translator v0.18.0 // indirect
|
||||||
|
github.com/go-playground/validator/v10 v10.8.0 // indirect
|
||||||
|
github.com/go-sql-driver/mysql v1.5.0 // indirect
|
||||||
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
|
||||||
|
github.com/golang/protobuf v1.3.3 // indirect
|
||||||
|
github.com/google/certificate-transparency-go v1.0.21 // indirect
|
||||||
|
github.com/gorilla/context v1.1.1 // indirect
|
||||||
|
github.com/gorilla/securecookie v1.1.1 // indirect
|
||||||
|
github.com/gorilla/sessions v1.1.3 // indirect
|
||||||
|
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||||
|
github.com/jmespath/go-jmespath v0.3.0 // indirect
|
||||||
|
github.com/json-iterator/go v1.1.9 // indirect
|
||||||
|
github.com/katzenpost/core v0.0.7 // indirect
|
||||||
|
github.com/leodido/go-urn v1.2.1 // indirect
|
||||||
|
github.com/lib/pq v1.1.1 // indirect
|
||||||
|
github.com/mattn/go-colorable v0.1.4 // indirect
|
||||||
|
github.com/mattn/go-isatty v0.0.12 // indirect
|
||||||
|
github.com/mattn/go-sqlite3 v1.11.0 // indirect
|
||||||
|
github.com/mitchellh/mapstructure v1.1.2 // indirect
|
||||||
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
|
github.com/modern-go/reflect2 v1.0.1 // indirect
|
||||||
|
github.com/mozillazg/go-httpheader v0.2.1 // indirect
|
||||||
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
|
github.com/quasoft/memstore v0.0.0-20180925164028-84a050167438 // indirect
|
||||||
|
github.com/satori/go.uuid v1.2.0 // indirect
|
||||||
|
github.com/smartystreets/goconvey v1.6.4 // indirect
|
||||||
|
github.com/stretchr/objx v0.2.0 // indirect
|
||||||
|
github.com/ugorji/go/codec v1.1.7 // indirect
|
||||||
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect
|
||||||
|
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a // indirect
|
||||||
|
golang.org/x/sys v0.0.0-20211020174200-9d6173849985 // indirect
|
||||||
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c // indirect
|
||||||
|
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
||||||
gopkg.in/ini.v1 v1.51.0 // indirect
|
gopkg.in/ini.v1 v1.51.0 // indirect
|
||||||
gopkg.in/mail.v2 v2.3.1 // indirect
|
gopkg.in/mail.v2 v2.3.1 // indirect
|
||||||
|
gopkg.in/yaml.v2 v2.2.8 // indirect
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
|
||||||
)
|
)
|
||||||
|
|
23
go.sum
23
go.sum
|
@ -61,8 +61,9 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm
|
||||||
github.com/gin-contrib/static v0.0.0-20191128031702-f81c604d8ac2 h1:xLG16iua01X7Gzms9045s2Y2niNpvSY/Zb1oBwgNYZY=
|
github.com/gin-contrib/static v0.0.0-20191128031702-f81c604d8ac2 h1:xLG16iua01X7Gzms9045s2Y2niNpvSY/Zb1oBwgNYZY=
|
||||||
github.com/gin-contrib/static v0.0.0-20191128031702-f81c604d8ac2/go.mod h1:VhW/Ch/3FhimwZb8Oj+qJmdMmoB8r7lmJ5auRjm50oQ=
|
github.com/gin-contrib/static v0.0.0-20191128031702-f81c604d8ac2/go.mod h1:VhW/Ch/3FhimwZb8Oj+qJmdMmoB8r7lmJ5auRjm50oQ=
|
||||||
github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM=
|
github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM=
|
||||||
github.com/gin-gonic/gin v1.5.0 h1:fi+bqFAx/oLK54somfCtEZs9HeH1LHVoEPUgARpTqyc=
|
|
||||||
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
|
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
|
||||||
|
github.com/gin-gonic/gin v1.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU=
|
||||||
|
github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY=
|
||||||
github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
|
github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
|
||||||
github.com/go-ini/ini v1.50.0 h1:ogX6RS8VstVN8MJcwhEP78hHhWaI3klN02+97bByabY=
|
github.com/go-ini/ini v1.50.0 h1:ogX6RS8VstVN8MJcwhEP78hHhWaI3klN02+97bByabY=
|
||||||
github.com/go-ini/ini v1.50.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
|
github.com/go-ini/ini v1.50.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
|
||||||
|
@ -70,6 +71,7 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2
|
||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||||
github.com/go-mail/mail v2.3.1+incompatible h1:UzNOn0k5lpfVtO31cK3hn6I4VEVGhe3lX8AJBAxXExM=
|
github.com/go-mail/mail v2.3.1+incompatible h1:UzNOn0k5lpfVtO31cK3hn6I4VEVGhe3lX8AJBAxXExM=
|
||||||
github.com/go-mail/mail v2.3.1+incompatible/go.mod h1:VPWjmmNyRsWXQZHVHT3g0YbIINUkSmuKOiLIDkWbL6M=
|
github.com/go-mail/mail v2.3.1+incompatible/go.mod h1:VPWjmmNyRsWXQZHVHT3g0YbIINUkSmuKOiLIDkWbL6M=
|
||||||
|
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
|
||||||
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
||||||
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
|
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
|
||||||
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
|
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
|
||||||
|
@ -79,6 +81,8 @@ github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEK
|
||||||
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
|
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
|
||||||
github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
|
github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
|
||||||
github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
|
github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
|
||||||
|
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
|
||||||
|
github.com/go-playground/validator/v10 v10.8.0 h1:1kAa0fCrnpv+QYdkdcRzrRM7AyYs5o8+jZdJCz9xj6k=
|
||||||
github.com/go-playground/validator/v10 v10.8.0/go.mod h1:9JhgTzTaE31GZDpH/HSvHiRJrJ3iKAgqqH0Bl/Ocjdk=
|
github.com/go-playground/validator/v10 v10.8.0/go.mod h1:9JhgTzTaE31GZDpH/HSvHiRJrJ3iKAgqqH0Bl/Ocjdk=
|
||||||
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||||
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
|
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
|
||||||
|
@ -95,8 +99,9 @@ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb
|
||||||
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
|
|
||||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
|
github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I=
|
||||||
|
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
|
github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
|
||||||
github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
|
github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
|
||||||
|
@ -138,8 +143,9 @@ github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/
|
||||||
github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc=
|
github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc=
|
||||||
github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
|
github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
|
||||||
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||||
github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo=
|
|
||||||
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
|
github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
|
||||||
|
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
||||||
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
|
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
|
||||||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||||
|
@ -162,6 +168,7 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||||
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
|
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
|
||||||
|
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
|
||||||
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
|
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
|
||||||
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
|
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
|
||||||
github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
|
github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
|
||||||
|
@ -170,8 +177,9 @@ github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaa
|
||||||
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||||
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||||
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||||
github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg=
|
|
||||||
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
|
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
|
||||||
|
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
|
||||||
|
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||||
github.com/mattn/go-sqlite3 v1.11.0 h1:LDdKkqtYlom37fkvqs8rMPFKAMe8+SgjbwZ6ex1/A/Q=
|
github.com/mattn/go-sqlite3 v1.11.0 h1:LDdKkqtYlom37fkvqs8rMPFKAMe8+SgjbwZ6ex1/A/Q=
|
||||||
github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
|
||||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||||
|
@ -217,8 +225,6 @@ github.com/quasoft/memstore v0.0.0-20180925164028-84a050167438 h1:jnz/4VenymvySj
|
||||||
github.com/quasoft/memstore v0.0.0-20180925164028-84a050167438/go.mod h1:wTPjTepVu7uJBYgZ0SdWHQlIas582j6cn2jgk4DDdlg=
|
github.com/quasoft/memstore v0.0.0-20180925164028-84a050167438/go.mod h1:wTPjTepVu7uJBYgZ0SdWHQlIas582j6cn2jgk4DDdlg=
|
||||||
github.com/rafaeljusto/redigomock v0.0.0-20191117212112-00b2509252a1 h1:leEwA4MD1ew0lNgzz6Q4G76G3AEfeci+TMggN6WuFRs=
|
github.com/rafaeljusto/redigomock v0.0.0-20191117212112-00b2509252a1 h1:leEwA4MD1ew0lNgzz6Q4G76G3AEfeci+TMggN6WuFRs=
|
||||||
github.com/rafaeljusto/redigomock v0.0.0-20191117212112-00b2509252a1/go.mod h1:JaY6n2sDr+z2WTsXkOmNRUfDy6FN0L6Nk7x06ndm4tY=
|
github.com/rafaeljusto/redigomock v0.0.0-20191117212112-00b2509252a1/go.mod h1:JaY6n2sDr+z2WTsXkOmNRUfDy6FN0L6Nk7x06ndm4tY=
|
||||||
github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ=
|
|
||||||
github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc=
|
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
||||||
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
||||||
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||||
|
@ -260,6 +266,7 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
|
@ -305,6 +312,7 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||||
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
@ -355,8 +363,9 @@ gopkg.in/mail.v2 v2.3.1 h1:WYFn/oANrAGP2C0dcV6/pbkPzv8yGzqTjPmTeO7qoXk=
|
||||||
gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw=
|
gopkg.in/mail.v2 v2.3.1/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
|
||||||
|
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
|
4
main.go
4
main.go
|
@ -1,6 +1,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"embed"
|
||||||
"flag"
|
"flag"
|
||||||
|
|
||||||
"github.com/cloudreve/Cloudreve/v3/bootstrap"
|
"github.com/cloudreve/Cloudreve/v3/bootstrap"
|
||||||
|
@ -15,6 +16,9 @@ var (
|
||||||
scriptName string
|
scriptName string
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//go:embed assets/build
|
||||||
|
var StaticEmbed embed.FS
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
flag.StringVar(&confPath, "c", util.RelativePath("conf.ini"), "配置文件路径")
|
flag.StringVar(&confPath, "c", util.RelativePath("conf.ini"), "配置文件路径")
|
||||||
flag.BoolVar(&isEject, "eject", false, "导出内置静态资源")
|
flag.BoolVar(&isEject, "eject", false, "导出内置静态资源")
|
||||||
|
|
|
@ -56,3 +56,4 @@ func RelativePath(name string) string {
|
||||||
e, _ := os.Executable()
|
e, _ := os.Executable()
|
||||||
return filepath.Join(filepath.Dir(e), name)
|
return filepath.Join(filepath.Dir(e), name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue