diff --git a/api/client.go b/api/client.go index 0ce0701..364ba75 100644 --- a/api/client.go +++ b/api/client.go @@ -33,6 +33,9 @@ type Client struct { // Server Settings Determining which Resource Types we can use metadataTypeSettings MetadataTypeSettings + // Server Settings Determining which Metadata Keys to use + metadataKeySettings MetadataKeySettings + // used for solving MFA challenges. You can block this to for example wait for user input. // You shouden't run any unrelated API Calls while you are in this callback. // You need to Return the Cookie that Passbolt expects to verify you MFA, usually it is called passbolt_mfa @@ -212,16 +215,28 @@ func (c *Client) setMetadataTypeSettings(ctx context.Context) error { if settings.Passbolt.IsPluginEnabled("metadata") { c.log("Server has metadata plugin enabled, is v5 or Higher") - metadataTypeSettings, err := c.GetMetadataTypeSettings(ctx) + metadataTypeSettings, err := c.GetServerMetadataTypeSettings(ctx) if err != nil { return fmt.Errorf("Getting Metadata Type Settings: %w", err) } c.log("metadataTypeSettings: %+v", metadataTypeSettings) c.metadataTypeSettings = *metadataTypeSettings + + metadataKeySettings, err := c.GetServerMetadataKeySettings(ctx) + if err != nil { + return fmt.Errorf("Getting Metadata Key Settings: %w", err) + } + + c.log("metadataKeySettings: %+v", metadataKeySettings) + c.metadataKeySettings = *metadataKeySettings } else { c.log("Server has metadata plugin disabled or not installed, Server is v4") c.metadataTypeSettings = getV4DefaultMetadataTypeSettings() + c.metadataKeySettings = MetadataKeySettings{ + AllowUsageOfPersonalKeys: true, + AllowZeroKnowledgeKeyShare: false, + } } return nil } diff --git a/api/metadata_settings.go b/api/metadata_settings.go index ae80715..92ac9a9 100644 --- a/api/metadata_settings.go +++ b/api/metadata_settings.go @@ -38,6 +38,12 @@ type MetadataTypeSettings struct { AllowV4V5Downgrade bool `json:"allow_v5_v4_downgrade"` } +// MetadataTypeSettings Contains the Servers Settings about which Types to use +type MetadataKeySettings struct { + AllowUsageOfPersonalKeys bool `json:"allow_usage_of_personal_keys"` + AllowZeroKnowledgeKeyShare bool `json:"zero_knowledge_key_share"` +} + func getV4DefaultMetadataTypeSettings() MetadataTypeSettings { return MetadataTypeSettings{ DefaultResourceType: PassboltAPIVersionTypeV4, @@ -57,8 +63,13 @@ func getV4DefaultMetadataTypeSettings() MetadataTypeSettings { } } -// GetMetadataTypeSettings gets the Servers Settings about which Types to use -func (c *Client) GetMetadataTypeSettings(ctx context.Context) (*MetadataTypeSettings, error) { +// MetadataTypeSettings Gives the Current MetadataTypeSettings +func (c *Client) MetadataTypeSettings() MetadataTypeSettings { + return c.metadataTypeSettings +} + +// GetServerMetadataTypeSettings gets the Servers Settings about which Types to use, usually you should use MetadataTypeSettings instead +func (c *Client) GetServerMetadataTypeSettings(ctx context.Context) (*MetadataTypeSettings, error) { msg, err := c.DoCustomRequestV5(ctx, "GET", "/metadata/types/settings.json", nil, nil) if err != nil { return nil, err @@ -71,3 +82,23 @@ func (c *Client) GetMetadataTypeSettings(ctx context.Context) (*MetadataTypeSett } return &metadataSettings, nil } + +// MetadataKeySettings Gives the Current MetadataKeySettings +func (c *Client) MetadataKeySettings() MetadataKeySettings { + return c.metadataKeySettings +} + +// GetServerMetadataKeySettings gets the Servers Settings about which Key to use, usually you should use MetadataKeySettings instead +func (c *Client) GetServerMetadataKeySettings(ctx context.Context) (*MetadataKeySettings, error) { + msg, err := c.DoCustomRequestV5(ctx, "GET", "/metadata/keys/settings.json", nil, nil) + if err != nil { + return nil, err + } + + var metadataKeySettings MetadataKeySettings + err = json.Unmarshal(msg.Body, &metadataKeySettings) + if err != nil { + return nil, err + } + return &metadataKeySettings, nil +}