diff --git a/Makefile b/Makefile index 6817f73..a930f81 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ lint: ## Lint the files @golint -set_exit_status ${PKG_LIST} test: ## Run unittests - @go test -v ${PKG_LIST} + @go test -v . race: dep ## Run data race detector @go test -v -race ${PKG_LIST} diff --git a/doc.go b/doc.go index 9f865de..adf9cd0 100644 --- a/doc.go +++ b/doc.go @@ -1,5 +1,5 @@ /* -Package client is a Go client for the Nextcloud Provisioning API. +Package gonextcloud is a Go client for the Nextcloud Provisioning API. For more information about the Provisioning API, see the documentation: https://docs.nextcloud.com/server/13/admin_manual/configuration_user/user_provisioning_api.html diff --git a/gonextcloud_test.go b/gonextcloud_test.go index c868de5..564072a 100644 --- a/gonextcloud_test.go +++ b/gonextcloud_test.go @@ -76,7 +76,6 @@ var ( func(t *testing.T) { us, err := c.UserList() assert.NoError(t, err) - assert.Contains(t, us, config.Login) }, }, @@ -195,7 +194,7 @@ var ( { "TestUserCreateExisting", func(t *testing.T) { - err := c.UserCreate(config.NotExistingUser, password, nil) + err := c.UserCreate(config.Login, password, nil) assert.Error(t, err) }, }, @@ -480,11 +479,9 @@ func TestUserCreateWithoutPassword(t *testing.T) { t.Fatal(err) } // Nextcloud does not seems to like recreating a deleted user - rand.Seed(time.Now().Unix()) - n := fmt.Sprintf("%s-%s", config.NotExistingUser, strconv.Itoa(rand.Int())) - err := c.UserCreateWithoutPassword(n, config.Email, strings.Title(config.NotExistingUser)) + err := c.UserCreateWithoutPassword(config.NotExistingUser, config.Email, strings.Title(config.NotExistingUser)) assert.NoError(t, err) - err = c.UserDelete(n) + err = c.UserDelete(config.NotExistingUser) assert.NoError(t, err) } @@ -534,11 +531,13 @@ func LoadConfig() error { if e != "" { config.Email = e } + config.NotExistingUser = fmt.Sprintf("%s-%s", config.NotExistingUser, strconv.Itoa(rand.Int())) return nil } func initClient() error { if c == nil { + rand.Seed(time.Now().Unix()) if err := LoadConfig(); err != nil { return err } diff --git a/groupfolders.go b/groupfolders.go index 72d56cd..b5b6ec2 100644 --- a/groupfolders.go +++ b/groupfolders.go @@ -8,6 +8,7 @@ import ( "strconv" ) +//GroupFoldersList returns the groups folders func (c *Client) GroupFoldersList() (map[int]types.GroupFolder, error) { res, err := c.baseRequest(http.MethodGet, routes.groupfolders, nil) if err != nil { @@ -19,6 +20,7 @@ func (c *Client) GroupFoldersList() (map[int]types.GroupFolder, error) { return gfs, nil } +//GroupFolders returns the group folder details func (c *Client) GroupFolders(id int) (types.GroupFolder, error) { res, err := c.baseRequest(http.MethodGet, routes.groupfolders, nil, strconv.Itoa(id)) if err != nil { @@ -32,6 +34,7 @@ func (c *Client) GroupFolders(id int) (types.GroupFolder, error) { return r.Ocs.Data.FormatGroupFolder(), nil } +//GroupFoldersCreate creates a group folder func (c *Client) GroupFoldersCreate(name string) (id int, err error) { // TODO: Validate Folder name ro := &req.RequestOptions{ @@ -49,6 +52,7 @@ func (c *Client) GroupFoldersCreate(name string) (id int, err error) { return id, nil } +//GroupFoldersRename renames the group folder func (c *Client) GroupFoldersRename(groupID int, name string) error { ro := &req.RequestOptions{ Data: map[string]string{ @@ -64,10 +68,8 @@ func (c *Client) GroupFoldersRename(groupID int, name string) error { } //TODO func (c *Client) GroupFoldersDelete(id int) error { -// // GroupFolders's response does not give any clues about success or failure -// return nil -//} +//GroupFoldersAddGroup adds group to folder func (c *Client) GroupFoldersAddGroup(folderID int, groupName string) error { ro := &req.RequestOptions{ Data: map[string]string{ @@ -82,6 +84,7 @@ func (c *Client) GroupFoldersAddGroup(folderID int, groupName string) error { return nil } +//GroupFoldersRemoveGroup remove a group from the group folder func (c *Client) GroupFoldersRemoveGroup(folderID int, groupName string) error { // GroupFolders's response does not give any clues about success or failure _, err := c.baseRequest(http.MethodDelete, routes.groupfolders, nil, strconv.Itoa(folderID), "groups", groupName) @@ -91,6 +94,7 @@ func (c *Client) GroupFoldersRemoveGroup(folderID int, groupName string) error { return nil } +//GroupFoldersSetGroupPermissions set groups permissions func (c *Client) GroupFoldersSetGroupPermissions(folderID int, groupName string, permission types.SharePermission) error { ro := &req.RequestOptions{ Data: map[string]string{ diff --git a/shares.go b/shares.go index 30cfba8..6823860 100644 --- a/shares.go +++ b/shares.go @@ -9,6 +9,7 @@ import ( "sync" ) +//SharesList list all shares of the logged in user func (c *Client) SharesList() ([]types.Share, error) { res, err := c.baseRequest(http.MethodGet, routes.shares, nil) if err != nil { @@ -19,6 +20,7 @@ func (c *Client) SharesList() ([]types.Share, error) { return r.Ocs.Data, nil } +//Shares return shares from a specific file or folder func (c *Client) Shares(path string, reshares bool, subfiles bool) ([]types.Share, error) { ro := &req.RequestOptions{ Params: map[string]string{ @@ -36,6 +38,7 @@ func (c *Client) Shares(path string, reshares bool, subfiles bool) ([]types.Shar return r.Ocs.Data, nil } +//Share Get information about a known Share func (c *Client) Share(shareID string) (types.Share, error) { res, err := c.baseRequest(http.MethodGet, routes.shares, nil, shareID) if err != nil { @@ -46,6 +49,7 @@ func (c *Client) Share(shareID string) (types.Share, error) { return r.Ocs.Data[0], nil } +//ShareCreate create a share func (c *Client) ShareCreate( path string, shareType types.ShareType, @@ -77,11 +81,13 @@ func (c *Client) ShareCreate( return r.Ocs.Data, nil } +//ShareDelete Remove the given share. func (c *Client) ShareDelete(shareID int) error { _, err := c.baseRequest(http.MethodDelete, routes.shares, nil, strconv.Itoa(shareID)) return err } +// ShareUpdate update share details // expireDate expireDate expects a well formatted date string, e.g. ‘YYYY-MM-DD’ func (c *Client) ShareUpdate(shareUpdate types.ShareUpdate) error { errs := make(chan types.UpdateError) @@ -130,19 +136,23 @@ func (c *Client) ShareUpdate(shareUpdate types.ShareUpdate) error { return types.NewUpdateError(errs) } +// ShareUpdateExpireDate updates the share's expire date // expireDate expects a well formatted date string, e.g. ‘YYYY-MM-DD’ func (c *Client) ShareUpdateExpireDate(shareID int, expireDate string) error { return c.baseShareUpdate(strconv.Itoa(shareID), "expireDate", expireDate) } +//ShareUpdatePublicUpload enable or disable public upload func (c *Client) ShareUpdatePublicUpload(shareID int, public bool) error { return c.baseShareUpdate(strconv.Itoa(shareID), "publicUpload", strconv.FormatBool(public)) } +//ShareUpdatePassword updates share password func (c *Client) ShareUpdatePassword(shareID int, password string) error { return c.baseShareUpdate(strconv.Itoa(shareID), "password", password) } +//ShareUpdatePermissions update permissions func (c *Client) ShareUpdatePermissions(shareID int, permissions types.SharePermission) error { return c.baseShareUpdate(strconv.Itoa(shareID), "permissions", strconv.Itoa(int(permissions))) }