mirror of
https://github.com/passbolt/go-passbolt.git
synced 2025-05-10 01:48:22 +00:00
Merge pull request #41 from passbolt/v5-server-settings
Some checks failed
Go / test (push) Has been cancelled
Some checks failed
Go / test (push) Has been cancelled
V5 server settings
This commit is contained in:
commit
d4132c756b
4 changed files with 151 additions and 0 deletions
|
@ -129,6 +129,12 @@ func (c *Client) Login(ctx context.Context) error {
|
||||||
c.userPublicKey = user.GPGKey.ArmoredKey
|
c.userPublicKey = user.GPGKey.ArmoredKey
|
||||||
c.userID = user.ID
|
c.userID = user.ID
|
||||||
|
|
||||||
|
// after Login, fetch MetadataTypeSettings to finish the Client Setup
|
||||||
|
c.setMetadataTypeSettings(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Setup Metadata Type Settings: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,9 @@ type Client struct {
|
||||||
userPublicKey string
|
userPublicKey string
|
||||||
userID string
|
userID string
|
||||||
|
|
||||||
|
// Server Settings Determining which Resource Types we can use
|
||||||
|
metadataTypeSettings MetadataTypeSettings
|
||||||
|
|
||||||
// used for solving MFA challenges. You can block this to for example wait for user input.
|
// 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 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
|
// You need to Return the Cookie that Passbolt expects to verify you MFA, usually it is called passbolt_mfa
|
||||||
|
@ -205,3 +208,26 @@ func (c *Client) GetPublicKey(ctx context.Context) (string, string, error) {
|
||||||
}
|
}
|
||||||
return body.Keydata, privateKeyObj.GetFingerprint(), nil
|
return body.Keydata, privateKeyObj.GetFingerprint(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// setMetadataTypeSettings Gets and configures the Client to use the Types the Server wants us to use
|
||||||
|
func (c *Client) setMetadataTypeSettings(ctx context.Context) error {
|
||||||
|
settings, err := c.GetServerSettings(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Getting Server Settings: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if settings.Passbolt.IsPluginEnabled("metadata") {
|
||||||
|
c.log("Server has metadata plugin enabled, is v5 or Higher")
|
||||||
|
metadataTypeSettings, err := c.GetMetadataTypeSettings(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Getting Metadata Type Settings: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
c.log("metadataTypeSettings: %+v", metadataTypeSettings)
|
||||||
|
c.metadataTypeSettings = *metadataTypeSettings
|
||||||
|
} else {
|
||||||
|
c.log("Server has metadata plugin disabled or not installed, Server is v4")
|
||||||
|
c.metadataTypeSettings = getV4DefaultMetadataTypeSettings()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
73
api/metadata_settings.go
Normal file
73
api/metadata_settings.go
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PassboltAPIVersionType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PassboltAPIVersionTypeV4 PassboltAPIVersionType = "v4"
|
||||||
|
PassboltAPIVersionTypeV5 = "v5"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s PassboltAPIVersionType) IsValid() bool {
|
||||||
|
switch s {
|
||||||
|
case PassboltAPIVersionTypeV4, PassboltAPIVersionTypeV5:
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// MetadataTypeSettings Contains the Servers Settings about which Types to use
|
||||||
|
type MetadataTypeSettings struct {
|
||||||
|
DefaultResourceType PassboltAPIVersionType `json:"default_resource_types"`
|
||||||
|
DefaultFolderType PassboltAPIVersionType `json:"default_folder_type"`
|
||||||
|
DefaultTagType PassboltAPIVersionType `json:"default_tag_type"`
|
||||||
|
DefaultCommentType PassboltAPIVersionType `json:"default_comment_type"`
|
||||||
|
AllowCreationOfV5Resources bool `json:"allow_creation_of_v5_resources"`
|
||||||
|
AllowCreationOfV5Folders bool `json:"allow_creation_of_v5_folders"`
|
||||||
|
AllowCreationOfV5Tags bool `json:"allow_creation_of_v5_tags"`
|
||||||
|
AllowCreationOfV5Comments bool `json:"allow_creation_of_v5_comments"`
|
||||||
|
AllowCreationOfV4Resources bool `json:"allow_creation_of_v4_resources"`
|
||||||
|
AllowCreationOfV4Folders bool `json:"allow_creation_of_v4_folders"`
|
||||||
|
AllowCreationOfV4Tags bool `json:"allow_creation_of_v4_tags"`
|
||||||
|
AllowCreationOfV4Comments bool `json:"allow_creation_of_v4_comments"`
|
||||||
|
AllowV4V5Upgrade bool `json:"allow_v4_v5_upgrade"`
|
||||||
|
AllowV4V5Downgrade bool `json:"allow_v5_v4_downgrade"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func getV4DefaultMetadataTypeSettings() MetadataTypeSettings {
|
||||||
|
return MetadataTypeSettings{
|
||||||
|
DefaultResourceType: PassboltAPIVersionTypeV4,
|
||||||
|
DefaultFolderType: PassboltAPIVersionTypeV4,
|
||||||
|
DefaultTagType: PassboltAPIVersionTypeV4,
|
||||||
|
DefaultCommentType: PassboltAPIVersionTypeV4,
|
||||||
|
AllowCreationOfV5Resources: false,
|
||||||
|
AllowCreationOfV5Folders: false,
|
||||||
|
AllowCreationOfV5Tags: false,
|
||||||
|
AllowCreationOfV5Comments: false,
|
||||||
|
AllowCreationOfV4Resources: true,
|
||||||
|
AllowCreationOfV4Folders: true,
|
||||||
|
AllowCreationOfV4Tags: true,
|
||||||
|
AllowCreationOfV4Comments: true,
|
||||||
|
AllowV4V5Upgrade: false,
|
||||||
|
AllowV4V5Downgrade: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetMetadataTypeSettings gets the Servers Settings about which Types to use
|
||||||
|
func (c *Client) GetMetadataTypeSettings(ctx context.Context) (*MetadataTypeSettings, error) {
|
||||||
|
msg, err := c.DoCustomRequest(ctx, "GET", "/metadata/types/settings.json", "v3", nil, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var metadataSettings MetadataTypeSettings
|
||||||
|
err = json.Unmarshal(msg.Body, &metadataSettings)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &metadataSettings, nil
|
||||||
|
}
|
46
api/settings.go
Normal file
46
api/settings.go
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ServerSettingsResponse contains all Servers Settings
|
||||||
|
type ServerSettingsResponse struct {
|
||||||
|
Passbolt ServerPassboltSettings `json:"passbolt"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServerPassboltSettings contains Passbolt specific server settings
|
||||||
|
type ServerPassboltSettings struct {
|
||||||
|
Plugins map[string]ServerPassboltPluginSettings `json:"plugins"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServerPassboltPluginSettings contains the Settings of a Specific Passbolt Plugin
|
||||||
|
type ServerPassboltPluginSettings struct {
|
||||||
|
Enabled bool `json:"enabled"`
|
||||||
|
Version string `json:"version"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetServerSettings gets the Server Settings
|
||||||
|
func (c *Client) GetServerSettings(ctx context.Context) (*ServerSettingsResponse, error) {
|
||||||
|
msg, err := c.DoCustomRequest(ctx, "GET", "/settings.json", "v3", nil, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var settings ServerSettingsResponse
|
||||||
|
err = json.Unmarshal(msg.Body, &settings)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &settings, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ps *ServerPassboltSettings) IsPluginEnabled(name string) bool {
|
||||||
|
p, ok := ps.Plugins[name]
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return p.Enabled
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue