@@ -6,11 +6,13 @@ import (
66 "os"
77
88 "github.com/jmhodges/clock"
9+ "google.golang.org/protobuf/types/known/emptypb"
910
1011 "github.com/letsencrypt/boulder/cmd"
11- "github.com/letsencrypt/boulder/email"
12- emailpb "github.com/letsencrypt/boulder/email/proto"
1312 bgrpc "github.com/letsencrypt/boulder/grpc"
13+ "github.com/letsencrypt/boulder/salesforce"
14+ emailpb "github.com/letsencrypt/boulder/salesforce/email/proto"
15+ salesforcepb "github.com/letsencrypt/boulder/salesforce/proto"
1416)
1517
1618// Config holds the configuration for the email-exporter service.
@@ -62,6 +64,34 @@ type Config struct {
6264 OpenTelemetry cmd.OpenTelemetryConfig
6365}
6466
67+ // legacyEmailExporterServer adapts the salesforce exporter implementation to
68+ // the deprecated email.Exporter gRPC service.
69+ //
70+ // TODO(#8410): Remove legacyEmailExporterServer once fully migrated to
71+ // salesforcepb.Exporter.
72+ type legacyEmailExporterServer struct {
73+ emailpb.UnimplementedExporterServer
74+ delegate salesforcepb.ExporterServer
75+ }
76+
77+ func (s legacyEmailExporterServer ) SendContacts (ctx context.Context , req * emailpb.SendContactsRequest ) (* emptypb.Empty , error ) {
78+ return s .delegate .SendContacts (ctx , & salesforcepb.SendContactsRequest {Emails : req .GetEmails ()})
79+ }
80+
81+ func (s legacyEmailExporterServer ) SendCase (ctx context.Context , req * emailpb.SendCaseRequest ) (* emptypb.Empty , error ) {
82+ return s .delegate .SendCase (ctx , & salesforcepb.SendCaseRequest {
83+ Origin : req .GetOrigin (),
84+ Subject : req .GetSubject (),
85+ Description : req .GetDescription (),
86+ ContactEmail : req .GetContactEmail (),
87+ Organization : req .GetOrganization (),
88+ AccountId : req .GetAccountId (),
89+ RateLimitName : req .GetRateLimitName (),
90+ RateLimitTier : req .GetRateLimitTier (),
91+ UseCase : req .GetUseCase (),
92+ })
93+ }
94+
6595func main () {
6696 configFile := flag .String ("config" , "" , "Path to configuration file" )
6797 grpcAddr := flag .String ("addr" , "" , "gRPC listen address override" )
@@ -95,12 +125,12 @@ func main() {
95125 clientSecret , err := c .EmailExporter .ClientSecret .Pass ()
96126 cmd .FailOnError (err , "Loading clientSecret" )
97127
98- var cache * email .EmailCache
128+ var cache * salesforce .EmailCache
99129 if c .EmailExporter .EmailCacheSize > 0 {
100- cache = email .NewHashedEmailCache (c .EmailExporter .EmailCacheSize , scope )
130+ cache = salesforce .NewHashedEmailCache (c .EmailExporter .EmailCacheSize , scope )
101131 }
102132
103- sfClient , err := email .NewSalesforceClientImpl (
133+ sfClient , err := salesforce .NewSalesforceClientImpl (
104134 clk ,
105135 c .EmailExporter .PardotBusinessUnit ,
106136 clientId ,
@@ -109,21 +139,25 @@ func main() {
109139 c .EmailExporter .PardotBaseURL ,
110140 )
111141 cmd .FailOnError (err , "Creating Pardot API client" )
112- exporterServer := email .NewExporterImpl (sfClient , cache , c .EmailExporter .PerDayLimit , c .EmailExporter .MaxConcurrentRequests , scope , logger )
142+ server := salesforce .NewExporterImpl (sfClient , cache , c .EmailExporter .PerDayLimit , c .EmailExporter .MaxConcurrentRequests , scope , logger )
113143
114144 tlsConfig , err := c .EmailExporter .TLS .Load (scope )
115145 cmd .FailOnError (err , "Loading email-exporter TLS config" )
116146
117- daemonCtx , shutdownExporterServer := context .WithCancel (context .Background ())
118- go exporterServer .Start (daemonCtx )
147+ daemonCtx , shutdown := context .WithCancel (context .Background ())
148+ go server .Start (daemonCtx )
119149
120- start , err := bgrpc .NewServer (c .EmailExporter .GRPC , logger ).Add (
121- & emailpb .Exporter_ServiceDesc , exporterServer ).Build (tlsConfig , scope , clk )
150+ srv := bgrpc .NewServer (c .EmailExporter .GRPC , logger )
151+ srv = srv .Add (& salesforcepb .Exporter_ServiceDesc , server )
152+ // TODO(#8410): Remove emailpb.Exporter once fully migrated to
153+ // salesforcepb.Exporter.
154+ srv = srv .Add (& emailpb .Exporter_ServiceDesc , legacyEmailExporterServer {delegate : server })
155+ start , err := srv .Build (tlsConfig , scope , clk )
122156 cmd .FailOnError (err , "Configuring email-exporter gRPC server" )
123157
124158 err = start ()
125- shutdownExporterServer ()
126- exporterServer .Drain ()
159+ shutdown ()
160+ server .Drain ()
127161 cmd .FailOnError (err , "email-exporter gRPC service failed to start" )
128162}
129163
0 commit comments