diff --git a/fakestorage/server.go b/fakestorage/server.go index 230eb847fc..e64e58586a 100644 --- a/fakestorage/server.go +++ b/fakestorage/server.go @@ -289,6 +289,7 @@ func (s *Server) buildMuxer() { handler.Path("/_internal/config").Methods(http.MethodPut).HandlerFunc(jsonToHTTPHandler(s.updateServerConfig)) handler.MatcherFunc(s.publicHostMatcher).Path("/_internal/config").Methods(http.MethodPut).HandlerFunc(jsonToHTTPHandler(s.updateServerConfig)) handler.Path("/_internal/reseed").Methods(http.MethodPut, http.MethodPost).HandlerFunc(jsonToHTTPHandler(s.reseedServer)) + handler.Path("/_internal/delete_all").Methods(http.MethodPost).HandlerFunc(jsonToHTTPHandler(s.deleteAllFiles)) // Internal - end // XML API @@ -367,6 +368,20 @@ func (s *Server) reseedServer(r *http.Request) jsonResponse { return jsonResponse{data: fromBackendObjects(backendObjects)} } +func (s *Server) deleteAllFiles(r *http.Request) jsonResponse { + if err := s.backend.DeleteAllFiles(); err != nil { + return jsonResponse{ + status: http.StatusInternalServerError, + errorMessage: err.Error(), + } + } + + return jsonResponse{ + status: http.StatusOK, + data: map[string]string{"message": "All files deleted successfully"}, + } +} + func generateObjectsFromFiles(folder string) ([]Object, []string) { var objects []Object var emptyBuckets []string diff --git a/internal/backend/fs.go b/internal/backend/fs.go index b372ab8402..52cbcd1859 100644 --- a/internal/backend/fs.go +++ b/internal/backend/fs.go @@ -469,3 +469,12 @@ func (s *storageFS) ComposeObject(bucketName string, objectNames []string, desti return result, nil } + +func (s *storageFS) DeleteAllFiles() error { + s.mtx.Lock() + defer s.mtx.Unlock() + if err := os.RemoveAll(s.rootDir); err != nil { + return err + } + return os.MkdirAll(s.rootDir, 0o700) +} diff --git a/internal/backend/memory.go b/internal/backend/memory.go index 2e95eb3ed5..f202ff3694 100644 --- a/internal/backend/memory.go +++ b/internal/backend/memory.go @@ -392,3 +392,10 @@ func (s *storageMemory) ComposeObject(bucketName string, objectNames []string, d return result, nil } + +func (s *storageMemory) DeleteAllFiles() error { + s.mtx.Lock() + defer s.mtx.Unlock() + s.buckets = make(map[string]bucketInMemory) + return nil +} diff --git a/internal/backend/storage.go b/internal/backend/storage.go index da8e8e51e2..fd382ae983 100644 --- a/internal/backend/storage.go +++ b/internal/backend/storage.go @@ -31,6 +31,7 @@ type Storage interface { PatchObject(bucketName, objectName string, attrsToUpdate ObjectAttrs) (StreamingObject, error) UpdateObject(bucketName, objectName string, attrsToUpdate ObjectAttrs) (StreamingObject, error) ComposeObject(bucketName string, objectNames []string, destinationName string, metadata map[string]string, contentType string) (StreamingObject, error) + DeleteAllFiles() error } type Error string