From e0a8e2048c25cf457ef7694d64f6fdfcc18acede Mon Sep 17 00:00:00 2001 From: Quentin David Date: Fri, 2 Jan 2026 16:13:10 +0100 Subject: [PATCH 1/4] fix(payments): EN-601 Use v3 with get config --- cmd/payments/connectors/configs/getconfig.go | 79 +++++++++++++++++-- cmd/payments/connectors/views/adyen.go | 37 ++++++--- cmd/payments/connectors/views/atlar.go | 41 +++++----- .../connectors/views/banking_circle.go | 31 ++++++-- cmd/payments/connectors/views/column.go | 22 ++++-- .../connectors/views/currency_cloud.go | 28 +++++-- cmd/payments/connectors/views/mangopay.go | 20 +++++ cmd/payments/connectors/views/modulr.go | 20 +++++ cmd/payments/connectors/views/moneycorp.go | 20 +++++ cmd/payments/connectors/views/qonto.go | 23 ++++-- cmd/payments/connectors/views/stripe.go | 18 +++++ cmd/payments/connectors/views/wise.go | 18 +++++ membershipclient/go.mod | 2 +- membershipclient/go.sum | 1 + 14 files changed, 296 insertions(+), 64 deletions(-) diff --git a/cmd/payments/connectors/configs/getconfig.go b/cmd/payments/connectors/configs/getconfig.go index cf8e3400..83b53069 100644 --- a/cmd/payments/connectors/configs/getconfig.go +++ b/cmd/payments/connectors/configs/getconfig.go @@ -18,9 +18,10 @@ import ( ) type PaymentsGetConfigStore struct { - ConnectorConfig *shared.ConnectorConfigResponse `json:"connectorConfig"` - Provider string `json:"provider"` - ConnectorID string `json:"connectorId"` + ConnectorConfig *shared.ConnectorConfigResponse `json:"connectorConfig"` + V3ConnectorConfig *shared.V3GetConnectorConfigResponse `json:"v3ConnectorConfig,omitempty"` + Provider string `json:"provider"` + ConnectorID string `json:"connectorId"` } type PaymentsGetConfigController struct { @@ -78,6 +79,29 @@ func (c *PaymentsGetConfigController) Run(cmd *cobra.Command, args []string) (fc connectorID := fctl.GetString(cmd, c.connectorIDFlag) switch c.PaymentsVersion { + case versions.V3: + if connectorID == "" { + return nil, fmt.Errorf("connector-id is required for v3") + } + + response, err := store.Client().Payments.V3.GetConnectorConfig(cmd.Context(), operations.V3GetConnectorConfigRequest{ + ConnectorID: connectorID, + }) + if err != nil { + return nil, err + } + if response.StatusCode >= 300 { + return nil, fmt.Errorf("unexpected status code: %d", response.StatusCode) + } + + if response.V3GetConnectorConfigResponse == nil { + return nil, fmt.Errorf("unexpected response: %v", response) + } + + c.store.V3ConnectorConfig = response.V3GetConnectorConfigResponse + c.store.ConnectorID = connectorID + c.store.Provider = string(response.V3GetConnectorConfigResponse.Data.Type) + case versions.V0: if provider == "" { return nil, fmt.Errorf("provider is required") @@ -161,6 +185,50 @@ func (c *PaymentsGetConfigController) Run(cmd *cobra.Command, args []string) (fc // TODO: This need to use the ui.NewListModel func (c *PaymentsGetConfigController) Render(cmd *cobra.Command, args []string) error { + if c.PaymentsVersion == versions.V3 { + return c.renderV3(cmd, args) + } + return c.renderV1V2(cmd, args) +} + +func (c *PaymentsGetConfigController) renderV3(cmd *cobra.Command, args []string) error { + var err error + provider := c.store.Provider + switch provider { + case internal.StripeConnector: + err = views.DisplayStripeConfigV3(cmd, c.store.V3ConnectorConfig) + case internal.ModulrConnector: + err = views.DisplayModulrConfigV3(cmd, c.store.V3ConnectorConfig) + case internal.BankingCircleConnector: + err = views.DisplayBankingCircleConfigV3(cmd, c.store.V3ConnectorConfig) + case internal.CurrencyCloudConnector: + err = views.DisplayCurrencyCloudConfigV3(cmd, c.store.V3ConnectorConfig) + case internal.WiseConnector: + err = views.DisplayWiseConfigV3(cmd, c.store.V3ConnectorConfig) + case internal.MangoPayConnector: + err = views.DisplayMangopayConfigV3(cmd, c.store.V3ConnectorConfig) + case internal.MoneycorpConnector: + err = views.DisplayMoneycorpConfigV3(cmd, c.store.V3ConnectorConfig) + case internal.AtlarConnector: + err = views.DisplayAtlarConfigV3(cmd, c.store.V3ConnectorConfig) + case internal.AdyenConnector: + err = views.DisplayAdyenConfigV3(cmd, c.store.V3ConnectorConfig) + case internal.QontoConnector: + err = views.DisplayQontoConfigV3(cmd, c.store.V3ConnectorConfig) + case internal.ColumnConnector: + err = views.DisplayColumnConfigV3(cmd, c.store.V3ConnectorConfig) + default: + pterm.Error.WithWriter(cmd.OutOrStderr()).Printfln("Connection unknown.") + } + + return err +} + +func (c *PaymentsGetConfigController) renderV1V2(cmd *cobra.Command, args []string) error { + if c.store.ConnectorConfig == nil { + return fmt.Errorf("no connector config available") + } + var err error switch c.store.Provider { case internal.StripeConnector: @@ -181,14 +249,9 @@ func (c *PaymentsGetConfigController) Render(cmd *cobra.Command, args []string) err = views.DisplayAtlarConfig(cmd, c.store.ConnectorConfig) case internal.AdyenConnector: err = views.DisplayAdyenConfig(cmd, c.store.ConnectorConfig) - case internal.QontoConnector: - err = views.DisplayQontoConfig(cmd, c.store.ConnectorConfig) - case internal.ColumnConnector: - err = views.DisplayColumnConfig(cmd, c.store.ConnectorConfig) default: pterm.Error.WithWriter(cmd.OutOrStderr()).Printfln("Connection unknown.") } return err - } diff --git a/cmd/payments/connectors/views/adyen.go b/cmd/payments/connectors/views/adyen.go index e062e6a1..a316a8b6 100644 --- a/cmd/payments/connectors/views/adyen.go +++ b/cmd/payments/connectors/views/adyen.go @@ -1,6 +1,7 @@ package views import ( + fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" @@ -14,19 +15,29 @@ func DisplayAdyenConfig(cmd *cobra.Command, connectorConfig *shared.ConnectorCon tableData = append(tableData, []string{pterm.LightCyan("Name:"), config.Name}) tableData = append(tableData, []string{pterm.LightCyan("ApiKey:"), config.APIKey}) tableData = append(tableData, []string{pterm.LightCyan("HMACKey:"), config.HmacKey}) - tableData = append(tableData, []string{pterm.LightCyan("LiveEndpointPrefix:"), func() string { - if config.LiveEndpointPrefix == nil { - return "" - } - - return *config.LiveEndpointPrefix - }()}) - tableData = append(tableData, []string{pterm.LightCyan("Polling Period:"), func() string { - if config.PollingPeriod == nil { - return "" - } - return *config.PollingPeriod - }()}) + tableData = append(tableData, []string{pterm.LightCyan("LiveEndpointPrefix:"), fctl.StringPointerToString(config.LiveEndpointPrefix)}) + tableData = append(tableData, []string{pterm.LightCyan("Polling Period:"), fctl.StringPointerToString(config.PollingPeriod)}) + + if err := pterm.DefaultTable. + WithWriter(cmd.OutOrStdout()). + WithData(tableData). + Render(); err != nil { + return err + } + return nil +} + +func DisplayAdyenConfigV3(cmd *cobra.Command, v3Config *shared.V3GetConnectorConfigResponse) error { + config := v3Config.Data.V3AdyenConfig + + tableData := pterm.TableData{} + tableData = append(tableData, []string{pterm.LightCyan("Name:"), config.Name}) + tableData = append(tableData, []string{pterm.LightCyan("ApiKey:"), config.APIKey}) + tableData = append(tableData, []string{pterm.LightCyan("CompanyID:"), config.CompanyID}) + tableData = append(tableData, []string{pterm.LightCyan("LiveEndpointPrefix:"), fctl.StringPointerToString(config.LiveEndpointPrefix)}) + tableData = append(tableData, []string{pterm.LightCyan("Polling Period:"), fctl.StringPointerToString(config.PollingPeriod)}) + tableData = append(tableData, []string{pterm.LightCyan("WebhookPassword:"), fctl.StringPointerToString(config.WebhookPassword)}) + tableData = append(tableData, []string{pterm.LightCyan("WebhookUsername:"), fctl.StringPointerToString(config.WebhookUsername)}) if err := pterm.DefaultTable. WithWriter(cmd.OutOrStdout()). diff --git a/cmd/payments/connectors/views/atlar.go b/cmd/payments/connectors/views/atlar.go index 6fcf0838..6abdf3a8 100644 --- a/cmd/payments/connectors/views/atlar.go +++ b/cmd/payments/connectors/views/atlar.go @@ -2,6 +2,7 @@ package views import ( "fmt" + fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" @@ -16,30 +17,34 @@ func DisplayAtlarConfig(cmd *cobra.Command, connectorConfig *shared.ConnectorCon tableData = append(tableData, []string{pterm.LightCyan("Name:"), config.Name}) tableData = append(tableData, []string{pterm.LightCyan("AccessKey:"), config.AccessKey}) tableData = append(tableData, []string{pterm.LightCyan("Secret:"), config.Secret}) - tableData = append(tableData, []string{pterm.LightCyan("BaseUrl:"), func() string { - if config.BaseURL == nil { - return "" - } - return *config.BaseURL - }()}) + tableData = append(tableData, []string{pterm.LightCyan("BaseUrl:"), fctl.StringPointerToString(config.BaseURL)}) tableData = append(tableData, []string{pterm.LightCyan("PageSize:"), func() string { if config.PageSize == nil { return "" } return fmt.Sprintf("%d", *config.PageSize) }()}) - tableData = append(tableData, []string{pterm.LightCyan("Polling Period:"), func() string { - if config.PollingPeriod == nil { - return "" - } - return *config.PollingPeriod - }()}) - tableData = append(tableData, []string{pterm.LightCyan("Transfer Initiation Status Polling Period:"), func() string { - if config.TransferInitiationStatusPollingPeriod == nil { - return "" - } - return *config.TransferInitiationStatusPollingPeriod - }()}) + tableData = append(tableData, []string{pterm.LightCyan("Polling Period:"), fctl.StringPointerToString(config.PollingPeriod)}) + tableData = append(tableData, []string{pterm.LightCyan("Transfer Initiation Status Polling Period:"), fctl.StringPointerToString(config.TransferInitiationStatusPollingPeriod)}) + + if err := pterm.DefaultTable. + WithWriter(cmd.OutOrStdout()). + WithData(tableData). + Render(); err != nil { + return err + } + return nil +} + +func DisplayAtlarConfigV3(cmd *cobra.Command, v3Config *shared.V3GetConnectorConfigResponse) error { + config := v3Config.Data.V3AtlarConfig + + tableData := pterm.TableData{} + tableData = append(tableData, []string{pterm.LightCyan("Name:"), config.Name}) + tableData = append(tableData, []string{pterm.LightCyan("AccessKey:"), config.AccessKey}) + tableData = append(tableData, []string{pterm.LightCyan("BaseUrl:"), config.BaseURL}) + tableData = append(tableData, []string{pterm.LightCyan("Polling Period:"), fctl.StringPointerToString(config.PollingPeriod)}) + tableData = append(tableData, []string{pterm.LightCyan("Secret:"), config.Secret}) if err := pterm.DefaultTable. WithWriter(cmd.OutOrStdout()). diff --git a/cmd/payments/connectors/views/banking_circle.go b/cmd/payments/connectors/views/banking_circle.go index 5bb0f371..38ca7f23 100644 --- a/cmd/payments/connectors/views/banking_circle.go +++ b/cmd/payments/connectors/views/banking_circle.go @@ -1,6 +1,7 @@ package views import ( + fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" @@ -16,12 +17,30 @@ func DisplayBankingCircleConfig(cmd *cobra.Command, connectorConfig *shared.Conn tableData = append(tableData, []string{pterm.LightCyan("Password:"), config.Password}) tableData = append(tableData, []string{pterm.LightCyan("Endpoint:"), config.Endpoint}) tableData = append(tableData, []string{pterm.LightCyan("Authorization endpoint:"), config.AuthorizationEndpoint}) - tableData = append(tableData, []string{pterm.LightCyan("Polling Period:"), func() string { - if config.PollingPeriod == nil { - return "" - } - return *config.PollingPeriod - }()}) + tableData = append(tableData, []string{pterm.LightCyan("UserCertificate:"), config.UserCertificate}) + tableData = append(tableData, []string{pterm.LightCyan("UserCertificateKey:"), config.UserCertificateKey}) + + if err := pterm.DefaultTable. + WithWriter(cmd.OutOrStdout()). + WithData(tableData). + Render(); err != nil { + return err + } + return nil +} + +func DisplayBankingCircleConfigV3(cmd *cobra.Command, v3Config *shared.V3GetConnectorConfigResponse) error { + config := v3Config.Data.V3BankingcircleConfig + + tableData := pterm.TableData{} + tableData = append(tableData, []string{pterm.LightCyan("Name:"), config.Name}) + tableData = append(tableData, []string{pterm.LightCyan("Username:"), config.Username}) + tableData = append(tableData, []string{pterm.LightCyan("Password:"), config.Password}) + tableData = append(tableData, []string{pterm.LightCyan("Endpoint:"), config.Endpoint}) + tableData = append(tableData, []string{pterm.LightCyan("Authorization endpoint:"), config.AuthorizationEndpoint}) + tableData = append(tableData, []string{pterm.LightCyan("Polling Period:"), fctl.StringPointerToString(config.PollingPeriod)}) + tableData = append(tableData, []string{pterm.LightCyan("UserCertificate:"), config.UserCertificate}) + tableData = append(tableData, []string{pterm.LightCyan("UserCertificateKey:"), config.UserCertificateKey}) if err := pterm.DefaultTable. WithWriter(cmd.OutOrStdout()). diff --git a/cmd/payments/connectors/views/column.go b/cmd/payments/connectors/views/column.go index 574cec68..fe71bda0 100644 --- a/cmd/payments/connectors/views/column.go +++ b/cmd/payments/connectors/views/column.go @@ -1,7 +1,7 @@ package views import ( - "encoding/json" + fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" @@ -9,12 +9,22 @@ import ( "github.com/formancehq/formance-sdk-go/v3/pkg/models/shared" ) -func DisplayColumnConfig(cmd *cobra.Command, connectorConfig *shared.ConnectorConfigResponse) error { - // Display raw JSON since SDK might not have ColumnConfig type yet - jsonData, err := json.MarshalIndent(connectorConfig.Data, "", " ") - if err != nil { +// Column is a connector implemented in v3, so not compatible with the v1 call. + +func DisplayColumnConfigV3(cmd *cobra.Command, v3Config *shared.V3GetConnectorConfigResponse) error { + config := v3Config.Data.V3ColumnConfig + + tableData := pterm.TableData{} + tableData = append(tableData, []string{pterm.LightCyan("Name:"), config.Name}) + tableData = append(tableData, []string{pterm.LightCyan("APIKey:"), config.APIKey}) + tableData = append(tableData, []string{pterm.LightCyan("Endpoint:"), config.Endpoint}) + tableData = append(tableData, []string{pterm.LightCyan("Polling Period:"), fctl.StringPointerToString(config.PollingPeriod)}) + + if err := pterm.DefaultTable. + WithWriter(cmd.OutOrStdout()). + WithData(tableData). + Render(); err != nil { return err } - pterm.DefaultBox.WithWriter(cmd.OutOrStdout()).WithTitle("Column Configuration").Println(string(jsonData)) return nil } diff --git a/cmd/payments/connectors/views/currency_cloud.go b/cmd/payments/connectors/views/currency_cloud.go index d0dded1f..7a04046f 100644 --- a/cmd/payments/connectors/views/currency_cloud.go +++ b/cmd/payments/connectors/views/currency_cloud.go @@ -1,6 +1,8 @@ package views import ( + fctl "github.com/formancehq/fctl/pkg" + "github.com/pterm/pterm" "github.com/spf13/cobra" @@ -14,12 +16,7 @@ func DisplayCurrencyCloudConfig(cmd *cobra.Command, connectorConfig *shared.Conn tableData = append(tableData, []string{pterm.LightCyan("Name:"), config.Name}) tableData = append(tableData, []string{pterm.LightCyan("API key:"), config.APIKey}) tableData = append(tableData, []string{pterm.LightCyan("Login ID:"), config.LoginID}) - tableData = append(tableData, []string{pterm.LightCyan("Endpoint:"), func() string { - if config.Endpoint == nil { - return "" - } - return *config.Endpoint - }()}) + tableData = append(tableData, []string{pterm.LightCyan("Endpoint:"), fctl.StringPointerToString(config.Endpoint)}) tableData = append(tableData, []string{pterm.LightCyan("Polling Period:"), func() string { if config.PollingPeriod == nil { return "" @@ -35,3 +32,22 @@ func DisplayCurrencyCloudConfig(cmd *cobra.Command, connectorConfig *shared.Conn } return nil } + +func DisplayCurrencyCloudConfigV3(cmd *cobra.Command, v3Config *shared.V3GetConnectorConfigResponse) error { + config := v3Config.Data.V3CurrencycloudConfig + + tableData := pterm.TableData{} + tableData = append(tableData, []string{pterm.LightCyan("Name:"), config.Name}) + tableData = append(tableData, []string{pterm.LightCyan("API key:"), config.APIKey}) + tableData = append(tableData, []string{pterm.LightCyan("Login ID:"), config.LoginID}) + tableData = append(tableData, []string{pterm.LightCyan("Endpoint:"), config.Endpoint}) + tableData = append(tableData, []string{pterm.LightCyan("Polling Period:"), fctl.StringPointerToString(config.PollingPeriod)}) + + if err := pterm.DefaultTable. + WithWriter(cmd.OutOrStdout()). + WithData(tableData). + Render(); err != nil { + return err + } + return nil +} diff --git a/cmd/payments/connectors/views/mangopay.go b/cmd/payments/connectors/views/mangopay.go index b6898978..4a874cc2 100644 --- a/cmd/payments/connectors/views/mangopay.go +++ b/cmd/payments/connectors/views/mangopay.go @@ -1,6 +1,7 @@ package views import ( + fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" @@ -30,3 +31,22 @@ func DisplayMangopayConfig(cmd *cobra.Command, connectorConfig *shared.Connector } return nil } + +func DisplayMangopayConfigV3(cmd *cobra.Command, v3Config *shared.V3GetConnectorConfigResponse) error { + config := v3Config.Data.V3MangopayConfig + + tableData := pterm.TableData{} + tableData = append(tableData, []string{pterm.LightCyan("Name:"), config.Name}) + tableData = append(tableData, []string{pterm.LightCyan("ClientID:"), config.ClientID}) + tableData = append(tableData, []string{pterm.LightCyan("API key:"), config.APIKey}) + tableData = append(tableData, []string{pterm.LightCyan("Endpoint:"), config.Endpoint}) + tableData = append(tableData, []string{pterm.LightCyan("Polling Period:"), fctl.StringPointerToString(config.PollingPeriod)}) + + if err := pterm.DefaultTable. + WithWriter(cmd.OutOrStdout()). + WithData(tableData). + Render(); err != nil { + return err + } + return nil +} diff --git a/cmd/payments/connectors/views/modulr.go b/cmd/payments/connectors/views/modulr.go index 00626a01..cd9ce2ca 100644 --- a/cmd/payments/connectors/views/modulr.go +++ b/cmd/payments/connectors/views/modulr.go @@ -1,6 +1,7 @@ package views import ( + fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" @@ -35,3 +36,22 @@ func DisplayModulrConfig(cmd *cobra.Command, connectorConfig *shared.ConnectorCo } return nil } + +func DisplayModulrConfigV3(cmd *cobra.Command, v3Config *shared.V3GetConnectorConfigResponse) error { + config := v3Config.Data.V3ModulrConfig + + tableData := pterm.TableData{} + tableData = append(tableData, []string{pterm.LightCyan("Name:"), config.Name}) + tableData = append(tableData, []string{pterm.LightCyan("API key:"), config.APIKey}) + tableData = append(tableData, []string{pterm.LightCyan("API secret:"), config.APISecret}) + tableData = append(tableData, []string{pterm.LightCyan("Endpoint:"), config.Endpoint}) + tableData = append(tableData, []string{pterm.LightCyan("Polling Period:"), fctl.StringPointerToString(config.PollingPeriod)}) + + if err := pterm.DefaultTable. + WithWriter(cmd.OutOrStdout()). + WithData(tableData). + Render(); err != nil { + return err + } + return nil +} diff --git a/cmd/payments/connectors/views/moneycorp.go b/cmd/payments/connectors/views/moneycorp.go index df828a05..91caf9e9 100644 --- a/cmd/payments/connectors/views/moneycorp.go +++ b/cmd/payments/connectors/views/moneycorp.go @@ -1,6 +1,7 @@ package views import ( + fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" @@ -30,3 +31,22 @@ func DisplayMoneycorpConfig(cmd *cobra.Command, connectorConfig *shared.Connecto } return nil } + +func DisplayMoneycorpConfigV3(cmd *cobra.Command, v3Config *shared.V3GetConnectorConfigResponse) error { + config := v3Config.Data.V3MoneycorpConfig + + tableData := pterm.TableData{} + tableData = append(tableData, []string{pterm.LightCyan("Name:"), config.Name}) + tableData = append(tableData, []string{pterm.LightCyan("ClientID:"), config.ClientID}) + tableData = append(tableData, []string{pterm.LightCyan("API key:"), config.APIKey}) + tableData = append(tableData, []string{pterm.LightCyan("Endpoint:"), config.Endpoint}) + tableData = append(tableData, []string{pterm.LightCyan("Polling Period:"), fctl.StringPointerToString(config.PollingPeriod)}) + + if err := pterm.DefaultTable. + WithWriter(cmd.OutOrStdout()). + WithData(tableData). + Render(); err != nil { + return err + } + return nil +} diff --git a/cmd/payments/connectors/views/qonto.go b/cmd/payments/connectors/views/qonto.go index 353069c9..ef82f486 100644 --- a/cmd/payments/connectors/views/qonto.go +++ b/cmd/payments/connectors/views/qonto.go @@ -1,7 +1,7 @@ package views import ( - "encoding/json" + fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" @@ -9,12 +9,23 @@ import ( "github.com/formancehq/formance-sdk-go/v3/pkg/models/shared" ) -func DisplayQontoConfig(cmd *cobra.Command, connectorConfig *shared.ConnectorConfigResponse) error { - // Display raw JSON since SDK might not have QontoConfig type yet - jsonData, err := json.MarshalIndent(connectorConfig.Data, "", " ") - if err != nil { +// Qonto is a connector implemented in v3, so not compatible with the v1 call. + +func DisplayQontoConfigV3(cmd *cobra.Command, v3Config *shared.V3GetConnectorConfigResponse) error { + config := v3Config.Data.V3QontoConfig + + tableData := pterm.TableData{} + tableData = append(tableData, []string{pterm.LightCyan("Name:"), config.Name}) + tableData = append(tableData, []string{pterm.LightCyan("API Key:"), config.APIKey}) + tableData = append(tableData, []string{pterm.LightCyan("Client ID:"), config.ClientID}) + tableData = append(tableData, []string{pterm.LightCyan("Polling Period:"), fctl.StringPointerToString(config.PollingPeriod)}) + tableData = append(tableData, []string{pterm.LightCyan("Staging token:"), fctl.StringPointerToString(config.StagingToken)}) + + if err := pterm.DefaultTable. + WithWriter(cmd.OutOrStdout()). + WithData(tableData). + Render(); err != nil { return err } - pterm.DefaultBox.WithWriter(cmd.OutOrStdout()).WithTitle("Qonto Configuration").Println(string(jsonData)) return nil } diff --git a/cmd/payments/connectors/views/stripe.go b/cmd/payments/connectors/views/stripe.go index 87fc77d4..9abcf10e 100644 --- a/cmd/payments/connectors/views/stripe.go +++ b/cmd/payments/connectors/views/stripe.go @@ -1,6 +1,7 @@ package views import ( + fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" @@ -28,3 +29,20 @@ func DisplayStripeConfig(cmd *cobra.Command, connectorConfig *shared.ConnectorCo } return nil } + +func DisplayStripeConfigV3(cmd *cobra.Command, v3Config *shared.V3GetConnectorConfigResponse) error { + config := v3Config.Data.V3StripeConfig + + tableData := pterm.TableData{} + tableData = append(tableData, []string{pterm.LightCyan("Name:"), config.Name}) + tableData = append(tableData, []string{pterm.LightCyan("API key:"), config.APIKey}) + tableData = append(tableData, []string{pterm.LightCyan("Polling Period:"), fctl.StringPointerToString(config.PollingPeriod)}) + + if err := pterm.DefaultTable. + WithWriter(cmd.OutOrStdout()). + WithData(tableData). + Render(); err != nil { + return err + } + return nil +} diff --git a/cmd/payments/connectors/views/wise.go b/cmd/payments/connectors/views/wise.go index 4b777390..e29860fc 100644 --- a/cmd/payments/connectors/views/wise.go +++ b/cmd/payments/connectors/views/wise.go @@ -1,6 +1,7 @@ package views import ( + fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" @@ -28,3 +29,20 @@ func DisplayWiseConfig(cmd *cobra.Command, connectorConfig *shared.ConnectorConf } return nil } + +func DisplayWiseConfigV3(cmd *cobra.Command, v3Config *shared.V3GetConnectorConfigResponse) error { + config := v3Config.Data.V3WiseConfig + + tableData := pterm.TableData{} + tableData = append(tableData, []string{pterm.LightCyan("Name:"), config.Name}) + tableData = append(tableData, []string{pterm.LightCyan("API key:"), config.APIKey}) + tableData = append(tableData, []string{pterm.LightCyan("Polling Period:"), fctl.StringPointerToString(config.PollingPeriod)}) + + if err := pterm.DefaultTable. + WithWriter(cmd.OutOrStdout()). + WithData(tableData). + Render(); err != nil { + return err + } + return nil +} diff --git a/membershipclient/go.mod b/membershipclient/go.mod index 20bc10af..8e1905a4 100644 --- a/membershipclient/go.mod +++ b/membershipclient/go.mod @@ -1,6 +1,6 @@ module github.com/formancehq/fctl/membershipclient -go 1.23 +go 1.23.0 require ( github.com/stretchr/testify v1.10.0 diff --git a/membershipclient/go.sum b/membershipclient/go.sum index c97062a6..25ed05cf 100644 --- a/membershipclient/go.sum +++ b/membershipclient/go.sum @@ -1,6 +1,7 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e h1:bRhVy7zSSasaqNksaRZiA5EEI+Ei4I1nO5Jh72wfHlg= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= From 5e0b5756d72d77fae3c94dd000b92220c64ddcae Mon Sep 17 00:00:00 2001 From: Quentin David Date: Tue, 27 Jan 2026 11:39:13 +0100 Subject: [PATCH 2/4] Fix lower case and flag naming --- cmd/payments/connectors/configs/getconfig.go | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/cmd/payments/connectors/configs/getconfig.go b/cmd/payments/connectors/configs/getconfig.go index 368e5052..222f8b4c 100644 --- a/cmd/payments/connectors/configs/getconfig.go +++ b/cmd/payments/connectors/configs/getconfig.go @@ -57,7 +57,7 @@ func NewLoadConfigCommand() *cobra.Command { fctl.WithAliases("getconfig", "getconf", "gc", "get", "g"), fctl.WithArgs(cobra.ExactArgs(0)), fctl.WithValidArgsFunction(cobra.NoFileCompletions), - fctl.WithStringFlag("provider", "", "Provider name"), + fctl.WithStringFlag("provider", "", "Provider name (only used for v0, v1 or v2)"), fctl.WithStringFlag("connector-id", "", "Connector ID"), fctl.WithShortDescription(fmt.Sprintf("Read a connector config (Connectors available: %v)", internal.AllConnectors)), fctl.WithController[*PaymentsLoadConfigStore](c), @@ -69,7 +69,6 @@ func (c *PaymentsLoadConfigController) GetStore() *PaymentsLoadConfigStore { } func (c *PaymentsLoadConfigController) Run(cmd *cobra.Command, args []string) (fctl.Renderable, error) { - _, profile, profileName, relyingParty, err := fctl.LoadAndAuthenticateCurrentProfile(cmd) if err != nil { return nil, err @@ -93,7 +92,7 @@ func (c *PaymentsLoadConfigController) Run(cmd *cobra.Command, args []string) (f return nil, fmt.Errorf("connector-id is required for v3") } - response, err := store.Client().Payments.V3.GetConnectorConfig(cmd.Context(), operations.V3GetConnectorConfigRequest{ + response, err := stackClient.Payments.V3.GetConnectorConfig(cmd.Context(), operations.V3GetConnectorConfigRequest{ ConnectorID: connectorID, }) if err != nil { @@ -109,7 +108,7 @@ func (c *PaymentsLoadConfigController) Run(cmd *cobra.Command, args []string) (f c.store.V3ConnectorConfig = response.V3GetConnectorConfigResponse c.store.ConnectorID = connectorID - c.store.Provider = string(response.V3GetConnectorConfigResponse.Data.Type) + c.store.Provider = strings.ToLower(string(response.V3GetConnectorConfigResponse.Data.Type)) case versions.V0: if provider == "" { @@ -200,7 +199,7 @@ func (c *PaymentsLoadConfigController) Render(cmd *cobra.Command, args []string) return c.renderV1V2(cmd, args) } -func (c *PaymentsGetConfigController) renderV3(cmd *cobra.Command, args []string) error { +func (c *PaymentsLoadConfigController) renderV3(cmd *cobra.Command, args []string) error { var err error provider := c.store.Provider switch provider { @@ -227,13 +226,13 @@ func (c *PaymentsGetConfigController) renderV3(cmd *cobra.Command, args []string case internal.ColumnConnector: err = views.DisplayColumnConfigV3(cmd, c.store.V3ConnectorConfig) default: - pterm.Error.WithWriter(cmd.OutOrStderr()).Printfln("Connection unknown.") + pterm.Error.WithWriter(cmd.OutOrStderr()).Printfln("Unknown provider.") } return err } -func (c *PaymentsGetConfigController) renderV1V2(cmd *cobra.Command, args []string) error { +func (c *PaymentsLoadConfigController) renderV1V2(cmd *cobra.Command, args []string) error { if c.store.ConnectorConfig == nil { return fmt.Errorf("no connector config available") } @@ -258,7 +257,7 @@ func (c *PaymentsGetConfigController) renderV1V2(cmd *cobra.Command, args []stri case internal.AdyenConnector: err = views.DisplayAdyenConfig(cmd, c.store.ConnectorConfig) default: - pterm.Error.WithWriter(cmd.OutOrStderr()).Printfln("Connection unknown.") + pterm.Error.WithWriter(cmd.OutOrStderr()).Printfln("Unknown provider.") } return err From 6828425f77100b183927339ec9ff06997fd9e5ad Mon Sep 17 00:00:00 2001 From: Quentin David Date: Tue, 27 Jan 2026 14:25:57 +0100 Subject: [PATCH 3/4] Update import for connector to please CI --- cmd/payments/connectors/views/adyen.go | 3 ++- cmd/payments/connectors/views/atlar.go | 3 ++- cmd/payments/connectors/views/banking_circle.go | 3 ++- cmd/payments/connectors/views/column.go | 4 ++-- cmd/payments/connectors/views/currency_cloud.go | 4 ++-- cmd/payments/connectors/views/mangopay.go | 3 ++- cmd/payments/connectors/views/modulr.go | 3 ++- cmd/payments/connectors/views/moneycorp.go | 3 ++- cmd/payments/connectors/views/qonto.go | 4 ++-- cmd/payments/connectors/views/stripe.go | 3 ++- cmd/payments/connectors/views/wise.go | 3 ++- 11 files changed, 22 insertions(+), 14 deletions(-) diff --git a/cmd/payments/connectors/views/adyen.go b/cmd/payments/connectors/views/adyen.go index a316a8b6..34aec0c0 100644 --- a/cmd/payments/connectors/views/adyen.go +++ b/cmd/payments/connectors/views/adyen.go @@ -1,11 +1,12 @@ package views import ( - fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" "github.com/formancehq/formance-sdk-go/v3/pkg/models/shared" + + fctl "github.com/formancehq/fctl/pkg" ) func DisplayAdyenConfig(cmd *cobra.Command, connectorConfig *shared.ConnectorConfigResponse) error { diff --git a/cmd/payments/connectors/views/atlar.go b/cmd/payments/connectors/views/atlar.go index 6abdf3a8..0318db3c 100644 --- a/cmd/payments/connectors/views/atlar.go +++ b/cmd/payments/connectors/views/atlar.go @@ -2,12 +2,13 @@ package views import ( "fmt" - fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" "github.com/formancehq/formance-sdk-go/v3/pkg/models/shared" + + fctl "github.com/formancehq/fctl/pkg" ) func DisplayAtlarConfig(cmd *cobra.Command, connectorConfig *shared.ConnectorConfigResponse) error { diff --git a/cmd/payments/connectors/views/banking_circle.go b/cmd/payments/connectors/views/banking_circle.go index 38ca7f23..a67b984a 100644 --- a/cmd/payments/connectors/views/banking_circle.go +++ b/cmd/payments/connectors/views/banking_circle.go @@ -1,11 +1,12 @@ package views import ( - fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" "github.com/formancehq/formance-sdk-go/v3/pkg/models/shared" + + fctl "github.com/formancehq/fctl/pkg" ) func DisplayBankingCircleConfig(cmd *cobra.Command, connectorConfig *shared.ConnectorConfigResponse) error { diff --git a/cmd/payments/connectors/views/column.go b/cmd/payments/connectors/views/column.go index fe71bda0..1d7859b3 100644 --- a/cmd/payments/connectors/views/column.go +++ b/cmd/payments/connectors/views/column.go @@ -1,12 +1,12 @@ package views import ( - fctl "github.com/formancehq/fctl/pkg" - "github.com/pterm/pterm" "github.com/spf13/cobra" "github.com/formancehq/formance-sdk-go/v3/pkg/models/shared" + + fctl "github.com/formancehq/fctl/pkg" ) // Column is a connector implemented in v3, so not compatible with the v1 call. diff --git a/cmd/payments/connectors/views/currency_cloud.go b/cmd/payments/connectors/views/currency_cloud.go index 7a04046f..8f0c9677 100644 --- a/cmd/payments/connectors/views/currency_cloud.go +++ b/cmd/payments/connectors/views/currency_cloud.go @@ -1,12 +1,12 @@ package views import ( - fctl "github.com/formancehq/fctl/pkg" - "github.com/pterm/pterm" "github.com/spf13/cobra" "github.com/formancehq/formance-sdk-go/v3/pkg/models/shared" + + fctl "github.com/formancehq/fctl/pkg" ) func DisplayCurrencyCloudConfig(cmd *cobra.Command, connectorConfig *shared.ConnectorConfigResponse) error { diff --git a/cmd/payments/connectors/views/mangopay.go b/cmd/payments/connectors/views/mangopay.go index 4a874cc2..efba7a10 100644 --- a/cmd/payments/connectors/views/mangopay.go +++ b/cmd/payments/connectors/views/mangopay.go @@ -1,11 +1,12 @@ package views import ( - fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" "github.com/formancehq/formance-sdk-go/v3/pkg/models/shared" + + fctl "github.com/formancehq/fctl/pkg" ) func DisplayMangopayConfig(cmd *cobra.Command, connectorConfig *shared.ConnectorConfigResponse) error { diff --git a/cmd/payments/connectors/views/modulr.go b/cmd/payments/connectors/views/modulr.go index cd9ce2ca..e7474475 100644 --- a/cmd/payments/connectors/views/modulr.go +++ b/cmd/payments/connectors/views/modulr.go @@ -1,11 +1,12 @@ package views import ( - fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" "github.com/formancehq/formance-sdk-go/v3/pkg/models/shared" + + fctl "github.com/formancehq/fctl/pkg" ) func DisplayModulrConfig(cmd *cobra.Command, connectorConfig *shared.ConnectorConfigResponse) error { diff --git a/cmd/payments/connectors/views/moneycorp.go b/cmd/payments/connectors/views/moneycorp.go index 91caf9e9..0a923528 100644 --- a/cmd/payments/connectors/views/moneycorp.go +++ b/cmd/payments/connectors/views/moneycorp.go @@ -1,11 +1,12 @@ package views import ( - fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" "github.com/formancehq/formance-sdk-go/v3/pkg/models/shared" + + fctl "github.com/formancehq/fctl/pkg" ) func DisplayMoneycorpConfig(cmd *cobra.Command, connectorConfig *shared.ConnectorConfigResponse) error { diff --git a/cmd/payments/connectors/views/qonto.go b/cmd/payments/connectors/views/qonto.go index ef82f486..93866354 100644 --- a/cmd/payments/connectors/views/qonto.go +++ b/cmd/payments/connectors/views/qonto.go @@ -1,12 +1,12 @@ package views import ( - fctl "github.com/formancehq/fctl/pkg" - "github.com/pterm/pterm" "github.com/spf13/cobra" "github.com/formancehq/formance-sdk-go/v3/pkg/models/shared" + + fctl "github.com/formancehq/fctl/pkg" ) // Qonto is a connector implemented in v3, so not compatible with the v1 call. diff --git a/cmd/payments/connectors/views/stripe.go b/cmd/payments/connectors/views/stripe.go index 9abcf10e..83e0528f 100644 --- a/cmd/payments/connectors/views/stripe.go +++ b/cmd/payments/connectors/views/stripe.go @@ -1,11 +1,12 @@ package views import ( - fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" "github.com/formancehq/formance-sdk-go/v3/pkg/models/shared" + + fctl "github.com/formancehq/fctl/pkg" ) func DisplayStripeConfig(cmd *cobra.Command, connectorConfig *shared.ConnectorConfigResponse) error { diff --git a/cmd/payments/connectors/views/wise.go b/cmd/payments/connectors/views/wise.go index e29860fc..e3c1f675 100644 --- a/cmd/payments/connectors/views/wise.go +++ b/cmd/payments/connectors/views/wise.go @@ -1,11 +1,12 @@ package views import ( - fctl "github.com/formancehq/fctl/pkg" "github.com/pterm/pterm" "github.com/spf13/cobra" "github.com/formancehq/formance-sdk-go/v3/pkg/models/shared" + + fctl "github.com/formancehq/fctl/pkg" ) func DisplayWiseConfig(cmd *cobra.Command, connectorConfig *shared.ConnectorConfigResponse) error { From 0777c5fda74519216b40ca4be7e2d58cd00c154d Mon Sep 17 00:00:00 2001 From: Quentin David Date: Tue, 27 Jan 2026 15:12:38 +0100 Subject: [PATCH 4/4] Return an error on unknown provider --- cmd/payments/connectors/configs/getconfig.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cmd/payments/connectors/configs/getconfig.go b/cmd/payments/connectors/configs/getconfig.go index 222f8b4c..2ad1ae82 100644 --- a/cmd/payments/connectors/configs/getconfig.go +++ b/cmd/payments/connectors/configs/getconfig.go @@ -226,7 +226,8 @@ func (c *PaymentsLoadConfigController) renderV3(cmd *cobra.Command, args []strin case internal.ColumnConnector: err = views.DisplayColumnConfigV3(cmd, c.store.V3ConnectorConfig) default: - pterm.Error.WithWriter(cmd.OutOrStderr()).Printfln("Unknown provider.") + err = fmt.Errorf("unknown provider: %s", provider) + pterm.Error.WithWriter(cmd.OutOrStderr()).Printfln("%s", err.Error()) } return err @@ -237,7 +238,8 @@ func (c *PaymentsLoadConfigController) renderV1V2(cmd *cobra.Command, args []str return fmt.Errorf("no connector config available") } var err error - switch c.store.Provider { + provider := c.store.Provider + switch provider { case internal.StripeConnector: err = views.DisplayStripeConfig(cmd, c.store.ConnectorConfig) case internal.ModulrConnector: @@ -257,7 +259,8 @@ func (c *PaymentsLoadConfigController) renderV1V2(cmd *cobra.Command, args []str case internal.AdyenConnector: err = views.DisplayAdyenConfig(cmd, c.store.ConnectorConfig) default: - pterm.Error.WithWriter(cmd.OutOrStderr()).Printfln("Unknown provider.") + err = fmt.Errorf("unknown provider: %s", provider) + pterm.Error.WithWriter(cmd.OutOrStderr()).Printfln("%s", err.Error()) } return err