diff --git a/.env.example b/.env.example index 0e16e1e6..b6905fe4 100644 --- a/.env.example +++ b/.env.example @@ -12,6 +12,7 @@ AWS_SECRET_ACCESS_KEY= AWS_KMS_KEY_ID= CHECKOUT_PUBLIC_KEY= CHECKOUT_SECRET_KEY= +CHECKOUT_ENV=sandbox EVM_PRIVATE_KEY= DB_NAME=string_db DB_USERNAME=string_db diff --git a/api/handler/common.go b/api/handler/common.go index c1699b63..a3a42d84 100644 --- a/api/handler/common.go +++ b/api/handler/common.go @@ -56,7 +56,7 @@ func SetJWTCookie(c echo.Context, jwt service.JWT) error { cookie.Value = jwt.Token // cookie.HttpOnly = true // due the short expiration time it is not needed to be http only cookie.Expires = jwt.ExpAt // we want the cookie to expire at the same time as the token - cookie.SameSite = http.SameSiteNoneMode + cookie.SameSite = getCookieSameSiteMode() cookie.Path = "/" // Send cookie in every sub path request cookie.Secure = !IsLocalEnv() // in production allow https only c.SetCookie(cookie) @@ -70,7 +70,7 @@ func SetRefreshTokenCookie(c echo.Context, refresh service.RefreshTokenResponse) cookie.Value = refresh.Token cookie.HttpOnly = true cookie.Expires = refresh.ExpAt // we want the cookie to expire at the same time as the token - cookie.SameSite = http.SameSiteNoneMode + cookie.SameSite = getCookieSameSiteMode() cookie.Path = "/login/" // Send cookie only in /login path request cookie.Secure = !IsLocalEnv() // in production allow https only c.SetCookie(cookie) @@ -98,7 +98,7 @@ func DeleteAuthCookies(c echo.Context) error { cookie.Name = "StringJWT" cookie.Value = "" cookie.Expires = time.Now() - cookie.SameSite = http.SameSiteLaxMode + cookie.SameSite = getCookieSameSiteMode() cookie.Path = "/" // Send cookie in every sub path request cookie.Secure = !IsLocalEnv() c.SetCookie(cookie) @@ -107,7 +107,7 @@ func DeleteAuthCookies(c echo.Context) error { cookie.Name = "refresh_token" cookie.Value = "" cookie.Expires = time.Now() - cookie.SameSite = http.SameSiteNoneMode + cookie.SameSite = getCookieSameSiteMode() cookie.Path = "/login/" // Send cookie only in refresh path request cookie.Secure = !IsLocalEnv() c.SetCookie(cookie) @@ -124,6 +124,14 @@ func validAddress(addr string) bool { return re.MatchString(addr) } +func getCookieSameSiteMode() http.SameSite { + sameSiteMode := http.SameSiteNoneMode // allow cors + if IsLocalEnv() { + sameSiteMode = http.SameSiteLaxMode // because SameSiteNoneMode is not allowed in localhost we use lax mode + } + return sameSiteMode +} + func SanitizeChecksums(addrs ...*string) { for _, addr := range addrs { if !validAddress(*addr) { diff --git a/infra/dev/variables.tf b/infra/dev/variables.tf index 54364058..e525775a 100644 --- a/infra/dev/variables.tf +++ b/infra/dev/variables.tf @@ -176,6 +176,10 @@ locals { name = "UNIT21_ORG_NAME" value = "string" }, + { + name = "CHECKOUT_ENV" + value = local.env + }, { name = "DD_LOGS_ENABLED" value = "true" diff --git a/infra/prod/variables.tf b/infra/prod/variables.tf index 347278fe..1fef5cc0 100644 --- a/infra/prod/variables.tf +++ b/infra/prod/variables.tf @@ -169,6 +169,10 @@ locals { { name = "UNIT21_ENV" value = "api.prod2" + }, + { + name = "CHECKOUT_ENV" + value = local.env }, { name = "UNIT21_ORG_NAME" diff --git a/pkg/service/checkout.go b/pkg/service/checkout.go index fd7db0c6..a1aa7e38 100644 --- a/pkg/service/checkout.go +++ b/pkg/service/checkout.go @@ -16,8 +16,14 @@ import ( func getConfig() (*checkout.Config, error) { var sk = os.Getenv("CHECKOUT_SECRET_KEY") var pk = os.Getenv("CHECKOUT_PUBLIC_KEY") + var env = os.Getenv("CHECKOUT_ENV") + checkoutEnv := checkout.Sandbox - var config, err = checkout.SdkConfig(&sk, &pk, checkout.Sandbox) + if env == "prod" { + checkoutEnv = checkout.Production + } + + var config, err = checkout.SdkConfig(&sk, &pk, checkoutEnv) if err != nil { return nil, common.StringError(err) } diff --git a/scripts/data_seeding.go b/scripts/data_seeding.go index a0f236f8..805bfdf5 100644 --- a/scripts/data_seeding.go +++ b/scripts/data_seeding.go @@ -43,7 +43,7 @@ func DataSeeding() { fmt.Printf("%+v", err) return } - networkMumbai, err := repos.Network.Create(model.Network{Name: "Mumbai Testnet", NetworkID: 80001, ChainID: 80001, GasOracle: "poly", RPCUrl: "https://matic-mumbai.chainstacklabs.com", ExplorerUrl: "https://mumbai.polygonscan.com/"}) + networkMumbai, err := repos.Network.Create(model.Network{Name: "Mumbai Testnet", NetworkID: 80001, ChainID: 80001, GasOracle: "poly", RPCUrl: "https://matic-mumbai.chainstacklabs.com", ExplorerUrl: "https://mumbai.polygonscan.com"}) if err != nil { panic(err) } @@ -51,7 +51,7 @@ func DataSeeding() { if err != nil { panic(err) } - networkEthereum, err := repos.Network.Create(model.Network{Name: "Ethereum Mainnet", NetworkID: 1, ChainID: 1, GasOracle: "eth", RPCUrl: "https://rpc.ankr.com/eth", ExplorerUrl: "https://etherscan.io/"}) + networkEthereum, err := repos.Network.Create(model.Network{Name: "Ethereum Mainnet", NetworkID: 1, ChainID: 1, GasOracle: "eth", RPCUrl: "https://rpc.ankr.com/eth", ExplorerUrl: "https://etherscan.io"}) if err != nil { panic(err) } @@ -63,11 +63,11 @@ func DataSeeding() { if err != nil { panic(err) } - networkNitroGoerli, err := repos.Network.Create(model.Network{Name: "Nitro Goerli Rollup Testnet", NetworkID: 421613, ChainID: 421613, GasOracle: "arb", RPCUrl: "https://goerli-rollup.arbitrum.io/rpc", ExplorerUrl: "https://goerli.arbiscan.io/"}) + networkNitroGoerli, err := repos.Network.Create(model.Network{Name: "Nitro Goerli Rollup Testnet", NetworkID: 421613, ChainID: 421613, GasOracle: "arb", RPCUrl: "https://goerli-rollup.arbitrum.io/rpc", ExplorerUrl: "https://goerli.arbiscan.io"}) if err != nil { panic(err) } - networkArbitrumNova, err := repos.Network.Create(model.Network{Name: "Arbitrum Nova Mainnet", NetworkID: 42170, ChainID: 42170, GasOracle: "arb", RPCUrl: "https://nova.arbitrum.io/rpc", ExplorerUrl: "https://nova-explorer.arbitrum.io/"}) + networkArbitrumNova, err := repos.Network.Create(model.Network{Name: "Arbitrum Nova Mainnet", NetworkID: 42170, ChainID: 42170, GasOracle: "arb", RPCUrl: "https://nova.arbitrum.io/rpc", ExplorerUrl: "https://nova-explorer.arbitrum.io"}) if err != nil { panic(err) } @@ -230,7 +230,7 @@ func MockSeeding() { fmt.Printf("%+v", err) return } - networkMumbai, err := repos.Network.Create(model.Network{Name: "Mumbai Testnet", NetworkID: 80001, ChainID: 80001, GasOracle: "poly", RPCUrl: "https://matic-mumbai.chainstacklabs.com", ExplorerUrl: "https://mumbai.polygonscan.com/"}) + networkMumbai, err := repos.Network.Create(model.Network{Name: "Mumbai Testnet", NetworkID: 80001, ChainID: 80001, GasOracle: "poly", RPCUrl: "https://matic-mumbai.chainstacklabs.com", ExplorerUrl: "https://mumbai.polygonscan.com"}) if err != nil { panic(err) } @@ -238,7 +238,7 @@ func MockSeeding() { if err != nil { panic(err) } - networkEthereum, err := repos.Network.Create(model.Network{Name: "Ethereum Mainnet", NetworkID: 1, ChainID: 1, GasOracle: "eth", RPCUrl: "https://rpc.ankr.com/eth", ExplorerUrl: "https://etherscan.io/"}) + networkEthereum, err := repos.Network.Create(model.Network{Name: "Ethereum Mainnet", NetworkID: 1, ChainID: 1, GasOracle: "eth", RPCUrl: "https://rpc.ankr.com/eth", ExplorerUrl: "https://etherscan.io"}) if err != nil { panic(err) } @@ -250,11 +250,11 @@ func MockSeeding() { if err != nil { panic(err) } - networkNitroGoerli, err := repos.Network.Create(model.Network{Name: "Nitro Goerli Rollup Testnet", NetworkID: 421613, ChainID: 421613, GasOracle: "arb", RPCUrl: "https://goerli-rollup.arbitrum.io/rpc", ExplorerUrl: "https://goerli.arbiscan.io/"}) + networkNitroGoerli, err := repos.Network.Create(model.Network{Name: "Nitro Goerli Rollup Testnet", NetworkID: 421613, ChainID: 421613, GasOracle: "arb", RPCUrl: "https://goerli-rollup.arbitrum.io/rpc", ExplorerUrl: "https://goerli.arbiscan.io"}) if err != nil { panic(err) } - networkArbitrumNova, err := repos.Network.Create(model.Network{Name: "Arbitrum Nova Mainnet", NetworkID: 42170, ChainID: 42170, GasOracle: "arb", RPCUrl: "https://nova.arbitrum.io/rpc", ExplorerUrl: "https://nova-explorer.arbitrum.io/"}) + networkArbitrumNova, err := repos.Network.Create(model.Network{Name: "Arbitrum Nova Mainnet", NetworkID: 42170, ChainID: 42170, GasOracle: "arb", RPCUrl: "https://nova.arbitrum.io/rpc", ExplorerUrl: "https://nova-explorer.arbitrum.io"}) if err != nil { panic(err) }