From fc0a880b5c4ea3d4464ad6d03d393886160d12ac Mon Sep 17 00:00:00 2001 From: jeffyanta Date: Mon, 27 Apr 2026 17:30:18 -0400 Subject: [PATCH] Enable Apple pay on build 1.6.0+ --- account/server.go | 54 ++++++++++++++++++++++++++++++++++++++--------- go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/account/server.go b/account/server.go index ca1efff..a8e7468 100644 --- a/account/server.go +++ b/account/server.go @@ -19,6 +19,8 @@ import ( "github.com/code-payments/flipcash2-server/auth" "github.com/code-payments/flipcash2-server/database" "github.com/code-payments/flipcash2-server/model" + "github.com/code-payments/flipcash2-server/rpc" + ocp_client "github.com/code-payments/ocp-server/grpc/client" ocp_common "github.com/code-payments/ocp-server/ocp/common" ) @@ -40,17 +42,34 @@ var ( DefaultNewCurrencyFeeAmount = ocp_common.ToCoreMintQuarks(15) ) +type onRampProviderConfig struct { + Provider accountpb.UserFlags_OnRampProvider + // MinVersion, when non-nil, gates this provider behind a minimum client + // version. Clients on older versions (or without a parseable user-agent) + // will not have this provider included. + MinVersion *ocp_client.Version +} + var ( defaultOnRampProviders = []accountpb.UserFlags_OnRampProvider{ accountpb.UserFlags_PHANTOM, accountpb.UserFlags_MANUAL_DEPOSIT, } - onRampProvidersByCountryAndPlatform = map[string]map[commonpb.Platform][]accountpb.UserFlags_OnRampProvider{ - /*"us": { + onRampProvidersByCountryAndPlatform = map[string]map[commonpb.Platform][]onRampProviderConfig{ + "us": { commonpb.Platform_APPLE: { - accountpb.UserFlags_COINBASE_VIRTUAL, + { + Provider: accountpb.UserFlags_COINBASE_VIRTUAL, + MinVersion: &ocp_client.Version{Major: 1, Minor: 6, Patch: 0}, + }, }, - },*/ + /*commonpb.Platform_GOOGLE: { + { + Provider: accountpb.UserFlags_COINBASE_VIRTUAL, + MinVersion: &ocp_client.Version{Major: 0, Minor: 0, Patch: 0}, // todo + }, + },*/ + }, } staffAppleOnRampProviders = []accountpb.UserFlags_OnRampProvider{ @@ -208,7 +227,7 @@ func (s *Server) GetUserFlags(ctx context.Context, req *accountpb.GetUserFlagsRe supportedOnRampProvidersForUser = staffGoogleOnRampProviders } } else { - supportedOnRampProvidersForUser = getSupportedOnRampProviders(req.CountryCode, req.Platform) + supportedOnRampProvidersForUser = getSupportedOnRampProviders(ctx, req.CountryCode, req.Platform) } if slices.Contains(supportedOnRampProvidersForUser, accountpb.UserFlags_COINBASE_VIRTUAL) { preferredOnRampProviderForUser = accountpb.UserFlags_COINBASE_VIRTUAL @@ -245,7 +264,7 @@ func (s *Server) GetUserFlags(ctx context.Context, req *accountpb.GetUserFlagsRe } func (s *Server) GetUnauthenticatedUserFlags(ctx context.Context, req *accountpb.GetUnauthenticatedUserFlagsRequest) (*accountpb.GetUnauthenticatedUserFlagsResponse, error) { - supportedOnRampProvidersForUser := getSupportedOnRampProviders(req.CountryCode, req.Platform) + supportedOnRampProvidersForUser := getSupportedOnRampProviders(ctx, req.CountryCode, req.Platform) var preferredOnRampProviderForUser accountpb.UserFlags_OnRampProvider if slices.Contains(supportedOnRampProvidersForUser, accountpb.UserFlags_COINBASE_VIRTUAL) { @@ -275,7 +294,7 @@ func (s *Server) GetUnauthenticatedUserFlags(ctx context.Context, req *accountpb }, nil } -func getSupportedOnRampProviders(countryCode *commonpb.CountryCode, platform commonpb.Platform) []accountpb.UserFlags_OnRampProvider { +func getSupportedOnRampProviders(ctx context.Context, countryCode *commonpb.CountryCode, platform commonpb.Platform) []accountpb.UserFlags_OnRampProvider { defaultSupported := make([]accountpb.UserFlags_OnRampProvider, len(defaultOnRampProviders)) copy(defaultSupported, defaultOnRampProviders) @@ -297,8 +316,23 @@ func getSupportedOnRampProviders(countryCode *commonpb.CountryCode, platform com return defaultSupported } - allSupported := make([]accountpb.UserFlags_OnRampProvider, len(byPlatform)+len(defaultSupported)) - copy(allSupported, byPlatform) // Country and platform specific providers take priority - copy(allSupported[len(byPlatform):], defaultSupported) // Followed by default global providers + var clientVersion *ocp_client.Version + if userAgent, err := ocp_client.GetUserAgent(ctx, rpc.UserAgentName); err == nil { + clientVersion = &userAgent.Version + } + + filtered := make([]accountpb.UserFlags_OnRampProvider, 0, len(byPlatform)) + for _, entry := range byPlatform { + if entry.MinVersion != nil { + if clientVersion == nil || clientVersion.Before(entry.MinVersion) { + continue + } + } + filtered = append(filtered, entry.Provider) + } + + allSupported := make([]accountpb.UserFlags_OnRampProvider, 0, len(filtered)+len(defaultSupported)) + allSupported = append(allSupported, filtered...) // Country and platform specific providers take priority + allSupported = append(allSupported, defaultSupported...) // Followed by default global providers return allSupported } diff --git a/go.mod b/go.mod index b099387..3b27b37 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/ReneKroon/ttlcache v1.7.0 github.com/code-payments/flipcash2-protobuf-api v1.3.1-0.20260420185108-1e0abce29a0a github.com/code-payments/ocp-protobuf-api v1.9.0 - github.com/code-payments/ocp-server v1.10.0 + github.com/code-payments/ocp-server v1.10.1-0.20260427033937-2c1fcf69dcba github.com/devsisters/go-applereceipt v0.0.0-20240805020915-fa22a0160fc2 github.com/georgysavva/scany/v2 v2.1.4 github.com/google/uuid v1.6.0 diff --git a/go.sum b/go.sum index 9a4b99a..c280a61 100644 --- a/go.sum +++ b/go.sum @@ -44,8 +44,8 @@ github.com/code-payments/flipcash2-protobuf-api v1.3.1-0.20260420185108-1e0abce2 github.com/code-payments/flipcash2-protobuf-api v1.3.1-0.20260420185108-1e0abce29a0a/go.mod h1:s/1pOsb4FTRD+LcvRKGjfmm6ygRS/m1ep34EIW0fuDs= github.com/code-payments/ocp-protobuf-api v1.9.0 h1:VpcOENVTmebpTENhpVaDbFfPPliK1zuMtjHzdhBQY2U= github.com/code-payments/ocp-protobuf-api v1.9.0/go.mod h1:tw6BooY5a8l6CtSZnKOruyKII0W04n89pcM4BizrgG8= -github.com/code-payments/ocp-server v1.10.0 h1:BKBYqfrQmmMORTVoQn0Qym5B6eb6G792qM+mnG1UWsc= -github.com/code-payments/ocp-server v1.10.0/go.mod h1:tk3LabRL/iRP3C6iImbW5B7oC3ceGRqtmVhkFlqOHZA= +github.com/code-payments/ocp-server v1.10.1-0.20260427033937-2c1fcf69dcba h1:U2mai8GSjwpgk5ywRMJQiF0HnxvZu0krj9YHsJ2EAdI= +github.com/code-payments/ocp-server v1.10.1-0.20260427033937-2c1fcf69dcba/go.mod h1:tk3LabRL/iRP3C6iImbW5B7oC3ceGRqtmVhkFlqOHZA= github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8= github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=