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  }