Skip to content

Commit

Permalink
feat: add mangopay connector (#397)
Browse files Browse the repository at this point in the history
  • Loading branch information
paul-nicolas committed Jun 30, 2023
1 parent 25415e3 commit f043e23
Show file tree
Hide file tree
Showing 61 changed files with 1,558 additions and 182 deletions.
22 changes: 22 additions & 0 deletions components/fctl/cmd/payments/connectors/getconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ func NewGetConfigCommand() *cobra.Command {
err = displayCurrencyCloudConfig(cmd, response.ConnectorConfigResponse)
case internal.WiseConnector:
err = displayWiseConfig(cmd, response.ConnectorConfigResponse)
case internal.MangoPayConnector:
err = displayMangoPayConfig(cmd, response.ConnectorConfigResponse)
default:
pterm.Error.WithWriter(cmd.OutOrStderr()).Printfln("Connection unknown.")
}
Expand Down Expand Up @@ -176,3 +178,23 @@ func displayCurrencyCloudConfig(cmd *cobra.Command, connectorConfig *shared.Conn
}
return nil
}

func displayMangoPayConfig(cmd *cobra.Command, connectorConfig *shared.ConnectorConfigResponse) error {
config, ok := connectorConfig.Data.(*shared.MangoPayConfig)
if !ok {
return errors.New("invalid currency cloud connector config")
}

tableData := pterm.TableData{}
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("Endpoint:"), config.Endpoint})

if err := pterm.DefaultTable.
WithWriter(cmd.OutOrStdout()).
WithData(tableData).
Render(); err != nil {
return err
}
return nil
}
21 changes: 19 additions & 2 deletions components/fctl/cmd/payments/connectors/install/bankingcircle.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package install

import (
"fmt"
"io/ioutil"

"github.com/formancehq/fctl/cmd/payments/connectors/internal"
fctl "github.com/formancehq/fctl/pkg"
Expand All @@ -14,8 +15,10 @@ import (

func NewBankingCircleCommand() *cobra.Command {
const (
endpointFlag = "endpoint"
authorizationEndpointFlag = "authorization-endpoint"
endpointFlag = "endpoint"
authorizationEndpointFlag = "authorization-endpoint"
userCertificateFilePathFlag = "user-certificate"
userCertificateKeyFilePathFlag = "user-certificate-key"

defaultEndpoint = "https://sandbox.bankingcircle.com"
defaultAuthorizationEndpoint = "https://authorizationsandbox.bankingcircleconnect.com"
Expand All @@ -25,6 +28,8 @@ func NewBankingCircleCommand() *cobra.Command {
fctl.WithArgs(cobra.ExactArgs(2)),
fctl.WithStringFlag(endpointFlag, defaultEndpoint, "API endpoint"),
fctl.WithStringFlag(authorizationEndpointFlag, defaultAuthorizationEndpoint, "Authorization endpoint"),
fctl.WithStringFlag(userCertificateFilePathFlag, "", "User certificate"),
fctl.WithStringFlag(userCertificateKeyFilePathFlag, "", "User certificate key"),
fctl.WithRunE(func(cmd *cobra.Command, args []string) error {
cfg, err := fctl.GetConfig(cmd)
if err != nil {
Expand All @@ -50,13 +55,25 @@ func NewBankingCircleCommand() *cobra.Command {
return err
}

certificate, err := ioutil.ReadFile(fctl.GetString(cmd, userCertificateFilePathFlag))
if err != nil {
return errors.Wrap(err, "reading user certificate")
}

key, err := ioutil.ReadFile(fctl.GetString(cmd, userCertificateKeyFilePathFlag))
if err != nil {
return errors.Wrap(err, "reading user certificate key")
}

request := operations.InstallConnectorRequest{
Connector: shared.ConnectorBankingCircle,
RequestBody: shared.BankingCircleConfig{
Username: args[0],
Password: args[1],
Endpoint: fctl.GetString(cmd, endpointFlag),
AuthorizationEndpoint: fctl.GetString(cmd, authorizationEndpointFlag),
UserCertificate: string(certificate),
UserCertificateKey: string(key),
},
}
response, err := paymentsClient.Payments.InstallConnector(cmd.Context(), request)
Expand Down
72 changes: 72 additions & 0 deletions components/fctl/cmd/payments/connectors/install/mangopay.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package install

import (
"fmt"

"github.com/formancehq/fctl/cmd/payments/connectors/internal"
fctl "github.com/formancehq/fctl/pkg"
"github.com/formancehq/formance-sdk-go/pkg/models/operations"
"github.com/formancehq/formance-sdk-go/pkg/models/shared"
"github.com/pkg/errors"
"github.com/pterm/pterm"
"github.com/spf13/cobra"
)

func NewMangoPayCommand() *cobra.Command {
const (
endpointFlag = "endpoint"

defaultEndpoint = "https://api.sandbox.mangopay.com"
)
return fctl.NewCommand(internal.MangoPayConnector+" <clientID> <apiKey>",
fctl.WithShortDescription("Install a MangoPay connector"),
fctl.WithArgs(cobra.ExactArgs(2)),
fctl.WithStringFlag(endpointFlag, defaultEndpoint, "API endpoint"),
fctl.WithRunE(func(cmd *cobra.Command, args []string) error {
cfg, err := fctl.GetConfig(cmd)
if err != nil {
return err
}

organizationID, err := fctl.ResolveOrganizationID(cmd, cfg)
if err != nil {
return err
}

stack, err := fctl.ResolveStack(cmd, cfg, organizationID)
if err != nil {
return err
}

if !fctl.CheckStackApprobation(cmd, stack, "You are about to install connector '%s'", internal.MangoPayConnector) {
return fctl.ErrMissingApproval
}

paymentsClient, err := fctl.NewStackClient(cmd, cfg, stack)
if err != nil {
return err
}

request := operations.InstallConnectorRequest{
Connector: shared.ConnectorMangopay,
RequestBody: shared.MangoPayConfig{
ClientID: args[0],
APIKey: args[1],
Endpoint: fctl.GetString(cmd, endpointFlag),
},
}
response, err := paymentsClient.Payments.InstallConnector(cmd.Context(), request)
if err != nil {
return errors.Wrap(err, "installing connector")
}

if response.StatusCode >= 300 {
return fmt.Errorf("unexpected status code: %d", response.StatusCode)
}

pterm.Success.WithWriter(cmd.OutOrStdout()).Printfln("Connector installed!")

return nil
}),
)
}
1 change: 1 addition & 0 deletions components/fctl/cmd/payments/connectors/install/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ func NewInstallCommand() *cobra.Command {
NewCurrencyCloudCommand(),
NewModulrCommand(),
NewWiseCommand(),
NewMangoPayCommand(),
),
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const (
ModulrConnector = "modulr"
StripeConnector = "stripe"
WiseConnector = "wise"
MangoPayConnector = "mangopay"
)

var AllConnectors = []string{
Expand All @@ -14,4 +15,5 @@ var AllConnectors = []string{
ModulrConnector,
StripeConnector,
WiseConnector,
MangoPayConnector,
}
6 changes: 4 additions & 2 deletions components/payments/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ require (
go.opentelemetry.io/otel/trace v1.14.0
go.uber.org/dig v1.16.1
go.uber.org/fx v1.19.1
golang.org/x/oauth2 v0.6.0
golang.org/x/sync v0.1.0
)

Expand All @@ -50,7 +51,7 @@ require (
github.com/go-chi/render v1.0.2 // indirect
github.com/go-logr/logr v1.2.4 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
Expand Down Expand Up @@ -107,10 +108,11 @@ require (
go.uber.org/atomic v1.10.0 // indirect
go.uber.org/multierr v1.9.0 // indirect
go.uber.org/zap v1.24.0 // indirect
golang.org/x/crypto v0.6.0 // indirect
golang.org/x/crypto v0.7.0 // indirect
golang.org/x/net v0.8.0 // indirect
golang.org/x/sys v0.7.0 // indirect
golang.org/x/text v0.8.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto v0.0.0-20230221151758-ace64dc21148 // indirect
google.golang.org/grpc v1.54.0 // indirect
google.golang.org/protobuf v1.30.0 // indirect
Expand Down
10 changes: 7 additions & 3 deletions components/payments/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -164,8 +164,9 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
Expand Down Expand Up @@ -458,8 +459,8 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc=
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A=
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
Expand Down Expand Up @@ -543,6 +544,8 @@ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw=
golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
Expand Down Expand Up @@ -699,6 +702,7 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
Expand Down
2 changes: 2 additions & 0 deletions components/payments/internal/app/api/connectorconfigs.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/formancehq/payments/internal/app/connectors/configtemplate"
"github.com/formancehq/payments/internal/app/connectors/currencycloud"
"github.com/formancehq/payments/internal/app/connectors/dummypay"
"github.com/formancehq/payments/internal/app/connectors/mangopay"
"github.com/formancehq/payments/internal/app/connectors/modulr"
"github.com/formancehq/payments/internal/app/connectors/stripe"
"github.com/formancehq/payments/internal/app/connectors/wise"
Expand All @@ -27,6 +28,7 @@ func connectorConfigsHandler() http.HandlerFunc {
modulr.Config{},
stripe.Config{},
wise.Config{},
mangopay.Config{},
)

err := json.NewEncoder(w).Encode(api.BaseResponse[configtemplate.Configs]{
Expand Down
2 changes: 2 additions & 0 deletions components/payments/internal/app/api/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (

"github.com/formancehq/payments/internal/app/connectors/bankingcircle"
"github.com/formancehq/payments/internal/app/connectors/currencycloud"
"github.com/formancehq/payments/internal/app/connectors/mangopay"

"github.com/formancehq/payments/internal/app/connectors/dummypay"
"github.com/formancehq/payments/internal/app/connectors/modulr"
Expand Down Expand Up @@ -44,6 +45,7 @@ func HTTPModule(serviceInfo api.ServiceInfo, bind string) fx.Option {
addConnector[wise.Config](wise.NewLoader()),
addConnector[currencycloud.Config](currencycloud.NewLoader()),
addConnector[bankingcircle.Config](bankingcircle.NewLoader()),
addConnector[mangopay.Config](mangopay.NewLoader()),
)
}

Expand Down
Loading

1 comment on commit f043e23

@vercel
Copy link

@vercel vercel bot commented on f043e23 Jun 30, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.