serve: refactor VFS and proxy handling into Provider
This commit is contained in:
committed by
Nick Craig-Wood
parent
a1f98b49df
commit
f425f8d466
+16
-15
@@ -35,11 +35,10 @@ type Server struct {
|
||||
server *httplib.Server
|
||||
opt Options
|
||||
f fs.Fs
|
||||
_vfs *vfs.VFS // don't use directly, use getVFS
|
||||
provider *proxy.Provider
|
||||
faker *gofakes3.GoFakeS3
|
||||
backend *s3Backend
|
||||
handler http.Handler
|
||||
proxy *proxy.Proxy
|
||||
ctx context.Context // for global config
|
||||
s3Secret string
|
||||
etagHashType hash.Type
|
||||
@@ -51,8 +50,14 @@ func newServer(ctx context.Context, f fs.Fs, opt *Options, vfsOpt *vfscommon.Opt
|
||||
f: f,
|
||||
ctx: ctx,
|
||||
opt: *opt,
|
||||
provider: proxy.NewProvider(ctx, f, vfsOpt, proxyOpt),
|
||||
etagHashType: hash.None,
|
||||
}
|
||||
defer func() {
|
||||
if err != nil {
|
||||
w.provider.Shutdown()
|
||||
}
|
||||
}()
|
||||
|
||||
if w.opt.EtagHash == "auto" {
|
||||
w.etagHashType = f.Hashes().GetOne()
|
||||
@@ -95,17 +100,12 @@ func newServer(ctx context.Context, f fs.Fs, opt *Options, vfsOpt *vfscommon.Opt
|
||||
|
||||
w.handler = w.faker.Server()
|
||||
|
||||
if proxy.Opt.AuthProxy != "" {
|
||||
w.proxy = proxy.New(ctx, proxyOpt, vfsOpt)
|
||||
if w.provider.IsProxy() {
|
||||
// proxy auth middleware
|
||||
w.handler = proxyAuthMiddleware(w.handler, w)
|
||||
w.handler = authPairMiddleware(w.handler, w)
|
||||
} else {
|
||||
w._vfs = vfs.New(ctx, f, vfsOpt)
|
||||
|
||||
if len(opt.AuthKey) > 0 {
|
||||
w.faker.AddAuthKeys(authList)
|
||||
}
|
||||
} else if len(opt.AuthKey) > 0 {
|
||||
w.faker.AddAuthKeys(authList)
|
||||
}
|
||||
|
||||
w.server, err = httplib.NewServer(ctx,
|
||||
@@ -123,8 +123,8 @@ func newServer(ctx context.Context, f fs.Fs, opt *Options, vfsOpt *vfscommon.Opt
|
||||
}
|
||||
|
||||
func (w *Server) getVFS(ctx context.Context) (VFS *vfs.VFS, err error) {
|
||||
if w._vfs != nil {
|
||||
return w._vfs, nil
|
||||
if w.provider.VFS() != nil {
|
||||
return w.provider.VFS(), nil
|
||||
}
|
||||
|
||||
value := ctx.Value(ctxKeyID)
|
||||
@@ -141,7 +141,7 @@ func (w *Server) getVFS(ctx context.Context) (VFS *vfs.VFS, err error) {
|
||||
|
||||
// auth does proxy authorization
|
||||
func (w *Server) auth(r *http.Request, accessKeyID string) (value any, err error) {
|
||||
VFS, _, err := w.proxy.Call(stringToMd5Hash(accessKeyID), accessKeyID, false, r.RemoteAddr)
|
||||
VFS, _, err := w.provider.Proxy().Call(stringToMd5Hash(accessKeyID), accessKeyID, false, r.RemoteAddr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -168,8 +168,9 @@ func (w *Server) Addr() net.Addr {
|
||||
|
||||
// Shutdown the server
|
||||
func (w *Server) Shutdown() error {
|
||||
w.backend.stopReaper()
|
||||
return w.server.Shutdown()
|
||||
err := w.server.Shutdown()
|
||||
w.provider.Shutdown()
|
||||
return err
|
||||
}
|
||||
|
||||
func authPairMiddleware(next http.Handler, ws *Server) http.Handler {
|
||||
|
||||
Reference in New Issue
Block a user