2019-06-11 16:23:20 +00:00
|
|
|
package handler
|
2015-02-01 13:57:57 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"net/http"
|
|
|
|
|
|
|
|
"github.com/bmizerany/pat"
|
|
|
|
)
|
|
|
|
|
2015-11-29 01:33:55 +00:00
|
|
|
// Handler is a ready to use handler with routing (using pat)
|
2015-02-01 13:57:57 +00:00
|
|
|
type Handler struct {
|
2016-03-12 21:01:12 +00:00
|
|
|
*UnroutedHandler
|
|
|
|
http.Handler
|
2015-02-01 13:57:57 +00:00
|
|
|
}
|
|
|
|
|
2015-11-29 01:33:55 +00:00
|
|
|
// NewHandler creates a routed tus protocol handler. This is the simplest
|
|
|
|
// way to use tusd but may not be as configurable as you require. If you are
|
2015-12-07 21:26:35 +00:00
|
|
|
// integrating this into an existing app you may like to use tusd.NewUnroutedHandler
|
2015-12-07 20:09:47 +00:00
|
|
|
// instead. Using tusd.NewUnroutedHandler allows the tus handlers to be combined into
|
2015-11-29 01:33:55 +00:00
|
|
|
// your existing router (aka mux) directly. It also allows the GET and DELETE
|
|
|
|
// endpoints to be customized. These are not part of the protocol so can be
|
|
|
|
// changed depending on your needs.
|
2015-02-01 13:57:57 +00:00
|
|
|
func NewHandler(config Config) (*Handler, error) {
|
2016-02-21 22:25:35 +00:00
|
|
|
if err := config.validate(); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
2015-11-29 01:33:55 +00:00
|
|
|
handler, err := NewUnroutedHandler(config)
|
2015-02-01 13:57:57 +00:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
2015-11-29 01:33:55 +00:00
|
|
|
routedHandler := &Handler{
|
2016-03-12 21:01:12 +00:00
|
|
|
UnroutedHandler: handler,
|
2015-02-01 13:57:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
mux := pat.New()
|
|
|
|
|
2016-03-12 21:01:12 +00:00
|
|
|
routedHandler.Handler = handler.Middleware(mux)
|
2015-02-17 13:19:56 +00:00
|
|
|
|
2015-11-29 01:33:55 +00:00
|
|
|
mux.Post("", http.HandlerFunc(handler.PostFile))
|
|
|
|
mux.Head(":id", http.HandlerFunc(handler.HeadFile))
|
|
|
|
mux.Add("PATCH", ":id", http.HandlerFunc(handler.PatchFile))
|
2019-08-24 13:14:51 +00:00
|
|
|
mux.Get(":id", http.HandlerFunc(handler.GetFile))
|
2015-03-08 00:06:39 +00:00
|
|
|
|
2015-12-26 23:44:02 +00:00
|
|
|
// Only attach the DELETE handler if the Terminate() method is provided
|
2016-02-21 22:25:35 +00:00
|
|
|
if config.StoreComposer.UsesTerminater {
|
2015-12-26 23:44:02 +00:00
|
|
|
mux.Del(":id", http.HandlerFunc(handler.DelFile))
|
|
|
|
}
|
|
|
|
|
2021-11-15 21:46:07 +00:00
|
|
|
if config.EnableTusV2 {
|
|
|
|
mux.Head("", http.HandlerFunc(handler.HeadFile))
|
|
|
|
|
|
|
|
// Only attach the DELETE handler if the Terminate() method is provided
|
|
|
|
if config.StoreComposer.UsesTerminater {
|
|
|
|
mux.Del("", http.HandlerFunc(handler.DelFile))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-11-29 01:33:55 +00:00
|
|
|
return routedHandler, nil
|
2015-02-01 13:57:57 +00:00
|
|
|
}
|