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) }