Go to file
2019-07-20 22:27:54 +02:00
cover Fix coverage in Makefile 2018-10-17 09:20:28 +02:00
docs Changed client's Entities into interfaces, improved CreateWithoutPassword 2018-12-11 10:27:11 +01:00
types Resolve "Add Walk to WebDav interface" 2019-07-16 06:29:38 +00:00
vendor fix #6: added gowebdav and webdav interface (TODO: webdav tests) 2019-07-14 15:41:43 +02:00
.gitignore removed sensitive data 2018-10-16 15:52:56 +02:00
.gitlab-ci.yml updated .gitlab-ci.yml 2019-07-14 16:06:50 +02:00
apps_test.go Changed client's Entities into interfaces, improved CreateWithoutPassword 2018-12-11 10:27:11 +01:00
apps.go Changed client's Entities into interfaces, improved CreateWithoutPassword 2018-12-11 10:27:11 +01:00
appsconfig_test.go Changed client's Entities into interfaces, improved CreateWithoutPassword 2018-12-11 10:27:11 +01:00
appsconfig.go Changed client's Entities into interfaces, improved CreateWithoutPassword 2018-12-11 10:27:11 +01:00
auth.go Resolve "Add Walk to WebDav interface" 2019-07-16 06:29:38 +00:00
client.go wip: fix walk, TODO: find a fix for fileinfo's name 2019-07-20 22:27:54 +02:00
config.yml wip: fix walk, TODO: find a fix for fileinfo's name 2019-07-20 22:27:54 +02:00
coverage.html Fix coverage in Makefile 2018-10-17 09:20:28 +02:00
doc.go Changed client's Entities into interfaces, improved CreateWithoutPassword 2018-12-11 10:27:11 +01:00
example.config.yml wip: fix walk, TODO: find a fix for fileinfo's name 2019-07-20 22:27:54 +02:00
go.mod wip: fix walk, TODO: find a fix for fileinfo's name 2019-07-20 22:27:54 +02:00
go.sum wip: fix walk, TODO: find a fix for fileinfo's name 2019-07-20 22:27:54 +02:00
gonextcloud_test.go wip: fix walk, TODO: find a fix for fileinfo's name 2019-07-20 22:27:54 +02:00
gonextcloud.iml #1 OCS Shares API 2018-08-08 16:04:06 +02:00
groupfolders_test.go Changed client's Entities into interfaces, improved CreateWithoutPassword 2018-12-11 10:27:11 +01:00
groupfolders.go Changed client's Entities into interfaces, improved CreateWithoutPassword 2018-12-11 10:27:11 +01:00
groups.go Added search to Groups' ListDetails 2019-01-31 13:23:06 +01:00
LICENCE Added Licence 2018-07-09 13:40:45 +02:00
Makefile fix #7: moved to gomodules 2019-07-14 01:18:42 +02:00
monitoring.go updated project url 2018-10-26 15:35:50 +02:00
notifications_test.go Changed client's Entities into interfaces, improved CreateWithoutPassword 2018-12-11 10:27:11 +01:00
notifications.go Changed client's Entities into interfaces, improved CreateWithoutPassword 2018-12-11 10:27:11 +01:00
README.md Fix User Update ignored fields 2019-01-18 11:16:49 +01:00
routes.go #1 Implements Notifications API 2018-10-17 11:15:27 +02:00
shares.go Fix User UpdateError 2019-01-18 13:42:40 +01:00
update_test.go Added User's group add and remove to User Update 2019-02-01 13:13:44 +01:00
users.go fix user update groups goroutine 2019-02-19 09:30:27 +01:00
utils.go Fix quota odd behaviour 2019-01-16 15:31:22 +01:00
webdav_test.go wip: fix walk, TODO: find a fix for fileinfo's name 2019-07-20 22:27:54 +02:00
webdav.go wip: fix walk, TODO: find a fix for fileinfo's name 2019-07-20 22:27:54 +02:00

Nextcloud

pipeline status coverage report Go Report Card GoDoc

GoNextcloud

A simple Client for Nextcloud's Provisioning API in Go.

For more information about the Provisioning API, see the documentation: https://docs.nextcloud.com/server/13/admin_manual/configuration_user/user_provisioning_api.html

Usage

import "gitlab.bertha.cloud/partitio/Nextcloud-Partitio/gonextcloud"

You use the library by creating a client object and calling methods on it.

For example, to list all the Nextcloud's instance users:

package main

import (
    "fmt"
    "gitlab.bertha.cloud/partitio/Nextcloud-Partitio/gonextcloud"
)

func main() {
    url := "https://www.mynextcloud.com"
    username := "admin"
    password := "password"
    c, err := gonextcloud.NewClient(url)
    if err != nil {
        panic(err)
    }
    if err := c.Login(username, password); err != nil {
        panic(err)
    }
    defer c.Logout()

    users, err := c.Users().List()
    if err != nil {
        panic(err)
    }
    fmt.Println("Users :", users)
}

Run tests

Configure the tests for your instance by editing example.config.yml and renaming it config.yml

then run the tests :

$ go test -v .

Docs

type Client

type Client struct {
	Apps          *Apps
	AppsConfig    *AppsConfig
	GroupFolders  *GroupFolders
	Notifications *Notifications
	Shares        *Shares
	Users         *Users
	Groups        *Groups
}

Client is the API client that performs all operations against a Nextcloud server.

func NewClient

func NewClient(hostname string) (*Client, error)

NewClient create a new Client from the Nextcloud Instance URL

func (*Client) Login

func (c *Client) Login(username string, password string) error

Login perform login and create a session with the Nextcloud API.

func (*Client) Logout

func (c *Client) Logout() error

Logout logs out from the Nextcloud API, close the session and delete session's cookie

type Apps

type Apps struct {
}

Apps contains all Apps available actions

func (*Apps) Disable

func (a *Apps) Disable(name string) error

Disable disables an app

func (*Apps) Enable

func (a *Apps) Enable(name string) error

Enable enables an app

func (*Apps) Infos

func (a *Apps) Infos(name string) (types.App, error)

Infos return the app's details

func (*Apps) List

func (a *Apps) List() ([]string, error)

List return the list of the Nextcloud Apps

func (*Apps) ListDisabled

func (a *Apps) ListDisabled() ([]string, error)

ListDisabled lists the disabled apps

func (*Apps) ListEnabled

func (a *Apps) ListEnabled() ([]string, error)

ListEnabled lists the enabled apps

type AppsConfig

type AppsConfig struct {
}

AppsConfig contains all Apps Configuration available actions

func (*AppsConfig) DeleteValue

func (a *AppsConfig) DeleteValue(id, key, value string) error

DeleteValue delete the config value and (!! be careful !!) the key

func (*AppsConfig) Details

func (a *AppsConfig) Details(appID string) (map[string]string, error)

Details returns all the config's key, values pair of the app

func (*AppsConfig) Get

func (a *AppsConfig) Get() (map[string]map[string]string, error)

Get returns all apps AppConfigDetails

func (*AppsConfig) Keys

func (a *AppsConfig) Keys(id string) (keys []string, err error)

Keys returns the app's config keys

func (*AppsConfig) List

func (a *AppsConfig) List() (apps []string, err error)

List lists all the available apps

func (*AppsConfig) SetValue

func (a *AppsConfig) SetValue(id, key, value string) error

SetValue set the config value for the given app's key

func (*AppsConfig) Value

func (a *AppsConfig) Value(id, key string) (string, error)

Value get the config value for the given app's key

type AppsConfigI

type AppsConfigI interface {
	List() (apps []string, err error)
	Keys(id string) (keys []string, err error)
	Value(id, key string) (string, error)
	SetValue(id, key, value string) error
	DeleteValue(id, key, value string) error
	Get() (map[string]map[string]string, error)
	Details(appID string) (map[string]string, error)
}

AppsConfigI available methods

type AppsI

type AppsI interface {
	List() ([]string, error)
	ListEnabled() ([]string, error)
	ListDisabled() ([]string, error)
	Infos(name string) (types.App, error)
	Enable(name string) error
	Disable(name string) error
}

AppsI available methods

func (*Client) Monitoring

func (c *Client) Monitoring() (*types.Monitoring, error)

Monitoring return nextcloud monitoring statistics

type GroupFolders

type GroupFolders struct {
}

GroupFolders contains all Groups Folders available actions

func (*GroupFolders) AddGroup

func (g *GroupFolders) AddGroup(folderID int, groupName string) error

AddGroup adds group to folder

func (*GroupFolders) Create

func (g *GroupFolders) Create(name string) (id int, err error)

Create creates a group folder

func (*GroupFolders) Get

func (g *GroupFolders) Get(id int) (types.GroupFolder, error)

Get returns the group folder details

func (*GroupFolders) List

func (g *GroupFolders) List() (map[int]types.GroupFolder, error)

List returns the groups folders

func (*GroupFolders) RemoveGroup

func (g *GroupFolders) RemoveGroup(folderID int, groupName string) error

RemoveGroup remove a group from the group folder

func (*GroupFolders) Rename

func (g *GroupFolders) Rename(groupID int, name string) error

Rename renames the group folder

func (*GroupFolders) SetGroupPermissions

func (g *GroupFolders) SetGroupPermissions(folderID int, groupName string, permission types.SharePermission) error

SetGroupPermissions set groups permissions

func (*GroupFolders) SetQuota

func (g *GroupFolders) SetQuota(folderID int, quota int) error

SetQuota set quota on the group folder. quota in bytes, use -3 for unlimited

type GroupFoldersI

type GroupFoldersI interface {
	List() (map[int]types.GroupFolder, error)
	Get(id int) (types.GroupFolder, error)
	Create(name string) (id int, err error)
	Rename(groupID int, name string) error
	AddGroup(folderID int, groupName string) error
	RemoveGroup(folderID int, groupName string) error
	SetGroupPermissions(folderID int, groupName string, permission types.SharePermission) error
	SetQuota(folderID int, quota int) error
}

GroupFoldersI available methods

type Groups

type Groups struct {
}

Groups contains all Groups available actions

func (*Groups) Create

func (g *Groups) Create(name string) error

Create creates a group

func (*Groups) Delete

func (g *Groups) Delete(name string) error

Delete deletes the group

func (*Groups) List

func (g *Groups) List() ([]string, error)

List lists the Nextcloud groups

func (*Groups) ListDetails

func (g *Groups) ListDetails() ([]types.Group, error)

ListDetails lists the Nextcloud groups

func (g *Groups) Search(search string) ([]string, error)

Search return the list of groups matching the search string

func (*Groups) SubAdminList

func (g *Groups) SubAdminList(name string) ([]string, error)

SubAdminList lists the group's subadmins

func (*Groups) Users

func (g *Groups) Users(name string) ([]string, error)

Users list the group's users

type GroupsI

type GroupsI interface {
	List() ([]string, error)
	ListDetails() ([]types.Group, error)
	Users(name string) ([]string, error)
	Search(search string) ([]string, error)
	Create(name string) error
	Delete(name string) error
	SubAdminList(name string) ([]string, error)
}

GroupsI available methods

type Notifications

type Notifications struct {
}

Notifications contains all Notifications available actions

func (*Notifications) AdminAvailable

func (n *Notifications) AdminAvailable() error

AdminAvailable returns an error if the admin-notifications app is not installed

func (*Notifications) Available

func (n *Notifications) Available() error

Available returns an error if the notifications app is not installed

func (*Notifications) Create

func (n *Notifications) Create(userID, title, message string) error

Create creates a notification (if the user is an admin)

func (*Notifications) Delete

func (n *Notifications) Delete(id int) error

Delete deletes the notification corresponding to the id

func (*Notifications) DeleteAll

func (n *Notifications) DeleteAll() error

DeleteAll deletes all notifications

func (*Notifications) Get

func (n *Notifications) Get(id int) (types.Notification, error)

Get returns the notification corresponding to the id

func (*Notifications) List

func (n *Notifications) List() ([]types.Notification, error)

List returns all the notifications

type NotificationsI

type NotificationsI interface {
	List() ([]types.Notification, error)
	Get(id int) (types.Notification, error)
	Delete(id int) error
	DeleteAll() error
	Create(userID, title, message string) error
	AdminAvailable() error
	Available() error
}

NotificationsI available methods

type Routes

type Routes struct {
}

Routes references the available routes

type Shares

type Shares struct {
}

Shares contains all Shares available actions

func (*Shares) Create

func (s *Shares) Create(
	path string,
	shareType types.ShareType,
	permission types.SharePermission,
	shareWith string,
	publicUpload bool,
	password string,
) (types.Share, error)

Create create a share

func (*Shares) Delete

func (s *Shares) Delete(shareID int) error

Delete Remove the given share.

func (*Shares) Get

func (s *Shares) Get(shareID string) (types.Share, error)

Get information about a known Share

func (*Shares) GetFromPath

func (s *Shares) GetFromPath(path string, reshares bool, subfiles bool) ([]types.Share, error)

GetFromPath return shares from a specific file or folder

func (*Shares) List

func (s *Shares) List() ([]types.Share, error)

List list all shares of the logged in user

func (*Shares) Update

func (s *Shares) Update(shareUpdate types.ShareUpdate) error

Update update share details expireDate expireDate expects a well formatted date string, e.g. YYYY-MM-DD

func (*Shares) UpdateExpireDate

func (s *Shares) UpdateExpireDate(shareID int, expireDate string) error

UpdateExpireDate updates the share's expire date expireDate expects a well formatted date string, e.g. YYYY-MM-DD

func (*Shares) UpdatePassword

func (s *Shares) UpdatePassword(shareID int, password string) error

UpdatePassword updates share password

func (*Shares) UpdatePermissions

func (s *Shares) UpdatePermissions(shareID int, permissions types.SharePermission) error

UpdatePermissions update permissions

func (*Shares) UpdatePublicUpload

func (s *Shares) UpdatePublicUpload(shareID int, public bool) error

UpdatePublicUpload enable or disable public upload

type SharesI

type SharesI interface {
	List() ([]types.Share, error)
	GetFromPath(path string, reshares bool, subfiles bool) ([]types.Share, error)
	Get(shareID string) (types.Share, error)
	Create(
		path string,
		shareType types.ShareType,
		permission types.SharePermission,
		shareWith string,
		publicUpload bool,
		password string,
	) (types.Share, error)
	Delete(shareID int) error
	Update(shareUpdate types.ShareUpdate) error
	UpdateExpireDate(shareID int, expireDate string) error
	UpdatePublicUpload(shareID int, public bool) error
	UpdatePassword(shareID int, password string) error
	UpdatePermissions(shareID int, permissions types.SharePermission) error
}

SharesI available methods

type Users

type Users struct {
}

Users contains all Users available actions

func (*Users) Create

func (u *Users) Create(username string, password string, user *types.User) error

Create create a new user

func (*Users) CreateWithoutPassword

func (u *Users) CreateWithoutPassword(username, email, displayName string) error

CreateWithoutPassword create a user without provisioning a password, the email address must be provided to send an init password email

func (*Users) Delete

func (u *Users) Delete(name string) error

Delete delete the user

func (*Users) Disable

func (u *Users) Disable(name string) error

Disable disables the user

func (*Users) Enable

func (u *Users) Enable(name string) error

Enable enables the user

func (*Users) Get

func (u *Users) Get(name string) (*types.User, error)

Get return the details about the specified user

func (*Users) GroupAdd

func (u *Users) GroupAdd(name string, group string) error

GroupAdd adds a the user to the group

func (*Users) GroupDemote

func (u *Users) GroupDemote(name string, group string) error

GroupDemote demotes the user

func (*Users) GroupList

func (u *Users) GroupList(name string) ([]string, error)

GroupList lists the user's groups

func (*Users) GroupPromote

func (u *Users) GroupPromote(name string, group string) error

GroupPromote promotes the user as group admin

func (*Users) GroupRemove

func (u *Users) GroupRemove(name string, group string) error

GroupRemove removes the user from the group

func (*Users) GroupSubAdminList

func (u *Users) GroupSubAdminList(name string) ([]string, error)

GroupSubAdminList lists the groups where he is subadmin

func (*Users) List

func (u *Users) List() ([]string, error)

List return the Nextcloud'user list

func (*Users) ListDetails

func (u *Users) ListDetails() (map[string]types.User, error)

ListDetails return a map of user with details

func (u *Users) Search(search string) ([]string, error)

Search returns the users whose name match the search string

func (*Users) SendWelcomeEmail

func (u *Users) SendWelcomeEmail(name string) error

SendWelcomeEmail (re)send the welcome mail to the user (return an error if the user has not configured his email)

func (*Users) Update

func (u *Users) Update(user *types.User) error

Update takes a *types.Users struct to update the user's information

func (*Users) UpdateAddress

func (u *Users) UpdateAddress(name string, address string) error

UpdateAddress update the user's address

func (*Users) UpdateDisplayName

func (u *Users) UpdateDisplayName(name string, displayName string) error

UpdateDisplayName update the user's display name

func (*Users) UpdateEmail

func (u *Users) UpdateEmail(name string, email string) error

UpdateEmail update the user's email

func (*Users) UpdatePassword

func (u *Users) UpdatePassword(name string, password string) error

UpdatePassword update the user's password

func (*Users) UpdatePhone

func (u *Users) UpdatePhone(name string, phone string) error

UpdatePhone update the user's phone

func (*Users) UpdateQuota

func (u *Users) UpdateQuota(name string, quota int) error

UpdateQuota update the user's quota (bytes)

func (*Users) UpdateTwitter

func (u *Users) UpdateTwitter(name string, twitter string) error

UpdateTwitter update the user's twitter

func (*Users) UpdateWebSite

func (u *Users) UpdateWebSite(name string, website string) error

UpdateWebSite update the user's website

type UsersI

type UsersI interface {
	List() ([]string, error)
	ListDetails() (map[string]types.User, error)
	Get(name string) (*types.User, error)
	Search(search string) ([]string, error)
	Create(username string, password string, user *types.User) error
	CreateWithoutPassword(username, email, displayName string) error
	Delete(name string) error
	Enable(name string) error
	Disable(name string) error
	SendWelcomeEmail(name string) error
	Update(user *types.User) error
	UpdateEmail(name string, email string) error
	UpdateDisplayName(name string, displayName string) error
	UpdatePhone(name string, phone string) error
	UpdateAddress(name string, address string) error
	UpdateWebSite(name string, website string) error
	UpdateTwitter(name string, twitter string) error
	UpdatePassword(name string, password string) error
	UpdateQuota(name string, quota int) error
	GroupList(name string) ([]string, error)
	GroupAdd(name string, group string) error
	GroupRemove(name string, group string) error
	GroupPromote(name string, group string) error
	GroupDemote(name string, group string) error
	GroupSubAdminList(name string) ([]string, error)
}

UsersI available methods