// List return files func List() echo.HandlerFunc { return func(c echo.Context) error { appPath := c.Param("app_path") if appPath == "" { return api.ErrorNotFound(c, nil) } path := c.P(1) app, err := api.GetApp(appPath) if err != nil { return api.ErrorInternal(c, err) } if app == nil { return api.ErrorNotFound(c, nil) } parser, err := storage.NewLocalParser(api.Owner(c), appPath) if err != nil { return api.ErrorInternal(c, err) } files, err := parser.Storage.GetFiles(parser.Storage.GetRootPrefix(path)) if err != nil { return api.ErrorInternal(c, err) } return c.JSON(http.StatusOK, files) } }
// Get file content func Get() echo.HandlerFunc { return func(c echo.Context) error { appPath := c.Param("app_path") if appPath == "" { return api.ErrorNotFound(c, nil) } path := c.P(1) app, err := api.GetApp(appPath) if err != nil { return api.ErrorInternal(c, err) } if app == nil { return api.ErrorNotFound(c, nil) } parser, err := storage.NewLocalParser(api.Owner(c), appPath) if err != nil { return api.ErrorInternal(c, err) } data, err := parser.Storage.Read(parser.Storage.GetSourceKey(path)) if err != nil { return api.ErrorNotFound(c, nil) } output := &get3w.FileGetOutput{ Content: base64.StdEncoding.EncodeToString(data), } return c.JSON(http.StatusOK, output) } }
// Delete file func Delete() echo.HandlerFunc { return func(c echo.Context) error { appPath := c.Param("app_path") if appPath == "" { return api.ErrorNotFound(c, nil) } path := c.P(1) if api.IsAnonymous(c) { return api.ErrorUnauthorized(c, nil) } app, err := api.GetApp(appPath) if err != nil { return api.ErrorInternal(c, err) } if app == nil { return api.ErrorNotFound(c, nil) } parser, err := storage.NewLocalParser(api.Owner(c), appPath) if err != nil { return api.ErrorInternal(c, err) } parser.Storage.Delete(parser.Storage.GetSourceKey(path)) output := &get3w.FileDeleteOutput{ LastModified: timeutils.ToString(time.Now()), } return c.JSON(http.StatusOK, output) } }
// Push file content func Push() echo.HandlerFunc { return func(c echo.Context) error { appPath := c.Param("app_path") if appPath == "" { return api.ErrorNotFound(c, nil) } if api.IsAnonymous(c) { return api.ErrorUnauthorized(c, nil) } input := &get3w.FilesPushInput{} err := api.LoadRequestInput(c, input) if err != nil { return api.ErrorBadRequest(c, err) } app, err := api.GetApp(appPath) if err != nil { return api.ErrorInternal(c, err) } if app == nil { return api.ErrorNotFound(c, nil) } parser, err := storage.NewLocalParser(api.Owner(c), appPath) if err != nil { return api.ErrorInternal(c, err) } data, err := base64.StdEncoding.DecodeString(input.Blob) if err != nil { return api.ErrorInternal(c, err) } pathBytesMap, err := ioutils.UnPack(data) if err != nil { return api.ErrorInternal(c, err) } for _, addedPath := range input.Added { parser.Storage.Write(parser.Storage.GetSourceKey(addedPath), pathBytesMap[addedPath]) } for _, modifiedPath := range input.Modified { parser.Storage.Write(parser.Storage.GetSourceKey(modifiedPath), pathBytesMap[modifiedPath]) } for _, removedPath := range input.Removed { parser.Storage.Delete(parser.Storage.GetSourceKey(removedPath)) } output := &get3w.FileEditOutput{ LastModified: timeutils.ToString(time.Now()), } return c.JSON(http.StatusOK, output) } }
// Edit file content func Edit() echo.HandlerFunc { return func(c echo.Context) error { appPath := c.Param("app_path") if appPath == "" { return api.ErrorNotFound(c, nil) } path := c.P(1) if api.IsAnonymous(c) { return api.ErrorUnauthorized(c, nil) } input := &get3w.FileEditInput{} err := api.LoadRequestInput(c, input) if err != nil { return api.ErrorBadRequest(c, err) } app, err := api.GetApp(appPath) if err != nil { return api.ErrorInternal(c, err) } if app == nil { return api.ErrorNotFound(c, nil) } parser, err := storage.NewLocalParser(api.Owner(c), appPath) if err != nil { return api.ErrorInternal(c, err) } data, err := base64.StdEncoding.DecodeString(input.Content) if err != nil { return api.ErrorInternal(c, err) } err = parser.Storage.Write(parser.Storage.GetSourceKey(path), data) if err != nil { return api.ErrorInternal(c, err) } output := &get3w.FileEditOutput{ LastModified: timeutils.ToString(time.Now()), } return c.JSON(http.StatusOK, output) } }
// Sync app func Sync() echo.HandlerFunc { return func(c echo.Context) error { appPath := c.Param("app_path") if appPath == "" { return api.ErrorNotFound(c, nil) } if api.IsAnonymous(c) { return api.ErrorUnauthorized(c, nil) } app, err := api.GetApp(appPath) if err != nil { return api.ErrorInternal(c, err) } if app == nil { return api.ErrorNotFound(c, nil) } config, err := home.LoadConfig() if err != nil { return api.ErrorInternal(c, err) } parser, err := storage.NewLocalParser(api.Owner(c), appPath) if err != nil { return api.ErrorInternal(c, err) } buffer := bytes.NewBufferString("") shouldLogin, err := parser.Push(&config.AuthConfig, buffer) if shouldLogin { return api.ErrorUnauthorized(c, nil) } if err != nil { return api.ErrorInternal(c, err) } return c.JSON(http.StatusOK, &get3w.AppSyncOutput{ Log: strings.Replace(buffer.String(), "\n", "<br />", -1), }) } }
// Create create folder func Create() echo.HandlerFunc { return func(c echo.Context) error { appPath := c.Param("app_path") if appPath == "" { return api.ErrorNotFound(c, nil) } if api.IsAnonymous(c) { return api.ErrorUnauthorized(c, nil) } input := &get3w.FolderCreateInput{} err := api.LoadRequestInput(c, input) if err != nil { return api.ErrorBadRequest(c, err) } if input.Path == "" { return api.ErrorBadRequest(c, nil) } app, err := api.GetApp(appPath) if err != nil { return api.ErrorInternal(c, err) } if app == nil { return api.ErrorNotFound(c, nil) } parser, err := storage.NewLocalParser(api.Owner(c), appPath) if err != nil { return api.ErrorInternal(c, err) } parser.Storage.NewFolder(parser.Storage.GetSourcePrefix(input.Path)) output := &get3w.FolderCreateOutput{ LastModified: timeutils.ToString(time.Now()), } return c.JSON(http.StatusOK, output) } }
// Load app func Load() echo.HandlerFunc { return func(c echo.Context) error { appPath := c.Param("app_path") if appPath == "" { return api.ErrorNotFound(c, nil) } if api.IsAnonymous(c) { return api.ErrorUnauthorized(c, nil) } input := &get3w.AppLoadInput{} err := api.LoadRequestInput(c, input) if err != nil { return api.ErrorBadRequest(c, err) } app, err := api.GetApp(appPath) if err != nil { return api.ErrorInternal(c, err) } if app == nil { return api.ErrorNotFound(c, nil) } parser, err := storage.NewLocalParser(api.Owner(c), appPath) if err != nil { return api.ErrorBadRequest(c, err) } parser.APILoad() output := &get3w.AppLoadOutput{ LastModified: timeutils.ToString(time.Now()), App: app, Config: parser.Config, Sites: parser.Sites, } return c.JSON(http.StatusOK, output) } }
// Get app func Get() echo.HandlerFunc { return func(c echo.Context) error { appPath := c.Param("app_path") if appPath == "" { return api.ErrorNotFound(c, nil) } if api.IsAnonymous(c) { return api.ErrorUnauthorized(c, nil) } app, err := api.GetApp(appPath) if err != nil { return api.ErrorInternal(c, err) } if app == nil { return api.ErrorNotFound(c, nil) } return c.JSON(http.StatusOK, app) } }
// Checksum get path and checksum map of all files, dedicated to cli func Checksum() echo.HandlerFunc { return func(c echo.Context) error { appPath := c.Param("app_path") if appPath == "" { return api.ErrorNotFound(c, nil) } app, err := api.GetApp(appPath) if err != nil { return api.ErrorInternal(c, err) } if app == nil { return api.ErrorNotFound(c, nil) } parser, err := storage.NewLocalParser(api.Owner(c), appPath) if err != nil { return api.ErrorInternal(c, err) } files, err := parser.Storage.GetAllFiles(parser.Storage.GetSourcePrefix("")) if err != nil { return api.ErrorInternal(c, err) } output := &get3w.FilesChecksumOutput{ Files: make(map[string]string), } for _, file := range files { output.Files[file.Path] = file.Checksum } return c.JSON(http.StatusOK, output) } }
// Upload files func Upload() echo.HandlerFunc { return func(c echo.Context) error { appPath := c.Param("app_path") if appPath == "" { return api.ErrorNotFound(c, nil) } if api.IsAnonymous(c) { return api.ErrorUnauthorized(c, nil) } location := c.Query("location") app, err := api.GetApp(appPath) if err != nil { return api.ErrorInternal(c, err) } if app == nil { return api.ErrorNotFound(c, nil) } parser, err := storage.NewLocalParser(api.Owner(c), appPath) if err != nil { return api.ErrorInternal(c, err) } req := c.Request().(*standard.Request) mr, err := req.MultipartReader() if err != nil { return api.ErrorInternal(c, err) } files := []*get3w.File{} for { part, err := mr.NextPart() if err != nil { if err == io.EOF { break } return api.ErrorInternal(c, err) } defer part.Close() data, err := ioutil.ReadAll(part) if err != nil { return api.ErrorInternal(c, err) } filename := part.FileName() err = parser.Storage.Write(parser.Storage.GetSourceKey(location, filename), data) if err != nil { return api.ErrorInternal(c, err) } file := &get3w.File{ IsDir: false, Path: strings.Trim(path.Join(location, filename), "/"), Name: filename, Size: 0, Checksum: "", LastModified: timeutils.ToString(time.Now()), } files = append(files, file) } return c.JSON(http.StatusOK, files) } }