go1.16 and embed
This commit is contained in:
parent
f0add04396
commit
8e7bcfc21b
37 changed files with 98 additions and 1134 deletions
13
Makefile
13
Makefile
|
|
@ -11,16 +11,16 @@ all: $(PROGRAM)
|
||||||
setup:
|
setup:
|
||||||
$(CC) get github.com/client9/misspell
|
$(CC) get github.com/client9/misspell
|
||||||
|
|
||||||
release: clean generate gofmt codeqa
|
release: clean gofmt codeqa
|
||||||
$(ENV) $(CC) $(BUILD) $(LDFLAGS)
|
$(ENV) $(CC) $(BUILD) $(LDFLAGS)
|
||||||
|
|
||||||
release-vendor: clean generate gofmt codeqa
|
release-vendor: clean gofmt codeqa
|
||||||
$(ENV) $(CC) $(BUILD) -mod=vendor $(LDFLAGS)
|
$(ENV) $(CC) $(BUILD) -mod=vendor $(LDFLAGS)
|
||||||
|
|
||||||
vendor: clean generate gofmt
|
vendor: clean gofmt
|
||||||
$(ENV) $(CC) $(BUILD) -mod=vendor $(LDFLAGS)
|
$(ENV) $(CC) $(BUILD) -mod=vendor $(LDFLAGS)
|
||||||
|
|
||||||
$(PROGRAM): clean generate gofmt
|
$(PROGRAM): clean gofmt
|
||||||
$(ENV) $(CC) $(BUILD) $(GCFLAGS) $(LDFLAGS)
|
$(ENV) $(CC) $(BUILD) $(GCFLAGS) $(LDFLAGS)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
|
@ -28,9 +28,6 @@ clean:
|
||||||
|
|
||||||
codeqa: misspell golint test
|
codeqa: misspell golint test
|
||||||
|
|
||||||
generate:
|
|
||||||
$(CC) generate
|
|
||||||
|
|
||||||
gofmt:
|
gofmt:
|
||||||
gofmt -w pkg/ main.go
|
gofmt -w pkg/ main.go
|
||||||
|
|
||||||
|
|
@ -51,4 +48,4 @@ else
|
||||||
$(info skipping tests of other platforms)
|
$(info skipping tests of other platforms)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
.PHONY: setup release release-vendor vendor build clean codeqa generate gofmt golint misspell test
|
.PHONY: setup release release-vendor vendor build clean codeqa gofmt golint misspell test
|
||||||
|
|
|
||||||
2
go.mod
2
go.mod
|
|
@ -1,6 +1,6 @@
|
||||||
module git.giftfish.de/ston1th/docstore
|
module git.giftfish.de/ston1th/docstore
|
||||||
|
|
||||||
go 1.13
|
go 1.16
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.giftfish.de/ston1th/authdav v1.1.0
|
git.giftfish.de/ston1th/authdav v1.1.0
|
||||||
|
|
|
||||||
|
|
@ -22,10 +22,7 @@ const (
|
||||||
TagsPrefix = "/tags"
|
TagsPrefix = "/tags"
|
||||||
DeletePrefix = "/delete"
|
DeletePrefix = "/delete"
|
||||||
WebDavPrefix = "/webdav"
|
WebDavPrefix = "/webdav"
|
||||||
|
StaticPrefix = "/static"
|
||||||
Favicon = "/favicon.ico"
|
|
||||||
BootstrapCSS = "/bootstrap.css"
|
|
||||||
CustomCSS = "/custom.css"
|
|
||||||
|
|
||||||
DataDir = "data"
|
DataDir = "data"
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -37,9 +37,7 @@ var reserved = []string{
|
||||||
core.MovePrefix,
|
core.MovePrefix,
|
||||||
core.DeletePrefix,
|
core.DeletePrefix,
|
||||||
core.WebDavPrefix,
|
core.WebDavPrefix,
|
||||||
core.Favicon,
|
core.StaticPrefix,
|
||||||
core.BootstrapCSS,
|
|
||||||
core.CustomCSS,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkPath(path string) error {
|
func checkPath(path string) error {
|
||||||
|
|
|
||||||
|
|
@ -97,24 +97,6 @@ func authHandler(h ctxHandler) ctxHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func staticHandler(ctx *Context) {
|
|
||||||
var err error
|
|
||||||
ctx.SetHeader("Content-Type", "text/css; charset=utf-8")
|
|
||||||
ctx.SetHeader("Expires", time.Now().UTC().Add(max).Format(http.TimeFormat))
|
|
||||||
switch ctx.Path() {
|
|
||||||
case core.BootstrapCSS:
|
|
||||||
err = ctx.Write(ctx.Srv.res["bootstrap.css"])
|
|
||||||
case core.CustomCSS:
|
|
||||||
err = ctx.Write(ctx.Srv.res["custom.css"])
|
|
||||||
case core.Favicon:
|
|
||||||
ctx.SetHeader("Content-Type", "image/x-icon")
|
|
||||||
err = ctx.Write(ctx.Srv.res["favicon.ico"])
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
log.Println("static:", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type registerNotFoundHandler struct {
|
type registerNotFoundHandler struct {
|
||||||
s *HTTPServer
|
s *HTTPServer
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,30 +10,14 @@ type route struct {
|
||||||
Methods []string
|
Methods []string
|
||||||
}
|
}
|
||||||
|
|
||||||
var static = []route{
|
var registerRoutes = []route{
|
||||||
{
|
{
|
||||||
core.Favicon,
|
|
||||||
staticHandler,
|
|
||||||
[]string{"GET"},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
core.BootstrapCSS,
|
|
||||||
staticHandler,
|
|
||||||
[]string{"GET"},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
core.CustomCSS,
|
|
||||||
staticHandler,
|
|
||||||
[]string{"GET"},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
var registerRoutes = append(static, route{
|
|
||||||
core.IndexURI,
|
core.IndexURI,
|
||||||
jwtRegisterHandler(
|
jwtRegisterHandler(
|
||||||
registerHandler),
|
registerHandler),
|
||||||
[]string{"GET", "POST"},
|
[]string{"GET", "POST"},
|
||||||
})
|
},
|
||||||
|
}
|
||||||
|
|
||||||
var prefixRoutes = []route{
|
var prefixRoutes = []route{
|
||||||
{
|
{
|
||||||
|
|
@ -94,7 +78,7 @@ var prefixRoutes = []route{
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
var routes = append(static, []route{
|
var routes = []route{
|
||||||
{
|
{
|
||||||
core.SearchURI,
|
core.SearchURI,
|
||||||
jwtHandler(
|
jwtHandler(
|
||||||
|
|
@ -177,4 +161,4 @@ var routes = append(static, []route{
|
||||||
logoutHandler),
|
logoutHandler),
|
||||||
[]string{"GET", "POST"},
|
[]string{"GET", "POST"},
|
||||||
},
|
},
|
||||||
}...)
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ package server
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
"embed"
|
||||||
"errors"
|
"errors"
|
||||||
"git.giftfish.de/ston1th/authdav"
|
"git.giftfish.de/ston1th/authdav"
|
||||||
"git.giftfish.de/ston1th/docstore/pkg/core"
|
"git.giftfish.de/ston1th/docstore/pkg/core"
|
||||||
|
|
@ -100,12 +101,16 @@ func (s *HTTPServer) Stop() error {
|
||||||
func (s *HTTPServer) register() http.Handler {
|
func (s *HTTPServer) register() http.Handler {
|
||||||
r := mux.NewRouter()
|
r := mux.NewRouter()
|
||||||
r.NotFoundHandler = ®isterNotFoundHandler{s}
|
r.NotFoundHandler = ®isterNotFoundHandler{s}
|
||||||
|
r.Handle("/static/{file}", http.StripPrefix("/", http.FileServer(http.FS(static))))
|
||||||
for _, v := range registerRoutes {
|
for _, v := range registerRoutes {
|
||||||
r.HandleFunc(v.Path, s.contextWrapper(v.Handler)).Methods(v.Methods...)
|
r.HandleFunc(v.Path, s.contextWrapper(v.Handler)).Methods(v.Methods...)
|
||||||
}
|
}
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:embed static/*
|
||||||
|
var static embed.FS
|
||||||
|
|
||||||
func (s *HTTPServer) buildRoutes() http.Handler {
|
func (s *HTTPServer) buildRoutes() http.Handler {
|
||||||
r := mux.NewRouter()
|
r := mux.NewRouter()
|
||||||
r.NotFoundHandler = ¬FoundHandler{s}
|
r.NotFoundHandler = ¬FoundHandler{s}
|
||||||
|
|
@ -115,6 +120,7 @@ func (s *HTTPServer) buildRoutes() http.Handler {
|
||||||
h := authdav.NewWebdavBasicAuth(core.WebDavPrefix, fs, nil, webdavLogger, s.DB, "DocStore WebDav")
|
h := authdav.NewWebdavBasicAuth(core.WebDavPrefix, fs, nil, webdavLogger, s.DB, "DocStore WebDav")
|
||||||
r.PathPrefix(core.WebDavPrefix).Handler(h)
|
r.PathPrefix(core.WebDavPrefix).Handler(h)
|
||||||
}
|
}
|
||||||
|
r.Handle("/static/{file}", http.StripPrefix("/", http.FileServer(http.FS(static))))
|
||||||
for _, v := range routes {
|
for _, v := range routes {
|
||||||
r.HandleFunc(v.Path, s.contextWrapper(v.Handler)).Methods(v.Methods...)
|
r.HandleFunc(v.Path, s.contextWrapper(v.Handler)).Methods(v.Methods...)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
File diff suppressed because one or more lines are too long
|
|
@ -2,9 +2,9 @@
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<title>DocStore | {{.Title}}</title>
|
<title>DocStore | {{.Title}}</title>
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" integrity="sha256-bgotk/IPq4Yvt6s8AQGPTM5ZjPjQ6rrBRa2EyxpnFSc="></link>
|
<link rel="shortcut icon" type="image/x-icon" href="/static/favicon.ico" integrity="sha256-bgotk/IPq4Yvt6s8AQGPTM5ZjPjQ6rrBRa2EyxpnFSc="></link>
|
||||||
<link rel="stylesheet" type="text/css" href="/bootstrap.css" media="screen" integrity="sha256-3YeveuySvBgp2GItUS8eV1R/9T1zcPMyvw22SyVf8qo="></link>
|
<link rel="stylesheet" type="text/css" href="/static/bootstrap.css" media="screen" integrity="sha256-3YeveuySvBgp2GItUS8eV1R/9T1zcPMyvw22SyVf8qo="></link>
|
||||||
<link rel="stylesheet" type="text/css" href="/custom.css" media="screen" integrity="sha256-wLiyjr/D8ZaaIPLjUmZ3zdm45/HW/cy4kCVTViwkPeI="></link>
|
<link rel="stylesheet" type="text/css" href="/static/custom.css" media="screen" integrity="sha256-wLiyjr/D8ZaaIPLjUmZ3zdm45/HW/cy4kCVTViwkPeI="></link>
|
||||||
<meta name="theme-color" content="#375a7f">
|
<meta name="theme-color" content="#375a7f">
|
||||||
<meta name="description" content="{{.Title}}">
|
<meta name="description" content="{{.Title}}">
|
||||||
</head>
|
</head>
|
||||||
113
templates.sh
113
templates.sh
|
|
@ -1,113 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# Copyright (C) 2019 Marius Schellenberger
|
|
||||||
|
|
||||||
# this file generates Go source code for the gowiki
|
|
||||||
# it contains html and css and uses the contents
|
|
||||||
# of the templates directory
|
|
||||||
|
|
||||||
templates_go="pkg/server/templates.go"
|
|
||||||
echo "Generating ${templates_go}"
|
|
||||||
|
|
||||||
if [ ! -d templates ]; then
|
|
||||||
echo "error: templates directory not found" 1>&2
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat << EOF > ${templates_go}
|
|
||||||
// Copyright (C) 2019 Marius Schellenberger
|
|
||||||
|
|
||||||
// This file is auto-generated by templates.sh
|
|
||||||
// using the contents of the templates directory
|
|
||||||
|
|
||||||
package server
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/base64"
|
|
||||||
"errors"
|
|
||||||
"git.giftfish.de/ston1th/docstore/pkg/log"
|
|
||||||
"html/template"
|
|
||||||
)
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
echo "const (" >> ${templates_go}
|
|
||||||
|
|
||||||
for f in $(ls templates/*.html); do
|
|
||||||
fname=${f/templates\//}
|
|
||||||
fname=${fname/.html/}
|
|
||||||
echo " ${fname} = \`$(cat ${f})\`" >> ${templates_go}
|
|
||||||
done
|
|
||||||
|
|
||||||
for f in $(ls templates/*.css); do
|
|
||||||
fname=${f/templates\//}
|
|
||||||
fname=${fname/.css/CSS}
|
|
||||||
echo " ${fname} = \`$(cat ${f})\`" >> ${templates_go}
|
|
||||||
done
|
|
||||||
|
|
||||||
echo " favicon = \"$(base64 -w 0 templates/favicon.ico)\"" >> ${templates_go}
|
|
||||||
|
|
||||||
cat << EOF >> ${templates_go}
|
|
||||||
)
|
|
||||||
|
|
||||||
func (s *HTTPServer) loadTemplates() {
|
|
||||||
var fatal bool
|
|
||||||
s.templ = make(map[string]*template.Template)
|
|
||||||
s.res = make(map[string][]byte)
|
|
||||||
parse := func(html ...string) (temp *template.Template) {
|
|
||||||
var err error
|
|
||||||
temp = template.New("")
|
|
||||||
for _, s := range html {
|
|
||||||
temp, err = temp.Parse(s)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("parse:", err)
|
|
||||||
fatal = true
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// resources
|
|
||||||
s.res["bootstrap.css"] = []byte(bootstrapCSS)
|
|
||||||
s.res["custom.css"] = []byte(customCSS)
|
|
||||||
fav, err := base64.StdEncoding.DecodeString(favicon)
|
|
||||||
if err != nil {
|
|
||||||
log.Println("favicon:", err)
|
|
||||||
fatal = true
|
|
||||||
}
|
|
||||||
s.res["favicon.ico"] = fav
|
|
||||||
|
|
||||||
// register
|
|
||||||
s.templ["registerHandler"] = parse(index, menu, register)
|
|
||||||
|
|
||||||
s.templ["dirHandler"] = parse(index, menu, dir)
|
|
||||||
s.templ["fileHandler"] = parse(index, menu, file)
|
|
||||||
s.templ["uploadHandler"] = parse(index, menu, upload)
|
|
||||||
s.templ["newDirHandler"] = parse(index, menu, newDir)
|
|
||||||
s.templ["moveHandler"] = parse(index, menu, move)
|
|
||||||
s.templ["enoentHandler"] = parse(index, menu, enoent)
|
|
||||||
s.templ["deleteHandler"] = parse(index, menu, delete)
|
|
||||||
s.templ["notFoundHandler"] = parse(index, menu, notFound)
|
|
||||||
s.templ["forbiddenHandler"] = parse(index, menu, forbidden)
|
|
||||||
s.templ["iseHandler"] = parse(index, menu, ise)
|
|
||||||
s.templ["loginHandler"] = parse(index, menu, login)
|
|
||||||
s.templ["loginTotpHandler"] = parse(index, menu, loginTotp)
|
|
||||||
s.templ["searchHandler"] = parse(index, menu, search)
|
|
||||||
s.templ["userEditHandler"] = parse(index, menu, userEdit)
|
|
||||||
// totp
|
|
||||||
s.templ["userTotpHandler"] = parse(index, menu, userTotp)
|
|
||||||
// tags
|
|
||||||
s.templ["tagsHandler"] = parse(index, menu, tagsList)
|
|
||||||
s.templ["tagsNewHandler"] = parse(index, menu, tagsNew)
|
|
||||||
s.templ["tagsEditHandler"] = parse(index, menu, tagsEdit)
|
|
||||||
s.templ["tagsDelHandler"] = parse(index, menu, tagsDel)
|
|
||||||
// stats
|
|
||||||
s.templ["statsHandler"] = parse(index, menu, stats)
|
|
||||||
// logs
|
|
||||||
s.templ["logsHandler"] = parse(index, menu, logs)
|
|
||||||
|
|
||||||
if fatal {
|
|
||||||
log.Fatal("parse: ", errors.New("parsing templates failed"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
39
vendor/modules.txt
vendored
39
vendor/modules.txt
vendored
|
|
@ -1,14 +1,20 @@
|
||||||
# git.giftfish.de/ston1th/authdav v1.1.0
|
# git.giftfish.de/ston1th/authdav v1.1.0
|
||||||
|
## explicit
|
||||||
git.giftfish.de/ston1th/authdav
|
git.giftfish.de/ston1th/authdav
|
||||||
# git.giftfish.de/ston1th/godrop/v2 v2.1.0
|
# git.giftfish.de/ston1th/godrop/v2 v2.1.0
|
||||||
|
## explicit
|
||||||
git.giftfish.de/ston1th/godrop/v2
|
git.giftfish.de/ston1th/godrop/v2
|
||||||
# git.giftfish.de/ston1th/jwt/v3 v3.2.0
|
# git.giftfish.de/ston1th/jwt/v3 v3.2.0
|
||||||
|
## explicit
|
||||||
git.giftfish.de/ston1th/jwt/v3
|
git.giftfish.de/ston1th/jwt/v3
|
||||||
# github.com/RoaringBitmap/roaring v0.5.5
|
# github.com/RoaringBitmap/roaring v0.5.5
|
||||||
|
## explicit
|
||||||
github.com/RoaringBitmap/roaring
|
github.com/RoaringBitmap/roaring
|
||||||
# github.com/bcampbell/qs v0.0.0-20161004022730-15caa99abd01
|
# github.com/bcampbell/qs v0.0.0-20161004022730-15caa99abd01
|
||||||
|
## explicit
|
||||||
github.com/bcampbell/qs
|
github.com/bcampbell/qs
|
||||||
# github.com/blevesearch/bleve v1.0.12
|
# github.com/blevesearch/bleve v1.0.12
|
||||||
|
## explicit
|
||||||
github.com/blevesearch/bleve
|
github.com/blevesearch/bleve
|
||||||
github.com/blevesearch/bleve/analysis
|
github.com/blevesearch/bleve/analysis
|
||||||
github.com/blevesearch/bleve/analysis/analyzer/custom
|
github.com/blevesearch/bleve/analysis/analyzer/custom
|
||||||
|
|
@ -75,46 +81,79 @@ github.com/couchbase/vellum/levenshtein
|
||||||
github.com/couchbase/vellum/regexp
|
github.com/couchbase/vellum/regexp
|
||||||
github.com/couchbase/vellum/utf8
|
github.com/couchbase/vellum/utf8
|
||||||
# github.com/cpuguy83/go-md2man/v2 v2.0.0
|
# github.com/cpuguy83/go-md2man/v2 v2.0.0
|
||||||
|
## explicit
|
||||||
github.com/cpuguy83/go-md2man/v2/md2man
|
github.com/cpuguy83/go-md2man/v2/md2man
|
||||||
|
# github.com/cznic/b v0.0.0-20181122101859-a26611c4d92d
|
||||||
|
## explicit
|
||||||
|
# github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548
|
||||||
|
## explicit
|
||||||
|
# github.com/cznic/strutil v0.0.0-20181122101858-275e90344537
|
||||||
|
## explicit
|
||||||
|
# github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51
|
||||||
|
## explicit
|
||||||
|
# github.com/facebookgo/stack v0.0.0-20160209184415-751773369052
|
||||||
|
## explicit
|
||||||
|
# github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870
|
||||||
|
## explicit
|
||||||
# github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a
|
# github.com/glycerine/go-unsnap-stream v0.0.0-20190901134440-81cf024a9e0a
|
||||||
|
## explicit
|
||||||
github.com/glycerine/go-unsnap-stream
|
github.com/glycerine/go-unsnap-stream
|
||||||
# github.com/golang/protobuf v1.4.3
|
# github.com/golang/protobuf v1.4.3
|
||||||
|
## explicit
|
||||||
github.com/golang/protobuf/proto
|
github.com/golang/protobuf/proto
|
||||||
# github.com/golang/snappy v0.0.2
|
# github.com/golang/snappy v0.0.2
|
||||||
|
## explicit
|
||||||
github.com/golang/snappy
|
github.com/golang/snappy
|
||||||
# github.com/gorilla/mux v1.8.0
|
# github.com/gorilla/mux v1.8.0
|
||||||
|
## explicit
|
||||||
github.com/gorilla/mux
|
github.com/gorilla/mux
|
||||||
|
# github.com/jmhodges/levigo v1.0.0
|
||||||
|
## explicit
|
||||||
# github.com/mschoch/smat v0.2.0
|
# github.com/mschoch/smat v0.2.0
|
||||||
github.com/mschoch/smat
|
github.com/mschoch/smat
|
||||||
# github.com/philhofer/fwd v1.1.0
|
# github.com/philhofer/fwd v1.1.0
|
||||||
github.com/philhofer/fwd
|
github.com/philhofer/fwd
|
||||||
# github.com/pquerna/otp v1.3.0
|
# github.com/pquerna/otp v1.3.0
|
||||||
|
## explicit
|
||||||
github.com/pquerna/otp
|
github.com/pquerna/otp
|
||||||
github.com/pquerna/otp/hotp
|
github.com/pquerna/otp/hotp
|
||||||
github.com/pquerna/otp/totp
|
github.com/pquerna/otp/totp
|
||||||
|
# github.com/remyoudompheng/bigfft v0.0.0-20190321074620-2f0d2b0e0001
|
||||||
|
## explicit
|
||||||
# github.com/russross/blackfriday/v2 v2.1.0
|
# github.com/russross/blackfriday/v2 v2.1.0
|
||||||
|
## explicit
|
||||||
github.com/russross/blackfriday/v2
|
github.com/russross/blackfriday/v2
|
||||||
# github.com/steveyen/gtreap v0.1.0
|
# github.com/steveyen/gtreap v0.1.0
|
||||||
github.com/steveyen/gtreap
|
github.com/steveyen/gtreap
|
||||||
|
# github.com/tecbot/gorocksdb v0.0.0-20181010114359-8752a9433481
|
||||||
|
## explicit
|
||||||
# github.com/tinylib/msgp v1.1.4
|
# github.com/tinylib/msgp v1.1.4
|
||||||
|
## explicit
|
||||||
github.com/tinylib/msgp/msgp
|
github.com/tinylib/msgp/msgp
|
||||||
# github.com/urfave/cli v1.22.5
|
# github.com/urfave/cli v1.22.5
|
||||||
|
## explicit
|
||||||
github.com/urfave/cli
|
github.com/urfave/cli
|
||||||
# github.com/willf/bitset v1.1.11
|
# github.com/willf/bitset v1.1.11
|
||||||
|
## explicit
|
||||||
github.com/willf/bitset
|
github.com/willf/bitset
|
||||||
# go.etcd.io/bbolt v1.3.5
|
# go.etcd.io/bbolt v1.3.5
|
||||||
|
## explicit
|
||||||
go.etcd.io/bbolt
|
go.etcd.io/bbolt
|
||||||
# golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9
|
# golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9
|
||||||
|
## explicit
|
||||||
golang.org/x/crypto/bcrypt
|
golang.org/x/crypto/bcrypt
|
||||||
golang.org/x/crypto/blowfish
|
golang.org/x/crypto/blowfish
|
||||||
# golang.org/x/net v0.0.0-20201110031124-69a78807bb2b
|
# golang.org/x/net v0.0.0-20201110031124-69a78807bb2b
|
||||||
|
## explicit
|
||||||
golang.org/x/net/webdav
|
golang.org/x/net/webdav
|
||||||
golang.org/x/net/webdav/internal/xml
|
golang.org/x/net/webdav/internal/xml
|
||||||
# golang.org/x/sys v0.0.0-20201112073958-5cba982894dd
|
# golang.org/x/sys v0.0.0-20201112073958-5cba982894dd
|
||||||
|
## explicit
|
||||||
golang.org/x/sys/internal/unsafeheader
|
golang.org/x/sys/internal/unsafeheader
|
||||||
golang.org/x/sys/unix
|
golang.org/x/sys/unix
|
||||||
golang.org/x/sys/windows
|
golang.org/x/sys/windows
|
||||||
# google.golang.org/protobuf v1.25.0
|
# google.golang.org/protobuf v1.25.0
|
||||||
|
## explicit
|
||||||
google.golang.org/protobuf/encoding/prototext
|
google.golang.org/protobuf/encoding/prototext
|
||||||
google.golang.org/protobuf/encoding/protowire
|
google.golang.org/protobuf/encoding/protowire
|
||||||
google.golang.org/protobuf/internal/descfmt
|
google.golang.org/protobuf/internal/descfmt
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue