mirror of
https://github.com/hacdias/webdav.git
synced 2026-09-22 03:20:41 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
505a10a63d | ||
|
|
61462c1da7 | ||
|
|
21ec95a8db | ||
|
|
8bf2c4eea3 | ||
|
|
4199ffc190 | ||
|
|
7a67f76947 | ||
|
|
088958913c | ||
|
|
3e7b39679b | ||
|
|
d95c1ec13b |
@@ -0,0 +1,42 @@
|
|||||||
|
version: 2
|
||||||
|
jobs:
|
||||||
|
lint:
|
||||||
|
docker:
|
||||||
|
- image: golangci/golangci-lint:v1.16
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run: golangci-lint run -v
|
||||||
|
build:
|
||||||
|
docker:
|
||||||
|
- image: circleci/golang:1.12
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run: cd cmd/webdav && go build main.go
|
||||||
|
release:
|
||||||
|
docker:
|
||||||
|
- image: circleci/golang:1.12
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run: curl -sL https://git.io/goreleaser | bash
|
||||||
|
workflows:
|
||||||
|
version: 2
|
||||||
|
build-workflow:
|
||||||
|
jobs:
|
||||||
|
- lint:
|
||||||
|
filters:
|
||||||
|
tags:
|
||||||
|
only: /.*/
|
||||||
|
- build:
|
||||||
|
filters:
|
||||||
|
tags:
|
||||||
|
only: /.*/
|
||||||
|
- release:
|
||||||
|
context: deploy
|
||||||
|
requires:
|
||||||
|
- build
|
||||||
|
- lint
|
||||||
|
filters:
|
||||||
|
tags:
|
||||||
|
only: /^v.*/
|
||||||
|
branches:
|
||||||
|
ignore: /.*/
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
config.yaml
|
|
||||||
config.yml
|
|
||||||
config.json
|
|
||||||
-19
@@ -1,19 +0,0 @@
|
|||||||
language: go
|
|
||||||
|
|
||||||
go: 1.10.x
|
|
||||||
|
|
||||||
env:
|
|
||||||
- "PATH=/home/travis/gopath/bin:$PATH"
|
|
||||||
|
|
||||||
install:
|
|
||||||
- go get ./...
|
|
||||||
# Install gometalinter and certain linters
|
|
||||||
- go get github.com/alecthomas/gometalinter
|
|
||||||
- gometalinter --install
|
|
||||||
|
|
||||||
script:
|
|
||||||
- gometalinter --disable-all -E vet -E gofmt -E misspell -E ineffassign -E goimports -E deadcode --tests ./...
|
|
||||||
- go test ./... -timeout 30s
|
|
||||||
|
|
||||||
after_success:
|
|
||||||
- test -n "$TRAVIS_TAG" && curl -sL https://git.io/goreleaser | bash
|
|
||||||
+25
-1
@@ -77,11 +77,35 @@ func parseUsers(raw []map[string]interface{}, c *cfg) {
|
|||||||
log.Fatal("user needs an username")
|
log.Fatal("user needs an username")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// load username from environment when prefix {env} is added
|
||||||
|
if strings.HasPrefix(username, "{env}") {
|
||||||
|
var envUsername = strings.TrimPrefix(username, "{env}")
|
||||||
|
if envUsername == "" {
|
||||||
|
log.Fatal("no environment variable specified for username")
|
||||||
|
}
|
||||||
|
username = os.Getenv(envUsername)
|
||||||
|
if username == "" {
|
||||||
|
log.Fatal("username must be set in environment")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
password, ok := r["password"].(string)
|
password, ok := r["password"].(string)
|
||||||
if !ok {
|
if !ok {
|
||||||
log.Fatal("user needs a password")
|
log.Fatal("user needs a password")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// load password from environment when prefix {env} is added
|
||||||
|
if strings.HasPrefix(password, "{env}") {
|
||||||
|
var envPassword = strings.TrimPrefix(password, "{env}")
|
||||||
|
if envPassword == "" {
|
||||||
|
log.Fatal("no environment variable specified for password")
|
||||||
|
}
|
||||||
|
password = os.Getenv(envPassword)
|
||||||
|
if password == "" {
|
||||||
|
log.Fatal("password must be set in environment")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
c.auth[username] = password
|
c.auth[username] = password
|
||||||
|
|
||||||
user := &webdav.User{
|
user := &webdav.User{
|
||||||
@@ -216,7 +240,7 @@ func basicAuth(c *cfg) http.Handler {
|
|||||||
w.Header().Set("WWW-Authenticate", `Basic realm="Restricted"`)
|
w.Header().Set("WWW-Authenticate", `Basic realm="Restricted"`)
|
||||||
|
|
||||||
username, password, authOK := r.BasicAuth()
|
username, password, authOK := r.BasicAuth()
|
||||||
if authOK == false {
|
if !authOK {
|
||||||
http.Error(w, "Not authorized", 401)
|
http.Error(w, "Not authorized", 401)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
module github.com/hacdias/webdav
|
||||||
|
|
||||||
|
go 1.12
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/kr/pretty v0.1.0 // indirect
|
||||||
|
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529
|
||||||
|
golang.org/x/net v0.0.0-20190509222800-a4d6f7feada5
|
||||||
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
|
||||||
|
gopkg.in/yaml.v2 v2.2.2
|
||||||
|
)
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||||
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
|
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||||
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
|
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529 h1:iMGN4xG0cnqj3t+zOM8wUB0BiPKHEwSxEZCvzcbZuvk=
|
||||||
|
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
|
golang.org/x/net v0.0.0-20190509222800-a4d6f7feada5 h1:6M3SDHlHHDCx2PcQw3S4KsR170vGqDhJDOmpVd4Hjak=
|
||||||
|
golang.org/x/net v0.0.0-20190509222800-a4d6f7feada5/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||||
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
@@ -17,6 +17,8 @@ users:
|
|||||||
password: admin
|
password: admin
|
||||||
- username: encrypted
|
- username: encrypted
|
||||||
password: "{bcrypt}$2y$10$zEP6oofmXFeHaeMfBNLnP.DO8m.H.Mwhd24/TOX2MWLxAExXi4qgi"
|
password: "{bcrypt}$2y$10$zEP6oofmXFeHaeMfBNLnP.DO8m.H.Mwhd24/TOX2MWLxAExXi4qgi"
|
||||||
|
- username: "{env}ENV_USERNAME"
|
||||||
|
password: "{env}ENV_PASSWORD"
|
||||||
- username: basic
|
- username: basic
|
||||||
password: basic
|
password: basic
|
||||||
modify: false
|
modify: false
|
||||||
|
|||||||
@@ -57,6 +57,10 @@ func (c *Config) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
info, err := u.Handler.FileSystem.Stat(context.TODO(), r.URL.Path)
|
info, err := u.Handler.FileSystem.Stat(context.TODO(), r.URL.Path)
|
||||||
if err == nil && info.IsDir() {
|
if err == nil && info.IsDir() {
|
||||||
r.Method = "PROPFIND"
|
r.Method = "PROPFIND"
|
||||||
|
|
||||||
|
if r.Header.Get("Depth") == "" {
|
||||||
|
r.Header.Add("Depth", "1")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user