mirror of
https://github.com/passbolt/go-passbolt.git
synced 2025-05-09 01:38:21 +00:00
109 lines
3 KiB
Go
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
|
|
}
|