Example #1
0
func add(path string, config addConfig, client *server.Client) (*vault.Item, error) {

	if !filepath.IsAbs(path) {
		abs, err := filepath.Abs(path)

		if err != nil {
			return nil, err
		}

		path = abs

	}

	origiNalPath := path

	stat, err := os.Stat(path)

	if err != nil {
		return nil, err
	}

	if stat.IsDir() {

		tmpDir, err := ioutil.TempDir("", "vault")

		if err != nil {
			return nil, err
		}
		defer os.RemoveAll(tmpDir)
		tmpDir = filepath.Join(tmpDir, "vault_zip.zip")

		err = vault.Pack(path, tmpDir)

		if err != nil {
			return nil, err
		}

		path = tmpDir

	}
	if config.name == "" {

		basename := filepath.Base(origiNalPath)
		config.name = basename
	}

	c := vault.ItemCreateOptions{
		Name: config.name,
		Size: uint64(stat.Size()),
	}

	if config.key != "" {
		key := vault.Key([]byte(config.key))
		c.Key = &key
	}

	if c.Mime == "" {
		ext := filepath.Ext(path)
		c.Mime = mime.TypeByExtension(ext)
	}

	file, err := os.Open(path)

	if err != nil {
		return nil, err
	}

	defer file.Close()

	return client.Create(file, c)
}