コード例 #1
0
ファイル: save.go プロジェクト: get3w/get3w
// Save app
func Save() 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.AppSaveInput{}
		err := api.LoadRequestInput(c, input)
		if err != nil {
			return api.ErrorBadRequest(c, err)
		}

		parser, err := storage.NewLocalParser(api.Owner(c), appPath)
		if err != nil {
			return api.ErrorInternal(c, err)
		}

		err = parser.APISave(input.Payloads)
		if err != nil {
			return api.ErrorInternal(c, err)
		}

		return c.JSON(http.StatusOK, &get3w.AppSaveOutput{
			LastModified: timeutils.ToString(time.Now()),
		})
	}
}
コード例 #2
0
ファイル: login.go プロジェクト: get3w/get3w
// Login user login
func Login() echo.HandlerFunc {
	return func(c echo.Context) error {
		input := &get3w.UserLoginInput{}
		err := api.LoadRequestInput(c, input)
		if err != nil {
			return api.ErrorBadRequest(c, err)
		}

		if input.Account == "" || input.Password == "" {
			return api.ErrorUnauthorized(c, nil)
		}

		client := get3w.NewClient("")
		output, _, err := client.Users.Login(input)
		if err != nil {
			return api.ErrorUnauthorized(c, err)
		}

		config, _ := home.LoadConfig()
		config.AuthConfig = home.AuthConfig{
			Username:    output.User.Username,
			Password:    input.Password,
			AccessToken: output.AccessToken,
		}

		if err := config.Save(); err != nil {
			return api.ErrorInternal(c, fmt.Errorf("ERROR: failed to save config file: %v", err))
		}

		return c.JSON(http.StatusOK, output)
	}
}
コード例 #3
0
ファイル: push.go プロジェクト: get3w/get3w
// 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)
	}
}
コード例 #4
0
ファイル: edit.go プロジェクト: get3w/get3w
// 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)
	}
}
コード例 #5
0
ファイル: delete.go プロジェクト: get3w/get3w
// Delete app
func Delete() 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.AppDeleteInput{}
		err := api.LoadRequestInput(c, input)
		if err != nil {
			return api.ErrorBadRequest(c, err)
		}

		config, err := home.LoadConfig()
		var appToDelete *get3w.App
		index := -1
		for i, app := range config.Apps {
			if app.Path == appPath {
				appToDelete = app
				index = i
				break
			}
		}
		if appToDelete == nil {
			return api.ErrorNotFound(c, nil)
		}

		if !input.KeepFiles {
			err = os.RemoveAll(appPath)
			if err != nil {
				return api.ErrorBadRequest(c, err)
			}
		}

		config.Apps = append(config.Apps[:index], config.Apps[index+1:]...)
		config.Save()

		return c.JSON(http.StatusOK, appToDelete)
	}
}
コード例 #6
0
ファイル: create.go プロジェクト: get3w/get3w
// 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)
	}
}
コード例 #7
0
ファイル: load.go プロジェクト: get3w/get3w
// 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)
	}
}
コード例 #8
0
ファイル: add.go プロジェクト: get3w/get3w
// Add app, for open and clone operation
func Add() echo.HandlerFunc {
	return func(c echo.Context) error {
		if api.IsAnonymous(c) {
			return api.ErrorUnauthorized(c, nil)
		}
		owner := api.Owner(c)

		input := &get3w.AppAddInput{}
		err := api.LoadRequestInput(c, input)
		if err != nil {
			return api.ErrorBadRequest(c, err)
		}

		dirPath := input.DirPath
		dirExists := true
		if dirPath == "" {
			dirExists = false
		} else {
			stat, err := os.Lstat(dirPath)
			if err != nil {
				dirExists = false
			} else if !stat.IsDir() {
				dirExists = false
			}
		}
		if !dirExists {
			return api.ErrorNotFound(c, nil)
		}

		config, err := home.LoadConfig()
		if err != nil {
			return api.ErrorBadRequest(c, err)
		}

		success := true
		configExists := true
		var app *get3w.App

		var appPath string
		if input.Origin != "" {
			appPath, err = addFromCloud(dirPath, input.Origin, &config.AuthConfig)
			if err != nil {
				return api.ErrorBadRequest(c, err)
			}
		} else {
			appPath, configExists, err = addFromLocal(dirPath, config)
			if err != nil {
				return api.ErrorBadRequest(c, err)
			}
		}

		if input.Check && !configExists {
			success = false
		}

		if success {
			parser, err := storage.NewLocalParser(config.AuthConfig.Username, appPath)
			if err != nil {
				return api.ErrorInternal(c, err)
			}

			app = &get3w.App{
				Owner:       owner,
				Name:        parser.Name,
				Description: parser.Config.Description,
				Tags:        "",
				Path:        appPath,
				Private:     false,
				CreatedAt:   timeutils.ToString(time.Now()),
				UpdatedAt:   timeutils.ToString(time.Now()),
			}

			exists := false
			for _, app := range config.Apps {
				if app.Path == appPath {
					exists = true
					break
				}
			}
			if !exists {
				config.Apps = append(config.Apps, app)
				config.Save()
			}
		}

		output := &get3w.AppAddOutput{
			Config: configExists,
			App:    app,
		}
		return c.JSON(http.StatusOK, output)
	}
}