https://tus.github.io/tusd/advanced-topics/usage-package/
(e *echo.Echo, uploadEndpoints map[string]echo.MiddlewareFunc)
| 241 | |
| 242 | // https://tus.github.io/tusd/advanced-topics/usage-package/ |
| 243 | func addTusHandlers(e *echo.Echo, uploadEndpoints map[string]echo.MiddlewareFunc) error { |
| 244 | uploadsPath := storage.GetUploadsPath() |
| 245 | store := filestore.New(uploadsPath) |
| 246 | locker := filelocker.New(uploadsPath) |
| 247 | composer := tusd.NewStoreComposer() |
| 248 | store.UseIn(composer) |
| 249 | locker.UseIn(composer) |
| 250 | logger := xzerolog.NewHandler(&log.Logger) |
| 251 | handler, err := tusd.NewUnroutedHandler(tusd.Config{ |
| 252 | BasePath: "/files/", |
| 253 | StoreComposer: composer, |
| 254 | NotifyCompleteUploads: true, |
| 255 | UseRelativeUrls: true, |
| 256 | Logger: log3.New(logger), |
| 257 | }) |
| 258 | go func() { |
| 259 | for { |
| 260 | event := <-handler.CompleteUploads |
| 261 | storage.Uploads.Add(event.Upload.ID) |
| 262 | } |
| 263 | }() |
| 264 | if err != nil { |
| 265 | return err |
| 266 | } |
| 267 | tusMiddleware := echo.WrapMiddleware(handler.Middleware) |
| 268 | stripMiddleware := echo.WrapMiddleware(func(h http.Handler) http.Handler { |
| 269 | return http.StripPrefix("/files/", h) |
| 270 | }) |
| 271 | for prefix, authMiddleware := range uploadEndpoints { |
| 272 | // middlewares run in order, make sure auth goes first! |
| 273 | e.POST(prefix, func(c echo.Context) error { |
| 274 | handler.PostFile(c.Response().Writer, c.Request()) |
| 275 | return nil |
| 276 | }, authMiddleware, tusMiddleware) |
| 277 | } |
| 278 | e.HEAD("/files/:file_id", func(c echo.Context) error { |
| 279 | handler.HeadFile(c.Response().Writer, c.Request()) |
| 280 | return nil |
| 281 | }, stripMiddleware, tusMiddleware) |
| 282 | e.PATCH("/files/:file_id", func(c echo.Context) error { |
| 283 | handler.PatchFile(c.Response().Writer, c.Request()) |
| 284 | return nil |
| 285 | }, stripMiddleware, tusMiddleware) |
| 286 | return nil |
| 287 | } |
| 288 | |
| 289 | func getTweaks(c echo.Context, app storage.App) error { |
| 290 | tweaks, err := app.ReadDir(storage.TweaksDir) |
no test coverage detected