go-passbolt/api/share.go
2022-01-21 13:46:26 +01:00

109 lines
3 KiB
Go

package api
import (
"context"
"encoding/json"
"fmt"
)
// ResourceShareRequest is a ResourceShareRequest
type ResourceShareRequest struct {
Permissions []Permission `json:"permissions,omitempty"`
Secrets []Secret `json:"secrets,omitempty"`
}
// ResourceShareSimulationResult is the Result of a Sharing Simulation
type ResourceShareSimulationResult struct {
Changes ResourceShareSimulationChanges `json:"changes,omitempty"`
}
// ResourceShareSimulationChanges contains the Actual Changes
type ResourceShareSimulationChanges struct {
Added []ResourceShareSimulationChange `json:"added,omitempty"`
Removed []ResourceShareSimulationChange `json:"removed,omitempty"`
}
// ResourceShareSimulationChange is a single change
type ResourceShareSimulationChange struct {
User ResourceShareSimulationUser `json:"user,omitempty"`
}
// ResourceShareSimulationUser contains the users id
type ResourceShareSimulationUser struct {
ID string `json:"id,omitempty"`
}
// ARO is a User or a Group
type ARO struct {
User
Group
}
// SearchAROsOptions are all available query parameters
type SearchAROsOptions struct {
FilterSearch string `url:"filter[search],omitempty"`
}
// SearchAROs gets all Passbolt AROs
func (c *Client) SearchAROs(ctx context.Context, opts SearchAROsOptions) ([]ARO, error) {
//set is_new to true in permission
msg, err := c.DoCustomRequest(ctx, "GET", "/share/search-aros.json", "v2", nil, opts)
if err != nil {
return nil, err
}
var aros []ARO
err = json.Unmarshal(msg.Body, &aros)
if err != nil {
return nil, err
}
return aros, nil
}
// ShareResource Shares a Resource with AROs
func (c *Client) ShareResource(ctx context.Context, resourceID string, shareRequest ResourceShareRequest) error {
err := checkUUIDFormat(resourceID)
if err != nil {
return fmt.Errorf("Checking ID format: %w", err)
}
_, err = c.DoCustomRequest(ctx, "PUT", "/share/resource/"+resourceID+".json", "v2", shareRequest, nil)
if err != nil {
return err
}
return nil
}
// ShareFolder Shares a Folder with AROs
func (c *Client) ShareFolder(ctx context.Context, folderID string, permissions []Permission) error {
err := checkUUIDFormat(folderID)
if err != nil {
return fmt.Errorf("Checking ID format: %w", err)
}
f := Folder{Permissions: permissions}
_, err = c.DoCustomRequest(ctx, "PUT", "/share/folder/"+folderID+".json", "v2", f, nil)
if err != nil {
return err
}
return nil
}
// SimulateShareResource Simulates Shareing a Resource with AROs
func (c *Client) SimulateShareResource(ctx context.Context, resourceID string, shareRequest ResourceShareRequest) (*ResourceShareSimulationResult, error) {
err := checkUUIDFormat(resourceID)
if err != nil {
return nil, fmt.Errorf("Checking ID format: %w", err)
}
msg, err := c.DoCustomRequest(ctx, "POST", "/share/simulate/resource/"+resourceID+".json", "v2", shareRequest, nil)
if err != nil {
return nil, err
}
var res ResourceShareSimulationResult
err = json.Unmarshal(msg.Body, &res)
if err != nil {
return nil, err
}
return &res, nil
}