mirror of
https://github.com/crawlab-team/crawlab.git
synced 2026-01-21 17:21:09 +01:00
- Updated multiple controller methods to return VoidResponse instead of generic Response[any]. - Consolidated error handling to utilize GetErrorVoidResponse for consistent error responses. - Enhanced parameter handling in export and file management functions for improved clarity and maintainability. - Refactored health check and login/logout methods to align with new response structure. - Improved overall consistency in response formatting across various endpoints.
224 lines
4.9 KiB
Go
224 lines
4.9 KiB
Go
package controllers
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"mime/multipart"
|
|
"os"
|
|
"sync"
|
|
|
|
"github.com/crawlab-team/crawlab/core/fs"
|
|
"github.com/crawlab-team/crawlab/core/interfaces"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func GetBaseFileListDir(rootPath, path string) (response *Response[[]interfaces.FsFileInfo], err error) {
|
|
fsSvc, err := fs.GetBaseFileFsSvc(rootPath)
|
|
if err != nil {
|
|
return GetErrorResponse[[]interfaces.FsFileInfo](err)
|
|
}
|
|
|
|
files, err := fsSvc.List(path)
|
|
if err != nil {
|
|
if !errors.Is(err, os.ErrNotExist) {
|
|
return GetErrorResponse[[]interfaces.FsFileInfo](err)
|
|
}
|
|
}
|
|
|
|
return GetDataResponse(files)
|
|
}
|
|
|
|
func GetBaseFileContent(rootPath, path string) (response *Response[string], err error) {
|
|
fsSvc, err := fs.GetBaseFileFsSvc(rootPath)
|
|
if err != nil {
|
|
return GetErrorResponse[string](err)
|
|
}
|
|
|
|
data, err := fsSvc.GetFile(path)
|
|
if err != nil {
|
|
return GetErrorResponse[string](err)
|
|
}
|
|
|
|
return GetDataResponse(string(data))
|
|
}
|
|
|
|
func GetBaseFileInfo(rootPath, path string) (response *Response[interfaces.FsFileInfo], err error) {
|
|
fsSvc, err := fs.GetBaseFileFsSvc(rootPath)
|
|
if err != nil {
|
|
return GetErrorResponse[interfaces.FsFileInfo](err)
|
|
}
|
|
|
|
info, err := fsSvc.GetFileInfo(path)
|
|
if err != nil {
|
|
return GetErrorResponse[interfaces.FsFileInfo](err)
|
|
}
|
|
|
|
return GetDataResponse(info)
|
|
}
|
|
|
|
type PostBaseFileSaveOneParams struct {
|
|
Path string `json:"path" form:"path"`
|
|
Data string `json:"data"`
|
|
}
|
|
|
|
func PostBaseFileSaveOne(rootPath, path, data string) (response *VoidResponse, err error) {
|
|
fsSvc, err := fs.GetBaseFileFsSvc(rootPath)
|
|
if err != nil {
|
|
return GetErrorVoidResponse(err)
|
|
}
|
|
|
|
if err := fsSvc.Save(path, []byte(data)); err != nil {
|
|
return GetErrorVoidResponse(err)
|
|
}
|
|
|
|
return GetVoidResponse()
|
|
}
|
|
|
|
func PostBaseFileSaveOneForm(rootPath, path string, file *multipart.FileHeader) (response *VoidResponse, err error) {
|
|
fsSvc, err := fs.GetBaseFileFsSvc(rootPath)
|
|
if err != nil {
|
|
return GetErrorVoidResponse(err)
|
|
}
|
|
|
|
f, err := file.Open()
|
|
if err != nil {
|
|
return GetErrorVoidResponse(err)
|
|
}
|
|
|
|
fileData, err := io.ReadAll(f)
|
|
if err != nil {
|
|
return GetErrorVoidResponse(err)
|
|
}
|
|
|
|
if err := fsSvc.Save(path, fileData); err != nil {
|
|
return GetErrorVoidResponse(err)
|
|
}
|
|
|
|
return GetVoidResponse()
|
|
}
|
|
|
|
func PostBaseFileSaveMany(rootPath string, form *multipart.Form) (response *VoidResponse, err error) {
|
|
fsSvc, err := fs.GetBaseFileFsSvc(rootPath)
|
|
if err != nil {
|
|
return GetErrorVoidResponse(err)
|
|
}
|
|
|
|
wg := sync.WaitGroup{}
|
|
wg.Add(len(form.File))
|
|
for path := range form.File {
|
|
go func(path string) {
|
|
file := form.File[path][0]
|
|
if err != nil {
|
|
logger.Warnf("invalid file header: %s", path)
|
|
logger.Error(err.Error())
|
|
wg.Done()
|
|
return
|
|
}
|
|
f, err := file.Open()
|
|
if err != nil {
|
|
logger.Warnf("unable to open file: %s", path)
|
|
logger.Error(err.Error())
|
|
wg.Done()
|
|
return
|
|
}
|
|
fileData, err := io.ReadAll(f)
|
|
if err != nil {
|
|
logger.Warnf("unable to read file: %s", path)
|
|
logger.Error(err.Error())
|
|
wg.Done()
|
|
return
|
|
}
|
|
if err := fsSvc.Save(path, fileData); err != nil {
|
|
logger.Warnf("unable to save file: %s", path)
|
|
logger.Error(err.Error())
|
|
wg.Done()
|
|
return
|
|
}
|
|
wg.Done()
|
|
}(path)
|
|
}
|
|
wg.Wait()
|
|
|
|
return GetVoidResponse()
|
|
}
|
|
|
|
func PostBaseFileSaveDir(rootPath, path string) (response *VoidResponse, err error) {
|
|
fsSvc, err := fs.GetBaseFileFsSvc(rootPath)
|
|
if err != nil {
|
|
return GetErrorVoidResponse(err)
|
|
}
|
|
|
|
if err := fsSvc.CreateDir(path); err != nil {
|
|
return GetErrorVoidResponse(err)
|
|
}
|
|
|
|
return GetVoidResponse()
|
|
}
|
|
|
|
func PostBaseFileRename(rootPath, path, newPath string) (response *VoidResponse, err error) {
|
|
fsSvc, err := fs.GetBaseFileFsSvc(rootPath)
|
|
if err != nil {
|
|
return GetErrorVoidResponse(err)
|
|
}
|
|
|
|
if err := fsSvc.Rename(path, newPath); err != nil {
|
|
return GetErrorVoidResponse(err)
|
|
}
|
|
|
|
return GetVoidResponse()
|
|
}
|
|
|
|
func DeleteBaseFile(rootPath, path string) (response *VoidResponse, err error) {
|
|
if path == "~" {
|
|
path = "."
|
|
}
|
|
|
|
fsSvc, err := fs.GetBaseFileFsSvc(rootPath)
|
|
if err != nil {
|
|
return GetErrorVoidResponse(err)
|
|
}
|
|
|
|
if err := fsSvc.Delete(path); err != nil {
|
|
return GetErrorVoidResponse(err)
|
|
}
|
|
_, err = fsSvc.GetFileInfo(".")
|
|
if err != nil {
|
|
_ = fsSvc.CreateDir("/")
|
|
}
|
|
|
|
return GetVoidResponse()
|
|
}
|
|
|
|
func PostBaseFileCopy(rootPath, path, newPath string) (response *VoidResponse, err error) {
|
|
fsSvc, err := fs.GetBaseFileFsSvc(rootPath)
|
|
if err != nil {
|
|
return GetErrorVoidResponse(err)
|
|
}
|
|
|
|
if err := fsSvc.Copy(path, newPath); err != nil {
|
|
return GetErrorVoidResponse(err)
|
|
}
|
|
|
|
return GetVoidResponse()
|
|
}
|
|
|
|
func PostBaseFileExport(rootPath string, c *gin.Context) (err error) {
|
|
fsSvc, err := fs.GetBaseFileFsSvc(rootPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// zip file path
|
|
zipFilePath, err := fsSvc.Export()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// download
|
|
c.Header("Content-Disposition", fmt.Sprintf("attachment; filename=%s", zipFilePath))
|
|
c.File(zipFilePath)
|
|
|
|
return nil
|
|
}
|