github.com/elliott5/community@v0.14.1-0.20160709191136-823126fb026a/sdk/folders.go (about) 1 // Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved. 2 // 3 // This software (Documize Community Edition) is licensed under 4 // GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html 5 // 6 // You can operate outside the AGPL restrictions by purchasing 7 // Documize Enterprise Edition and obtaining a commercial license 8 // by contacting <sales@documize.com>. 9 // 10 // https://documize.com 11 12 package documize 13 14 import ( 15 "bytes" 16 "encoding/json" 17 "errors" 18 "io/ioutil" 19 "net/http" 20 21 "github.com/documize/community/documize/api/endpoint/models" 22 "github.com/documize/community/documize/api/entity" 23 ) 24 25 // GetFolders returns the folders that the current user can see. 26 func (c *Client) GetFolders() ([]entity.Label, error) { 27 28 req, err := http.NewRequest("GET", c.BaseURL+"/api/folders", nil) 29 if err != nil { 30 return nil, err 31 } 32 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 33 resp, err := c.Client.Do(req) 34 if err != nil { 35 return nil, err 36 } 37 defer resp.Body.Close() // ignore error 38 39 var folders []entity.Label 40 41 dec := json.NewDecoder(resp.Body) 42 err = dec.Decode(&folders) 43 if err != nil { 44 return nil, err 45 } 46 47 return folders, nil 48 } 49 50 // GetNamedFolderIDs returns those folder IDs with the given name (folder names are not unique). 51 func (c *Client) GetNamedFolderIDs(name string) ([]string, error) { 52 ret := make([]string, 0, 2) 53 54 Folders, err := c.GetFolders() 55 if err != nil { 56 return nil, err 57 } 58 59 for _, f := range Folders { 60 if name == f.Name { 61 ret = append(ret, f.RefID) 62 } 63 } 64 return ret, nil 65 } 66 67 // GetFoldersVisibility returns the visibility of folders that the current user can see. 68 func (c *Client) GetFoldersVisibility() ([]entity.Label, error) { 69 70 req, err := http.NewRequest("GET", c.BaseURL+"/api/folders?filter=viewers", nil) 71 if err != nil { 72 return nil, err 73 } 74 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 75 resp, err := c.Client.Do(req) 76 if err != nil { 77 return nil, err 78 } 79 defer resp.Body.Close() // ignore error 80 81 folders := make([]entity.Label, 0, 10) 82 83 dec := json.NewDecoder(resp.Body) 84 err = dec.Decode(&folders) 85 if err != nil { 86 return nil, err 87 } 88 89 return folders, nil 90 } 91 92 // GetFolder returns the documents in the given folder that the current user can see. 93 func (c *Client) GetFolder(folderID string) (*entity.Label, error) { 94 95 req, err := http.NewRequest("GET", c.BaseURL+"/api/folders/"+folderID, nil) 96 if err != nil { 97 return nil, err 98 } 99 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 100 resp, err := c.Client.Do(req) 101 if err != nil { 102 return nil, err 103 } 104 defer resp.Body.Close() // ignore error 105 106 var folder entity.Label 107 b, err := ioutil.ReadAll(resp.Body) 108 if err != nil { 109 return nil, err 110 } 111 if isError(string(b)) { 112 return nil, errors.New(trimErrors(string(b))) 113 } 114 err = json.Unmarshal(b, &folder) 115 if err != nil { 116 return nil, err 117 } 118 119 return &folder, nil 120 } 121 122 // GetFolderPermissions returns the given user's permissions. 123 func (c *Client) GetFolderPermissions(folderID string) (*[]entity.LabelRole, error) { 124 125 req, err := http.NewRequest("GET", c.BaseURL+"/api/folders/"+folderID+"/permissions", nil) 126 if err != nil { 127 return nil, err 128 } 129 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 130 resp, err := c.Client.Do(req) 131 if err != nil { 132 return nil, err 133 } 134 defer resp.Body.Close() // ignore error 135 136 folderPerm := make([]entity.LabelRole, 0, 6) 137 138 dec := json.NewDecoder(resp.Body) 139 err = dec.Decode(&folderPerm) 140 if err != nil { 141 return nil, err 142 } 143 144 return &folderPerm, nil 145 } 146 147 // SetFolderPermissions sets the given user's permissions. 148 func (c *Client) SetFolderPermissions(folderID, msg string, perms *[]entity.LabelRole) error { 149 frm := new(models.FolderRolesModel) 150 frm.Message = msg 151 frm.Roles = *perms 152 b, err := json.Marshal(frm) 153 if err != nil { 154 return err 155 } 156 req, err := http.NewRequest("PUT", c.BaseURL+"/api/folders/"+folderID+"/permissions", bytes.NewReader(b)) 157 if err != nil { 158 return err 159 } 160 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 161 resp, err := c.Client.Do(req) 162 if err != nil { 163 return err 164 } 165 defer resp.Body.Close() // ignore error 166 b, err = ioutil.ReadAll(resp.Body) 167 if err != nil { 168 return err 169 } 170 if isError(string(b)) { 171 return errors.New(trimErrors(string(b))) 172 } 173 return nil 174 } 175 176 // AddFolder adds the given folder for the current user. 177 // Fields added by the host are added to the folder structure referenced. 178 func (c *Client) AddFolder(fldr *entity.Label) error { 179 b, err := json.Marshal(fldr) 180 if err != nil { 181 return err 182 } 183 req, err := http.NewRequest("POST", c.BaseURL+"/api/folders", bytes.NewReader(b)) 184 if err != nil { 185 return err 186 } 187 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 188 resp, err := c.Client.Do(req) 189 if err != nil { 190 return err 191 } 192 defer resp.Body.Close() // ignore error 193 b, err = ioutil.ReadAll(resp.Body) 194 if err != nil { 195 return err 196 } 197 if isError(string(b)) { 198 return errors.New(trimErrors(string(b))) 199 } 200 err = json.Unmarshal(b, fldr) 201 return err 202 } 203 204 // UpdateFolder changes the folder info the given folder for the current user, returning the changed version in the referenced folder structure. 205 func (c *Client) UpdateFolder(fldr *entity.Label) error { 206 b, err := json.Marshal(fldr) 207 if err != nil { 208 return err 209 } 210 req, err := http.NewRequest("PUT", c.BaseURL+"/api/folders/"+fldr.RefID, bytes.NewReader(b)) 211 if err != nil { 212 return err 213 } 214 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 215 resp, err := c.Client.Do(req) 216 if err != nil { 217 return err 218 } 219 defer resp.Body.Close() // ignore error 220 b, err = ioutil.ReadAll(resp.Body) 221 if err != nil { 222 return err 223 } 224 if isError(string(b)) { 225 return errors.New(trimErrors(string(b))) 226 } 227 err = json.Unmarshal(b, fldr) 228 return err 229 } 230 231 // RemoveFolder removes the given folder and moves its contents to another. 232 func (c *Client) RemoveFolder(folderID, moveToID string) error { 233 req, err := http.NewRequest("DELETE", c.BaseURL+"/api/folders/"+folderID+"/move/"+moveToID, nil) 234 if err != nil { 235 return err 236 } 237 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 238 resp, err := c.Client.Do(req) 239 if err != nil { 240 return err 241 } 242 defer resp.Body.Close() // ignore error 243 b, err := ioutil.ReadAll(resp.Body) 244 if err != nil { 245 return err 246 } 247 if isError(string(b)) { 248 return errors.New(trimErrors(string(b))) 249 } 250 return nil 251 }